Tutoriales de API

Cómo resolver reCAPTCHA invisible usando API

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
Los comentarios están deshabilitados para este artículo.