Reference

Chrome DevTools Protocol + CaptchaAI para diagnóstico de CAPTCHA em ambientes de teste

Quando um formulário com reCAPTCHA ou Cloudflare Turnstile falha em staging, o motivo raramente aparece no log da aplicação — ele está na aba Network do navegador, no ciclo de vida do widget que o seu script nunca chega a ver. O Chrome DevTools Protocol (CDP) expõe exatamente esse nível: eventos de rede, execução de JavaScript e estado da página, pela mesma conexão WebSocket que ferramentas como Puppeteer já usam por baixo dos panos. Para quem faz QA de integrações CAPTCHA com a CaptchaAI, isso costuma reduzir a horas de log parado para minutos de diagnóstico direto.

Escopo seguro: por que isso importa antes da primeira requisição

Diagnóstico com CDP mexe com requisições reais e pode capturar tokens, sitekeys e payloads inteiros durante a inspeção. Por isso, tudo neste guia vale só para ambiente próprio, QA, staging ou pré-produção, com autorização explícita da sua equipe. Os exemplos usam páginas internas, dados fictícios e endpoints de validação controlados por vocês; nada aqui serve para automatizar serviços de terceiros, compras reais, filas públicas ou controles de acesso fora do seu ambiente.

Diagnóstico de rede com o Chrome DevTools Protocol

O CDP conversa com o Chrome por WebSocket e expõe os mesmos eventos que a aba Network do DevTools mostra na tela — só que de forma programável. Ative o domínio Network para capturar o carregamento do script do CAPTCHA, a resposta do widget e a chamada ao seu endpoint interno. O objetivo não é interceptar nem alterar nada: é entender o ciclo de vida da requisição, o status HTTP retornado e os parâmetros que o seu ambiente de QA está realmente enviando.

Como conferir a sitekey na página de teste

Antes de enviar qualquer tarefa à CaptchaAI, confirme que a página de staging está usando a sitekey certa. Abra https://staging.example.com/captcha-demo, leia o atributo do widget (data-sitekey para reCAPTCHA, a classe cf-turnstile para Turnstile) e compare com a configuração esperada do ambiente. Esse passo sozinho já resolve boa parte dos "falsos bugs": token rejeitado porque a sitekey capturada era a de produção, não a de QA.

Enviando a tarefa para a CaptchaAI a partir do QA

Com a sitekey confirmada no smoke test, envie a tarefa para a CaptchaAI usando a pageurl de staging. O exemplo abaixo faz o envio e consulta o resultado até o token ficar pronto:

import os, time, requests

API_KEY = os.environ['CAPTCHAAI_API_KEY']
SITEKEY = os.environ['QA_CAPTCHA_SITEKEY']

def criar_tarefa_captcha(pageurl):
    resposta = requests.post('https://ocr.captchaai.com/in.php', data={
        'key': API_KEY,
        'method': 'userrecaptcha',
        'googlekey': SITEKEY,
        'pageurl': pageurl,
        'json': 1,
    }).json()
    return resposta['request']

def aguardar_resultado(task_id):
    while True:
        time.sleep(5)
        resposta = requests.get('https://ocr.captchaai.com/res.php', params={
            'key': API_KEY,
            'action': 'get',
            'id': task_id,
            'json': 1,
        }).json()
        if resposta.get('status') == 1:
            return resposta['request']

task_id = criar_tarefa_captcha('https://staging.example.com/captcha-demo')
token_qa = aguardar_resultado(task_id)
print({'token_recebido': bool(token_qa)})

Validando a resposta no backend

Encaminhe o token para o endpoint interno de verificação, registre o status retornado e compare com os logs do provedor do CAPTCHA. Esse cruzamento — resposta da CaptchaAI vs. decisão do seu backend — é o que mostra se a falha está na integração ou no CAPTCHA em si.

Erros comuns no diagnóstico com CDP

Sintoma no CDP Causa provável Como resolver
Nenhum evento de rede aparece Domínio de staging ausente ou bloqueado Confirme o carregamento de https://staging.example.com/captcha-demo
Sitekey capturada não bate Página ainda usa a sitekey antiga ou de produção Compare data-sitekey/cf-turnstile com a config de QA
Token chega vazio no backend action divergente entre o widget e a chamada à CaptchaAI Revise action (reCAPTCHA v3) e a pageurl enviada
Backend rejeita o token Token expirado antes da verificação Reduza o tempo entre aguardar_resultado e o envio ao backend
Endpoint interno não responde Backend apontando para o ambiente errado Confirme a URL do endpoint no .env de staging

Checklist antes de publicar a integração

Confirme os itens abaixo antes de levar a mudança testada para produção:

  • A documentação aponta para o ambiente próprio (QA/staging), não para produção.
  • Os exemplos e os dados enviados nos testes são fictícios.
  • Nenhum endpoint de produção é acionado durante o teste.
  • Os logs têm correlação suficiente (task ID, timestamp) para auditoria.
  • A página de staging tem domínio autorizado, sitekey esperada e configuração de backend separada da produção.
  • Existe uma política clara de expiração para tokens e sessões de teste.

Trate qualquer número de sucesso como amostra interna: repita a medição e compare apenas cenários equivalentes — nunca uma corrida isolada.

Exemplo prático: se o worker de QA roda em sa-east-1 (São Paulo) e o site de teste está hospedado nos EUA, o CDP mostra RTT mais alto só pela distância geográfica — não confunda isso com lentidão da CaptchaAI.

Perguntas frequentes

O que o CDP mostra que o DevTools comum não deixa tão claro?

O painel do Chrome já expõe requisições e o DOM, mas via CDP você automatiza a captura: liga os eventos de rede, lê o ciclo de vida do widget e cruza tudo com o log do backend em um único script, sem repetir o processo a cada teste.

Preciso instalar alguma ferramenta além do Chrome para conectar via CDP?

Não. Basta iniciar o Chrome com --remote-debugging-port e conectar por WebSocket, como no exemplo deste guia. O Puppeteer usa CDP por baixo dos panos, mas conectar direto funciona igual para diagnóstico.

Por que a sitekey que aparece no CDP é diferente da que meu script está usando?

Geralmente é ambiente: a página de staging carrega uma sitekey de teste diferente da de produção, ou o script ainda aponta para a config antiga. Confira data-sitekey (ou a classe cf-turnstile) na página real antes de enviar a tarefa à CaptchaAI.

O CaptchaAI resolve qualquer CAPTCHA que eu encontrar durante o diagnóstico?

Não. A CaptchaAI resolve reCAPTCHA v2/v3, Cloudflare Turnstile, GeeTest v3 e os demais tipos suportados oficialmente — hCaptcha e FunCaptcha não são suportados atualmente. Trate a detecção de um desses dois como bloqueio conhecido, não como bug do script.

Preciso me preocupar com a LGPD ao capturar essas requisições no CDP?

Se a captura fica só no ambiente de QA e não armazena dados pessoais reais de usuários finais, o risco é baixo. Ainda assim, use dados fictícios nos testes e trate qualquer log com requisição/resposta reais como dado sensível, seguindo a LGPD.

Guias relacionados

Rode esse diagnóstico no seu próprio ambiente de staging e confirme a integração CAPTCHA com a CaptchaAI antes de ir para produção.

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