
Adélia Cruz
Neural Network Developer

⚠️ Cada sitio web es diferente, si ninguno de los siguientes métodos puede resolver el problema.
Por favor, investiga más por tu cuenta.
Después de obtener el valor gRecaptchaResponse reconocido correctamente a través de la API, si está utilizando software de simulación, como selenium, necesita ejecutar una función de devolución de llamada para indicarle a la página web que hemos reconocido correctamente, así que aprendamos cómo encontrar esta función:
Nota: En algunos casos, realmente no hay una función de devolución de llamada. En este caso, puede asignar valores directamente al contenedor g-recaptcha-response y enviar el formulario.
Abra la página que se muestra, presione F12 para ingresar a la consola, presione Ctrl+F en Elementos para buscar, palabra clave de búsqueda: data-callback
Como puede ver, nuestra función de devolución de llamada aquí es onSuccess, y luego solo necesitamos ejecutar esta función en selenium
Si no puede encontrarlo, puede estar confundido u otras circunstancias, puede probar otros métodos
driver.execute_script(f'onSuccess("{gRecaptchaResponse}")')

Similar al método 1, palabras clave de búsqueda: grecaptcha.render
Encuentra un código similar, donde callback es la función de devolución de llamada
grecaptcha.render('example', {
'sitekey': 'someSitekey',
'callback': myCallbackFunction,
'theme': 'dark'
});
Presione F12 para ingresar a la consola, ingrese ___grecaptcha_cfg.clients, si se informa un error, la página web no ha cargado reCaptcha
Por lo general, hay muchos nodos, debemos prestar atención a la diferencia, aquí onSuccess es la función de devolución de llamada que estamos buscando

Si es difícil ejecutar los métodos anteriores, puede intentar buscar definiendo una función de búsqueda automática
Presione F12 para ingresar a la consola e ingrese la siguiente función definida automáticamente 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()
Luego ejecute esta función findRecaptchaClients() en console para encontrar la función correspondiente
[
{
"id": "0",
"version": "V2",
"sitekey": "site key-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "site url"
}
]
Nota: A veces, la función de devolución de llamada encontrada es un nombre de función, como onSuccess mencionado anteriormente, directamente onSuccess(gRecaptchaResponse) al llamar, pero a veces se encuentra que es una función anónima, lo que significa que no hay nombre de función, como el siguiente:
Para este tipo de función anónima, solo necesitamos ejecutarla de acuerdo con la ruta completa que acabamos de encontrar, y el efecto es el mismo, por ejemplo:
___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)
Demos un ejemplo, tomemos este sitio web como ejemplo, ingrese ___grecaptcha_cfg.clients para expandir la búsqueda, puede ver la función de devolución de llamada aquí promise-callback es una función anónima f(token)

Podemos hacer clic derecho en él y hacer clic en Copiar ruta de propiedad para copiar esta ruta de nodo
[100000].l.l["promise-callback"]("gRecaptchaResponse")
Agregue el ___grecaptcha_cfg.clients recién ingresado, y puede obtener la ruta completa de esta función
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]
Finalmente, es el mismo que el método de ejecución mencionado anteriormente, simplemente ejecútelo como una función normal
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)
Equipo Capsolver 💜
¿Enfrentando errores como "reCAPTCHA Clave de sitio inválida" o "token de reCAPTCHA inválido"? Descubre las causas comunes, soluciones paso a paso y consejos de solución de problemas para resolver los errores de verificación de reCAPTCHA. Aprende cómo solucionar el error de verificación de reCAPTCHA, por favor intente de nuevo.

Aprende a resolver reCAPTCHA v2 usando Python y API. Este guía completa cubre métodos con y sin proxy con código listo para producción para automatización.
