El reCAPTCHA invisible se activa cuando un usuario hace clic en un botón o envía un formulario; no hay casilla de verificación. El desafío ocurre en segundo plano y la página continúa solo cuando se verifica el token. Resolverlo a través de CaptchaAI es similar al estándar v2, con una adición clave: debe pasar invisible=1 en su solicitud de API.
La mayor diferencia en la integración es cómo se inyecta el token. La mayoría de las implementaciones invisibles utilizan una función de devolución de llamada en lugar del campo oculto g-recaptcha-response. Necesita encontrar y llamar a esa devolución de llamada.
¿No estás seguro si es invisible o estándar v2? LeerreCAPTCHA v2 vs Invisible explicadopara consejos de detección.
lo que necesitas
| Requisito | Detalles |
|---|---|
| Clave API CaptchaAI | captchaai.com/api.php |
| Clave del sitio | Desde data-sitekey en el widget o botón |
| URL de la página | URL completa donde se ejecuta el CAPTCHA invisible |
| Herramienta de navegador | Selenium/Puppeteer para ejecutar la devolución de llamada |
Paso 1: Detectar reCAPTCHA invisible
Busque estos patrones en la página HTML:
<!-- Option 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..." data-size="invisible" data-callback="onSubmit"></div>
<!-- Option 2: button with data-sitekey (invisible by default) -->
<button data-sitekey="6LdKlZEU..." data-callback="onSubmit">Submit</button>
<!-- Option 3: programmatic execution -->
<script>
grecaptcha.execute('6LdKlZEU...', {action: 'submit'});
</script>
Si ve data-size="invisible", un botón con data-sitekey o grecaptcha.execute() sin contenedor, es reCAPTCHA invisible.
Paso 2: enviar a CaptchaAI
import requests
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "6LdKlZEUAAAAAPoxm...",
"pageurl": "https://example.com/signup",
"invisible": 1,
"json": 1
})
task_id = response.json()["request"]
const params = new URLSearchParams({
key: "YOUR_API_KEY", method: "userrecaptcha",
googlekey: "6LdKlZEUAAAAAPoxm...",
pageurl: "https://example.com/signup",
invisible: 1, json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await res.json();
Paso 3: consulta para conocer el resultado
import time
for _ in range(40):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
token = result["request"]
break
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Error: {result['request']}")
Paso 4: inyecta el token mediante devolución de llamada
Este es el paso crítico. Invisible reCAPTCHA espera una función de devolución de llamada, no solo un valor de campo oculto:
# Selenium example
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com/signup")
# Find the callback name
callback = driver.execute_script("""
var el = document.querySelector('[data-callback]');
if (el) return el.getAttribute('data-callback');
var btn = document.querySelector('[data-sitekey]');
if (btn) return btn.getAttribute('data-callback');
return null;
""")
# Execute the callback with the token
if callback:
driver.execute_script(f"window['{callback}']('{token}');")
else:
# Fallback: fill hidden field and submit
driver.execute_script(f"""
document.getElementById('g-recaptcha-response').innerHTML = '{token}';
document.querySelector('form').submit();
""")
// Puppeteer example
await page.evaluate((token) => {
const el = document.querySelector('[data-callback]') || document.querySelector('[data-sitekey]');
const callbackName = el?.getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
} else {
document.getElementById('g-recaptcha-response').innerHTML = token;
document.querySelector('form').submit();
}
}, token);
Función de trabajo completa
import requests
import time
def solve_invisible_recaptcha(api_key, sitekey, page_url):
submit = requests.get("https://ocr.captchaai.com/in.php", params={
"key": api_key, "method": "userrecaptcha", "googlekey": sitekey,
"pageurl": page_url, "invisible": 1, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
for _ in range(40):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result.get('request')}")
raise TimeoutError("Timed out")
token = solve_invisible_recaptcha("YOUR_API_KEY", "6LdKlZEU...", "https://example.com/signup")
Ejemplo ejecutable completo
¿Necesita un proyecto funcional completo con configuración del entorno, sondeo, reintentos y manejo de errores?
Vea el ejemplo ejecutable completo en GitHub →
Preguntas frecuentes
¿Cómo sé si reCAPTCHA es invisible?
Busque data-size="invisible" en el div del widget o un botón con data-sitekey. Si no hay una casilla de verificación visible, es probable que sea invisible.
¿Necesito invisible=1 para reCAPTCHA invisible?
Sí. Sin él, CaptchaAI trata la tarea como estándar v2 y el token puede rechazarse.
¿Qué pasa si no puedo encontrar la función de devolución de llamada?
Intente completar el campo oculto g-recaptcha-response y enviar el formulario. Algunas implementaciones invisibles recurren a este método. Si eso falla, busque en la página JavaScript funciones que manejen respuestas reCAPTCHA.
¿Puede el reCAPTCHA invisible ser empresarial?
Sí. Agregue invisible=1 y enterprise=1 a su solicitud.
¿Por qué la página no responde después de la ejecución de la devolución de llamada?
El nombre de la devolución de llamada puede ser incorrecto o la página puede esperar campos de formulario adicionales. Verifique el nombre exacto de la devolución de llamada y asegúrese de que todos los campos obligatorios del formulario estén completos antes de que se active la devolución de llamada.
Comienza a resolver reCAPTCHA invisible
Obtenga su clave API encaptchaai.com/api.php. Agregue invisible=1 a su código de resolución v2 y use el patrón de inyección de devolución de llamada anterior.
Guías relacionadas
- Cómo funciona reCAPTCHA Invisible
- Errores comunes de reCAPTCHA Invisible
- reCAPTCHA v2 vs Invisible explicado
- Cómo resolver la devolución de llamada reCAPTCHA v2 usando API