Cara Menemukan Fungsi Callback untuk Setiap Versi reCaptcha
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
- Metode 2: Berlaku untuk seri reCaptcha V3
- Metode 3: Cari melalui Konsol
- Metode 4: Cari dengan Fungsi Pencarian Otomatis
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}")')
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
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)
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)