Explainers

reCAPTCHA v2 Invisible: Detección y resolución de activadores

reCAPTCHA v2 Invisible no tiene ninguna casilla de verificación visible. Se activa automáticamente cuando un usuario envía un formulario o hace clic en un botón, y solo muestra un desafío si el análisis de riesgos de Google detecta un comportamiento sospechoso. Esto hace que sea más difícil de detectar en la automatización: es posible que no te des cuenta de que hay un CAPTCHA hasta que falle el envío del formulario.


En qué se diferencia Invisible reCAPTCHA del estándar v2

Característica Estándar reCAPTCHA v2 reCAPTCHA v2 Invisible
widget visible Sí (casilla de verificación) No (solo insignia)
Interacción del usuario Haga clic en la casilla de verificación Automático al enviar el formulario
data-size normal o compact invisible
Ventana emergente de desafío Siempre es posible Sólo para usuarios sospechosos
elemento DOM .g-recaptcha div .g-recaptcha div o programático

Detectando reCAPTCHA invisible

Método 1: verificar el atributo de tamaño de datos

// Browser console
const widgets = document.querySelectorAll('.g-recaptcha');
widgets.forEach((el, i) => {
  const size = el.getAttribute('data-size');
  const sitekey = el.getAttribute('data-sitekey');
  console.log(`Widget ${i}: size=${size}, sitekey=${sitekey}`);
  if (size === 'invisible') {
    console.log('  → This is Invisible reCAPTCHA');
  }
});

Método 2: buscar la insignia

El reCAPTCHA invisible muestra una pequeña insignia en la esquina:

const badge = document.querySelector('.grecaptcha-badge');
if (badge) {
  console.log('reCAPTCHA badge found — likely Invisible reCAPTCHA');
  console.log('Badge visibility:', getComputedStyle(badge).visibility);
}

Método 3: comprobar las llamadas de grecaptcha.execute

Si la página utiliza invocación programática (sin div .g-recaptcha):

// Look for grecaptcha.execute in page scripts
document.querySelectorAll('script:not([src])').forEach(s => {
  if (s.textContent.includes('grecaptcha.execute')) {
    console.log('Found grecaptcha.execute — Invisible reCAPTCHA');
    const match = s.textContent.match(/grecaptcha\.execute\s*\(\s*['"]?([^'",\s)]+)/);
    if (match) console.log('Sitekey:', match[1]);
  }
});

Método 4: verificar el parámetro de representación de la etiqueta del script

document.querySelectorAll('script[src*="recaptcha"]').forEach(s => {
  if (s.src.includes('render=') && !s.src.includes('render=explicit')) {
    console.log('Invisible/v3 reCAPTCHA detected in script:', s.src);
  }
});

Resolviendo con CaptchaAI

La diferencia clave: pase invisible=1 a CaptchaAI para que el solucionador sepa que está manejando una variante invisible.

pitón

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit with invisible flag
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-SITEKEY",
    "pageurl": "https://staging.example.com/qa-login",
    "invisible": "1",  # critical for Invisible reCAPTCHA
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Submitted: {task_id}")

# Poll for result
for _ in range(24):
    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["status"] == 1:
        print(f"Token: {result['request'][:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

javascript

const axios = require('axios');

const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: 'YOUR_API_KEY',
    method: 'userrecaptcha',
    googlekey: '6Le-SITEKEY',
    pageurl: 'https://staging.example.com/qa-login',
    invisible: 1,
    json: 1,
  }
});
const taskId = resp.data.request;
console.log(`Submitted: ${taskId}`);

Inyección de tokens para reCAPTCHA invisible

El reCAPTCHA invisible generalmente está vinculado a un botón o envío de formulario. Después de la inyección, debe activar la devolución de llamada o enviar el formulario:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://staging.example.com/qa-login")

# After solving, inject and trigger
driver.execute_script("""
    // Set the token
    document.querySelector('textarea[name="g-recaptcha-response"]').value = arguments[0];

    // Find and trigger the callback
    var widget = document.querySelector('.g-recaptcha');
    var callbackName = widget ? widget.getAttribute('data-callback') : null;

    if (callbackName && typeof window[callbackName] === 'function') {
        window[callbackName](arguments[0]);
    }
""", token)

# Submit the form
driver.find_element(By.CSS_SELECTOR, "form#login").submit()

Identificar el elemento desencadenante

El reCAPTCHA invisible se puede vincular a un botón específico:

<button class="g-recaptcha"
        data-sitekey="6Le-SITEKEY"
        data-callback="onSubmit"
        data-size="invisible">
  Submit
</button>

O activado mediante programación:

// Site's code
document.getElementById('submit-btn').addEventListener('click', function() {
  grecaptcha.execute();
});

Comprueba ambos patrones:

// Find elements with g-recaptcha class that are buttons
document.querySelectorAll('button.g-recaptcha, input.g-recaptcha').forEach(el => {
  console.log('Trigger element:', el.tagName, el.textContent.trim());
  console.log('  data-sitekey:', el.getAttribute('data-sitekey'));
  console.log('  data-callback:', el.getAttribute('data-callback'));
});

Solución de problemas

problema causa Solución
Token rechazado Falta invisible=1 en el envío Agregue invisible: "1" a la solicitud CaptchaAI
No puedo encontrar la clave del sitio Sin división .g-recaptcha Compruebe si hay llamadas programáticas grecaptcha.render() o grecaptcha.execute()
El formulario se envía pero falla Devolución de llamada no activada Busque y llame a la función data-callback
CAPTCHA no detectado Sólo aparece para tráfico sospechoso. Verifique el elemento grecaptcha-badge o las etiquetas del script recaptcha

Preguntas frecuentes

¿Cómo distingo Invisible v2 de v3?

Invisible v2 usa grecaptcha.execute() sin un parámetro action. v3 usa grecaptcha.execute(sitekey, {action: 'submit'}) con una acción. Además, v3 usa render=SITEKEY en la URL del script.

¿Importa olvidar la bandera invisible?

Sí. Sin invisible=1, el solucionador puede intentar un enfoque de resolución diferente que produzca tokens rechazados por el sitio.

¿Puedo resolver Invisible reCAPTCHA sin un navegador?

Sí, solo necesitas la clave del sitio y la URL de la página. El navegador solo es necesario para inyectar el token y activar la devolución de llamada.


Resuelva reCAPTCHA v2 Invisible sin problemas con CaptchaAI

Obtenga su clave API encaptchaai.com.


Guías relacionadas

Los comentarios están deshabilitados para este artículo.

Publicaciones relacionadas

Troubleshooting Errores y soluciones comunes de reCAPTCHA Invisible
Errores comunes en la resolución de re CAPTCHA Invisible y cómo solucionarlos: callback no ejecutado, parámetro invisible=1, token caducado, pageurl incorrecto...

Errores comunes en la resolución de re CAPTCHA Invisible y cómo solucionarlos: callback no ejecutado, parámetr...

Apr 24, 2026