Tutoriais de API

Como resolver o reCAPTCHA invisível usando API

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

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