Solução de Problemas

Desafio Cloudflare vs Cloudflare Turnstile: como detectar qual você possui

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

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