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.