Análises Técnicas

reCAPTCHA v2 invisível: detecção e solução de gatilhos

reCAPTCHA v2 Invisível não possui caixa de seleção visível. Ele é ativado automaticamente quando um usuário envia um formulário ou clica em um botão e só mostra um desafio se a análise de risco do Google detectar comportamento suspeito. Isso torna mais difícil a detecção na automação – você pode não perceber que há um CAPTCHA até que o envio do formulário falhe.


Como o reCAPTCHA invisível difere do padrão v2

Recurso Padrão reCAPTCHA v2 reCAPTCHA v2 Invisível
Widget visível Sim (caixa de seleção) Não (somente crachá)
Interação do usuário Clique na caixa de seleção Automático no envio do formulário
data-size normal ou compact invisible
Pop-up de desafio Sempre possível Apenas para usuários suspeitos
Elemento DOM .g-recaptchadiv .g-recaptcha div ou programático

Detectando reCAPTCHA invisível

Método 1: verifique o atributo de tamanho de dados

// 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: verifique o selo

O reCAPTCHA invisível mostra um pequeno emblema no canto:

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: verifique as chamadas grecaptcha.execute

Se a página usar invocação programática (sem .g-recaptcha div):

// 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: verifique o parâmetro de renderização da tag de 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);
  }
});

Resolvendo com CaptchaAI

A principal diferença: passe invisible=1 para CaptchaAI para que o solucionador saiba que está lidando com uma variante invisível.

Pitão

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}`);

envio controlado ao endpoint QA para reCAPTCHA invisível

O reCAPTCHA invisível normalmente está vinculado a um botão ou envio de formulário. Após a injeção, você precisa acionar o retorno de chamada ou enviar o formulário:

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()

Identificando o elemento gatilho

O reCAPTCHA invisível pode ser vinculado a um botão específico:

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

Ou ativado programaticamente:

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

Verifique ambos os padrões:

// 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'));
});

Solução de problemas

Problema Causa Correção
Token rejeitado Faltando invisible=1 no envio Adicionar invisible: "1" à solicitação CaptchaAI
Não consigo encontrar a chave do site Nenhuma divisão .g-recaptcha Verifique se há chamadas programáticas grecaptcha.render() ou grecaptcha.execute()
O formulário é enviado, mas falha Retorno de chamada não acionado Encontre e chame a função data-callback
CAPTCHA não detectado Aparece apenas para tráfego suspeito Verifique o elemento grecaptcha-badge ou tags de script recaptcha

Perguntas frequentes

Como posso diferenciar o Invisible v2 do v3?

Invisible v2 usa grecaptcha.execute() sem um parâmetro action. v3 usa grecaptcha.execute(sitekey, {action: 'submit'}) com uma ação. Além disso, a v3 usa render=SITEKEY na URL do script.

Esquecer a bandeira invisível importa?

Sim. Sem invisible=1, o solucionador pode tentar uma abordagem de resolução diferente que produza tokens rejeitados pelo site.

Posso resolver o reCAPTCHA invisível sem um navegador?

Sim – você só precisa da chave do site e do URL da página. O navegador só é necessário para injetar o token e acionar o retorno de chamada.


Resolva reCAPTCHA v2 Invisível perfeitamente com CaptchaAI

Obtenha sua chave API emcaptchaai.com.


Guias relacionados

Os comentários estão desativados para este artigo.