O reCAPTCHA invisível é acionado quando um usuário clica em um botão ou envia um formulário – não há caixa de seleção. O desafio acontece em segundo plano e a página continua somente quando o token é verificado. Resolvê-lo por meio de CaptchaAI é semelhante ao padrão v2, com uma adição importante: você deve passar invisible=1 em sua solicitação de API.
A maior diferença na integração é como você injeta o token. A maioria das implementações invisíveis usa uma função de retorno de chamada em vez do campo g-recaptcha-response oculto. Você precisa encontrar e chamar esse retorno de chamada.
Não tem certeza se é invisível ou padrão v2? LeiareCAPTCHA v2 vs Invisível explicadopara dicas de detecção.
O que você precisa
| Requisito | Detalhes |
|---|---|
| Chave de API CaptchaAI | captchaai.com/api.php |
| Chave do site | De data-sitekey no widget ou botão |
| URL da página | URL completo onde o CAPTCHA invisível é executado |
| Ferramenta do navegador | Selenium/Puppeteer para executar o retorno de chamada |
Etapa 1: detectar reCAPTCHA invisível
Procure estes padrões na 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>
Se você vir data-size="invisible", um botão com data-sitekey, ou grecaptcha.execute() sem contêiner, é reCAPTCHA invisível.
Etapa 2: enviar para 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();
Etapa 3: enquete para o 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']}")
Etapa 4: injetar o token via retorno de chamada
Este é o passo crítico. O reCAPTCHA invisível espera uma função de retorno de chamada, não apenas um 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);
Função de trabalho 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")
Exemplo executável completo
Precisa de um projeto funcional completo com configuração de ambiente, pesquisas, novas tentativas e tratamento de erros?
Veja o exemplo executável completo no GitHub →
Perguntas frequentes
Como posso saber se o reCAPTCHA é invisível?
Procure data-size="invisible" na div do widget ou um botão com data-sitekey. Se não houver nenhuma caixa de seleção visível, provavelmente ela estará invisível.
Preciso de invisível = 1 para reCAPTCHA invisível?
Sim. Sem ele, CaptchaAI trata a tarefa como padrão v2 e o token pode ser rejeitado.
E se eu não conseguir encontrar a função de retorno de chamada?
Experimente preencher o campo oculto g-recaptcha-response e enviar o formulário. Algumas implementações invisíveis recorrem a este método. Se isso falhar, pesquise na página JavaScript por funções que lidam com respostas reCAPTCHA.
O reCAPTCHA invisível pode ser empresarial?
Sim. Adicione invisible=1 e enterprise=1 à sua solicitação.
Por que a página não responde após a execução do retorno de chamada?
O nome do retorno de chamada pode estar errado ou a página pode esperar campos de formulário adicionais. Verifique o nome exato do retorno de chamada e certifique-se de que todos os campos obrigatórios do formulário sejam preenchidos antes que o retorno de chamada seja acionado.
Comece a resolver o reCAPTCHA invisível
Obtenha sua chave API emcaptchaai.com/api.php. Adicione invisible=1 ao seu código de resolução v2 e use o padrão de injeção de retorno de chamada acima.
Guias relacionados
- Como funciona o reCAPTCHA Invisible
- Erros comuns do reCAPTCHA Invisible
- reCAPTCHA v2 vs Invisível explicado
- Como resolver o retorno de chamada reCAPTCHA v2 usando API