Usar o método CaptchaAI errado para proteções Cloudflare é um dos erros mais comuns. Cloudflare Turnstile em staging e Cloudflare Turnstile parecem semelhantes, mas são fundamentalmente diferentes. Enviar turnstile quando o site usa um desafio de página inteira — ou vice-versa — sempre falhará.
Os dois tipos de proteção Cloudflare
| Recurso | Cloudflare Turnstile em staging | Cloudflare Turnstile |
|---|---|---|
| Tipo | Intersticial de página inteira | Widget incorporado |
| Aparência | Bloqueia a página inteira, "Verificando seu navegador" | Caixa de seleção pequena ou widget invisível em um formulário |
| Método CaptchaAI | turnstile_staging |
turnstile |
| Retornos | Biscoito cookie_qa_validacao |
Sequência de token |
| Requer proxy | Sim (obrigatório) | Recomendado |
| Requer User-Agent | Sim (obrigatório) | Não |
Como identificar Cloudflare Turnstile em staging
Um Cloudflare Turnstile em staging é um intersticial de página inteira que bloqueia o acesso ao conteúdo. Você vê isso antes que a página real seja carregada.
Sinais visuais:
- Mensagem "Verificando seu navegador antes de acessar..."
- Girador de carregamento do Cloudflare
- O título da página contém "Só um momento..."
- O URL permanece o mesmo, mas o conteúdo é uma página da Cloudflare
Sinais HTML:
<!-- Cloudflare Turnstile em staging page indicators -->
<title>Just a moment...</title>
<div id="challenge-running">...</div>
<div class="cf-browser-verification">...</div>
Detecção programática:
import requests
resp = requests.get("https://example.com")
is_cf_challenge = (
resp.status_code == 403 and
"Just a moment" in resp.text or
"cf-browser-verification" in resp.text or
"challenge-platform" in resp.text
)
if is_cf_challenge:
print("Cloudflare Turnstile em staging detected — use method: turnstile_staging")
Como identificar Cloudflare Turnstile
Turnstile é um widget incorporado dentro de uma página que já foi carregada. Aparece em formulários, como o reCAPTCHA.
Sinais visuais:
- Widget pequeno da Cloudflare em um formulário (estilo caixa de seleção)
- O resto do conteúdo da página está visível
- O widget diz "Verifique se você é humano"
Sinais HTML:
<!-- Turnstile widget indicators -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADnPIDROz1234"></div>
<!-- Or loaded via JavaScript -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>
Detecção programática:
import requests
resp = requests.get("https://staging.example.com/qa-login")
is_turnstile = (
"cf-turnstile" in resp.text or
"challenges.cloudflare.com/turnstile" in resp.text
)
if is_turnstile:
# Extract sitekey
if 'data-sitekey="' in resp.text:
start = resp.text.index('data-sitekey="') + 14
end = resp.text.index('"', start)
sitekey = resp.text[start:end]
print(f"Turnstile detected — sitekey: {sitekey}")
print("Use method: turnstile")
Função de detecção combinada
def detect_cloudflare_type(url):
"""Detect which Cloudflare protection a URL uses."""
resp = requests.get(url, allow_redirects=True)
# Check for full-page Challenge
if resp.status_code in [403, 503]:
if any(marker in resp.text for marker in [
"Just a moment",
"cf-browser-verification",
"challenge-platform",
"challenge-running"
]):
return {"type": "turnstile_staging", "method": "turnstile_staging"}
# Check for embedded Turnstile
if "cf-turnstile" in resp.text or "challenges.cloudflare.com/turnstile" in resp.text:
sitekey = None
if 'data-sitekey="' in resp.text:
start = resp.text.index('data-sitekey="') + 14
end = resp.text.index('"', start)
sitekey = resp.text[start:end]
return {"type": "turnstile", "method": "turnstile", "sitekey": sitekey}
return {"type": "none", "method": None}
# Usage
result = detect_cloudflare_type("https://example.com")
print(f"Protection: {result['type']}")
print(f"CaptchaAI method: {result['method']}")
Resolvendo cada tipo
Cloudflare Turnstile em staging:
data = {
"key": "YOUR_API_KEY",
"method": "turnstile_staging",
"pageurl": "https://example.com",
"proxy": "host:port:user:pass", # MANDATORY
"proxytype": "HTTP", # MANDATORY
"userAgent": "Mozilla/5.0 ...", # MANDATORY
"json": 1
}
# Returns cookie_qa_validacao cookie — set it in your session
Cloudflare Turnstile:
data = {
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAADnPIDROz1234",
"pageurl": "https://staging.example.com/qa-login",
"json": 1
}
# Returns a token — inject into cf-turnstile-response field
Erros comuns
| Erro | Result | Correção |
|---|---|---|
Usando turnstile para uma página de desafio |
ERROR_CAPTCHA_UNSOLVABLE |
Mudar para turnstile_staging |
Usando turnstile_staging para catraca |
Formato de resposta errado | Mudar para turnstile |
| Nenhum proxy para o Desafio | ERROR_PROXY_NOT_AUTHORIZED |
Adicionar proxy – é obrigatório para o Desafio |
| Nenhuma chave de site para catraca | ERROR_BAD_PARAMETERS |
Extraia o sitekey da página HTML |
Perguntas frequentes
Um site pode usar Challenge e Turnstile?
Sim. Um site pode usar Cloudflare Turnstile em staging no acesso inicial e Turnstile em seu formulário de login. Você precisa resolver ambos em sequência.
Por que o Challenge exige um proxy, mas o Turnstile não?
Challenge retorna um cookie cookie_qa_validacao vinculado a um IP. CaptchaAI deve usar seu proxy para gerar um cookie que funcione a partir do seu IP. Turnstile retorna um token independente de IP.
E se a detecção retornar "nenhum", mas eu ainda vir o Cloudflare?
Algumas proteções da Cloudflare são acionadas apenas em ações específicas (solicitações POST, chamadas de API) ou para determinados User-Agents. Tente acessar o URL com um User-Agent semelhante a um bot para acionar o desafio.
Resolva CAPTCHAs da Cloudflare com CaptchaAI
Lide com o desafio e a catraca emcaptchaai.com.
Guias relacionados
- Como resolver Cloudflare Turnstile usando API
- Como resolver Cloudflare Turnstile em staging usando API
- Cloudflare Turnstile 403 Após correção do token
- Referência de códigos de erro CaptchaAI