Blog
Cara Menemukan Fungsi Panggilan dari Setiap Versi reCaptcha

Cara Menemukan Fungsi Callback untuk Setiap Versi reCaptcha

WARNING

Setiap situs web berbeda, jika metode di bawah ini tidak dapat menyelesaikan masalah Anda.

Mohon lakukan penelitian lebih lanjut secara mandiri.

Setelah memperoleh nilai gRecaptchaResponse yang berhasil dikenali melalui API, jika Anda menggunakan perangkat lunak simulasi, seperti selenium, Anda perlu menjalankan fungsi callback untuk memberi tahu halaman web bahwa kami telah berhasil mengenali, jadi mari belajar cara menemukan fungsi ini:

Catatan: Dalam beberapa kasus, memang tidak ada fungsi callback. Dalam hal ini, Anda dapat langsung memberikan nilai ke kontainer g-recaptcha-response dan mengirimkan formulir.

Metode 1: Cari melalui Elemen Console

Buka halaman yang ditampilkan, tekan F12 untuk masuk ke konsol, tekan Ctrl+F di Elemen untuk mencari, cari kata kunci: data-callback

Seperti yang bisa Anda lihat, fungsi callback kami di sini adalah onSuccess, dan kemudian kita hanya perlu menjalankan fungsi ini di selenium

Jika Anda tidak dapat menemukannya, mungkin memang ada yang bingung atau kondisi lain, Anda bisa mencoba metode lain

driver. execute_script(f'onSuccess("{gRecaptchaResponse}")')

img.png

Metode 2: Berlaku untuk reCaptcha V3

Mirip dengan metode 1, cari kata kunci: grecaptcha.render

Temukan kode serupa, di mana callback adalah fungsi callback

grecaptcha.render('example', {
  'sitekey': 'someSitekey',
  'callback': myCallbackFunction,
  'theme': 'dark'
});

Metode 3: Cari melalui Konsol

Tekan F12 untuk masuk ke konsol, masukkan ___grecaptcha_cfg.clients, jika ada kesalahan, halaman web belum memuat reCaptcha

Biasanya ada banyak node, kita perlu memperhatikan perbedaannya, di sini onSuccess adalah fungsi callback yang kami cari

img.png

Metode 4: Cari dengan Fungsi Pencarian Otomatis

Jika sulit untuk menjalankan metode di atas, Anda dapat mencoba mencari dengan cara mendefinisikan fungsi pencarian otomatis

Tekan F12 untuk masuk ke konsol, dan masukkan fungsi yang didefinisikan secara otomatis berikut findRecaptchaClients()

function findRecaptchaClients() {
  if (typeof (___grecaptcha_cfg) !== 'undefined') {
    return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
      const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }
      const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object')
 
      objects.forEach(([toplevelKey, toplevel]) => {
        const found = Object.entries(toplevel).find(([_, value]) => (
          value && typeof value === 'object' && 'sitekey' in value && 'size' in value
        ))
 
        if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV') {
          data.pageurl = toplevel.baseURI
        }
 
        if (found) {
          const [sublevelKey, sublevel] = found
 
          data.sitekey = sublevel.sitekey
          const callbackKey = data.version === 'V2' ? 'callback' : '
 
promise-callback'
          const callback = sublevel[callbackKey]
          if (!callback) {
            data.callback = null
            data.function = null
          } else {
            data.function = callback
            const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('')
            data.callback = `___grecaptcha_cfg.clients${keys}`
          }
        }
      })
      return data
    })
 
  }
  return []
}
 
findRecaptchaClients && findRecaptchaClients()

Kemudian jalankan fungsi ini findRecaptchaClients() di konsol untuk menemukan fungsi yang sesuai

[
  {
    "id": "0",
    "version": "V2",
    "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "function": "onSuccess",
    "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
    "pageurl": "https://www.google.com/recaptcha/api2/demo"
  }
]

Cara Memanggil Fungsi reCaptcha yang Anonim?

Catatan: Terkadang fungsi callback yang ditemukan adalah nama fungsi, seperti onSuccess yang disebutkan di atas, cukup onSuccess(gRecaptchaResponse) saat memanggilnya, tetapi terkadang ditemukan sebagai fungsi anonim, yang berarti tidak ada nama fungsi, seperti berikut:

Untuk jenis fungsi anonim ini, kita hanya perlu menjalankannya sesuai dengan jalur lengkap yang baru saja kita temukan, dan hasilnya akan sama, sebagai contoh:

___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)

Mari berikan contoh, ambil situs web ini sebagai contoh, masukkan ___grecaptcha_cfg.clients untuk memperluas pencarian, Anda dapat melihat bahwa fungsi callback di sini promise-callback adalah fungsi anonim f(token)

img.png

Kita dapat mengklik kanan padanya dan klik Salin jalur properti untuk menyalin node ini

[100000].l.l["promise-callback"]("gRecaptchaResponse")

Tambahkan ___grecaptcha_cfg.clients yang baru saja dimasukkan, dan Anda dapat mendapatkan jalur lengkap dari fungsi ini

___grecaptcha_cfg.clients[100000].l.l["promise-callback"]

Terakhir, itu sama dengan metode eksekusi yang disebutkan di atas, cukup jalankan seperti fungsi normal

___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)