
Ethan Collins
Pattern Recognition Specialist

⚠️ Setiap situs web berbeda, jika tidak satu pun dari metode berikut yang dapat menyelesaikan masalah.
Harap lakukan riset lebih lanjut sendiri.
Setelah mendapatkan 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 kita telah berhasil mengenali, jadi mari kita pelajari cara menemukan fungsi ini:
Catatan: Dalam beberapa kasus, memang tidak ada fungsi callback. Dalam hal ini, Anda dapat langsung menetapkan nilai ke kontainer g-recaptcha-response dan mengirimkan formulir.
Buka halaman yang ditampilkan, tekan F12 untuk masuk ke konsol, tekan Ctrl+F di Elemen untuk mencari, kata kunci pencarian: data-callback
Seperti yang Anda lihat, fungsi callback kita di sini adalah onSuccess, dan kemudian kita hanya perlu menjalankan fungsi ini di selenium
Jika Anda tidak dapat menemukannya, mungkin ada kesalahan atau keadaan lain, Anda dapat mencoba metode lain
driver.execute_script(f'onSuccess("{gRecaptchaResponse}")')

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'
});
Tekan F12 untuk masuk ke konsol, masukkan ___grecaptcha_cfg.clients, jika ada kesalahan yang dilaporkan, halaman web belum memuat reCaptcha
Biasanya ada banyak node, kita perlu memperhatikan perbedaannya, di sini onSuccess adalah fungsi callback yang kita cari

Jika sulit untuk menjalankan metode di atas, Anda dapat mencoba mencari dengan mendefinisikan fungsi pencarian otomatis
Tekan F12 untuk masuk ke konsol, dan masukkan fungsi yang didefinisikan otomatis berikut findRecaptchaClients()
function findRecaptchaClients() {
// eslint-disable-next-line camelcase
if (typeof (___grecaptcha_cfg) !== 'undefined') {
// eslint-disable-next-line camelcase, no-undef
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": "site key-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "site url"
}
]
Catatan: Terkadang fungsi callback yang ditemukan adalah nama fungsi, seperti onSuccess yang disebutkan di atas, langsung onSuccess(gRecaptchaResponse) saat memanggil, tetapi terkadang ditemukan sebagai fungsi anonim, yang berarti bahwa tidak ada nama fungsi, seperti berikut:
Untuk fungsi anonim semacam ini, kita hanya perlu menjalankannya sesuai dengan jalur lengkap yang baru saja kita temukan, dan efeknya sama, misalnya:
___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)
Mari kita berikan contoh, ambil situs web ini sebagai contoh, masukkan ___grecaptcha_cfg.clients untuk memperluas pencarian, Anda dapat melihat fungsi callback di sini promise-callback adalah fungsi anonim f(token)

Kita dapat mengklik kanan dan klik Salin jalur properti untuk menyalin jalur node ini
[100000].l.l["promise-callback"]("gRecaptchaResponse")
Tambahkan ___grecaptcha_cfg.clients yang baru saja dimasukkan, dan Anda dapat memperoleh jalur lengkap fungsi ini
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]
Akhirnya, sama dengan metode eksekusi yang disebutkan di atas, jalankan saja sebagai fungsi normal
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)
Tim Capsolver 💜
Mengalami kesalahan "reCAPTCHA Kunci Situs Tidak Valid" atau "token reCAPTCHA tidak valid"? Temukan penyebab umum, perbaikan langkah demi langkah, dan tips pemecahan masalah untuk menyelesaikan masalah verifikasi reCAPTCHA gagal. Pelajari cara memperbaiki verifikasi reCAPTCHA gagal, silakan coba lagi.

Pelajari cara menyelesaikan reCAPTCHA v2 dengan Python dan API. Panduan lengkap ini mencakup metode Proxy dan Proxyless dengan kode yang siap produksi untuk otomatisasi.
