Se uma automação começou a receber 403 ou travar numa página "Verificando seu navegador" atrás da Cloudflare, a pergunta é qual proteção apareceu: Bot Management ou Turnstile. São produtos diferentes, com integração e resolução diferentes — confundi-los é a causa mais comum de scripts de QA travarem sem erro claro.
Turnstile é um widget de CAPTCHA gratuito que qualquer site pode embutir. Bot Management é uma camada de rede do plano Enterprise que avalia toda requisição antes de chegar à origem. Este guia mostra como diferenciar os dois e resolver ambos com a CaptchaAI.
Como saber rapidinho qual proteção você está vendo
- Widget num formulário, classe
cf-turnstile→ Turnstile, isolado. - Página "Verificando seu navegador" antes do formulário aparecer → Bot Management avaliando a requisição.
- 403 com página de erro da Cloudflare, sem widget → bloqueio direto do Bot Management.
- Nenhum desafio visível, navegação segue normal → a requisição passou pela pontuação de bot.
A seção de identificação, mais adiante, traz um script pronto para automatizar essa checagem.
Comparação lado a lado
O que cada um é e quanto custa
| Recurso | Bot Management | Turnstile |
|---|---|---|
| O que é | Plataforma empresarial de defesa contra bots | Widget de CAPTCHA gratuito |
| Preço | Plano Enterprise ($$$) | Gratuito em qualquer plano |
| Onde roda | Nível de rede (proxy da Cloudflare) | Widget JavaScript na página |
| Exige DNS na Cloudflare | Sim | Não — funciona em qualquer site |
Como se comporta na automação
| Recurso | Bot Management | Turnstile |
|---|---|---|
| Desafio visível | Às vezes (desafio gerenciado) | Raramente — quase sempre invisível |
| O que avalia | Todas as requisições do domínio | Uma ação específica da página (ex.: envio de formulário) |
| Pontuação | 1–99 por requisição | Aprovado/reprovado por desafio |
| Integra com o WAF | Sim, por faixa de pontuação | Não |
| Desafio JavaScript | Sim (página de espera de 5 s) | Sim (prova de trabalho) |
| Limitação de taxa | Sim | Não |
| Suporte da CaptchaAI | Pelos métodos de Turnstile e de verificação em staging | Sim — alta taxa de sucesso |
O que é o Cloudflare Bot Management
O Bot Management faz parte do plano Enterprise da Cloudflare. Ele opera no nível da rede: toda requisição para o domínio é avaliada antes de chegar ao servidor de origem, por isso nunca aparece isolado — está sempre por trás do que o site serve.
Como o mecanismo pontua cada requisição
Request arrives at Cloudflare edge
↓
Bot Management engine evaluates:
├─ Machine learning model (behavioral sinal de navegador)
├─ Heuristics (known bot patterns)
├─ JavaScript sinal de navegadoring (if JS challenge triggered)
├─ JA3/JA4 TLS sinal de navegador
├─ HTTP header analysis
└─ IP reputation (Cloudflare sees ~20% of internet traffic)
↓
Bot score assigned: 1 (definitely bot) to 99 (definitely human)
↓
WAF rules act on the score:
- Score > 50 → Allow
- Score 30-50 → Managed challenge
- Score < 30 → Block or JavaScript challenge
Principais peças do Bot Management
- Pontuação do bot — nota de 1 a 99 baseada em ML, calculada por requisição.
- Desafio gerenciado — mostra, de forma adaptativa, um desafio JS ou o Turnstile.
- Super Bot Fight Mode — versão simplificada para os planos Pro/Business.
- Análise de bots — painel com o tráfego de bot separado do tráfego humano.
- Regras personalizadas do WAF — regras acionadas pelos limites de pontuação do bot.
- Limitação de taxa — limites de requisições por IP ou sessão.
- Detecção via JavaScript — identifica navegador headless e ferramentas de automação.
O que a automação costuma ver
- Bloqueio direto (403) — pontuação do bot muito baixa; a regra do WAF já barrou a requisição.
- Página de desafio JavaScript — espera de 5 segundos com a mensagem "Verificando seu navegador".
- Desafio gerenciado — widget Turnstile ou desafio JS renderizado na hora.
- Passagem invisível — requisição liberada, pontuação do bot alta o suficiente.
O que é o Cloudflare Turnstile
Turnstile é um widget de CAPTCHA independente que substitui os captchas tradicionais. Funciona sem depender do Bot Management e pode ser embutido em qualquer site, inclusive um que não usa a Cloudflare como proxy.
Como o Turnstile verifica o visitante
Page loads Turnstile widget
↓
Widget runs background checks:
├─ Browser proof-of-work challenge (cryptographic puzzle)
├─ Private Access Token (Apple devices)
├─ Browser environment validation
└─ Cloudflare threat intelligence
↓
Result: cf-turnstile-response token generated
↓
Token submitted with form data
↓
Server validates token via Cloudflare API (siteverify)
Modos do widget
- Gerenciado — a Cloudflare decide entre invisível e interativo; padrão, recomendado na maioria dos casos.
- Não interativo — sempre invisível, roda só a prova de trabalho; indicado para formulários que não podem ter atrito.
- Invisível — nenhum widget aparece, roda ao carregar a página; útil para verificação em segundo plano.
Como embutir o widget
<!-- Simple Turnstile integration -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Como resolver Turnstile e os desafios do Bot Management com a CaptchaAI
Resolver o Turnstile é direto
O Turnstile é resolvido pelo método turnstile da CaptchaAI. É o cenário mais comum em automação e normalmente fecha em menos de 10 segundos, com alta taxa de sucesso:
import requests
import time
API_KEY = "YOUR_API_KEY"
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
"pageurl": "https://example.com/signup",
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
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:
token = result["request"]
print(f"Turnstile token: {token[:50]}...")
break
Resolver desafios do Bot Management exige mais contexto
- O Bot Management combina várias camadas de defesa.
- Quando existe um componente CAPTCHA, ele costuma vir como um desafio gerenciado renderizado como Turnstile:
# Bot Management flow for automation:
# 1. Make initial request
response = requests.get("https://protected-site.com/api/data")
# 2. Check if challenged
if response.status_code == 403:
# Hard block — need to adjust headers, proxy, or approach
pass
elif "challenge" in response.text.lower() or response.status_code == 503:
# JavaScript challenge or managed challenge
# If it contains a Turnstile widget, solve it:
if "cf-turnstile" in response.text or "challenges.cloudflare.com" in response.text:
# Extract sitekey and solve via CaptchaAI
sitekey = extract_turnstile_sitekey(response.text)
token = solve_turnstile(sitekey, "https://protected-site.com/api/data")
Página de verificação em staging (sem widget Turnstile)
- A página "Verificando seu navegador" NÃO é um widget Turnstile — é o desafio JavaScript do Bot Management.
- A CaptchaAI trata esse caso pelo método
turnstile_staging:
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile_staging",
"sitekey": "managed",
"pageurl": "https://protected-site.com/login",
"json": 1,
})
Como identificar automaticamente qual proteção está ativa
- Página "Verificando seu navegador" de 5 s → Bot Management (desafio JS); confirme por
cf-chlejschl_vcno código-fonte. - Widget num formulário → Turnstile (isolado); confirme pela classe
cf-turnstilee pelo domíniochallenges.cloudflare.com/turnstile. - 403 com página de erro da Cloudflare → Bot Management (bloqueio direto); confirme pelo cabeçalho
cf-raye pelo template de erro da Cloudflare. - Caixa de seleção interativa numa página da Cloudflare → desafio gerenciado (Bot Management); confirme pelo domínio
challenges.cloudflare.com. - Nenhum desafio visível, mas cookies da Cloudflare presentes → Bot Management aprovado; confirme pelo cookie de validação definido pela Cloudflare.
Script para automatizar a checagem
import requests
def identify_cloudflare_protection(url):
"""Identify which Cloudflare protection a URL uses."""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0",
}
response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
html = response.text
result = {
"cloudflare_protected": "cf-ray" in response.headers.get("cf-ray", "")
or "cloudflare" in response.headers.get("server", "").lower(),
"bot_management_challenge": False,
"turnstile_widget": False,
"hard_block": False,
"passed": False,
}
if response.status_code == 403:
result["hard_block"] = True
elif response.status_code == 503 and "jschl" in html:
result["bot_management_challenge"] = True
elif "cf-turnstile" in html:
result["turnstile_widget"] = True
elif response.status_code == 200:
result["passed"] = True
return result
Exemplo: QA de checkout hospedado atrás da Cloudflare
Uma equipe de QA testando o checkout de um e-commerce atrás da Cloudflare, rodando workers na região sa-east-1 da AWS para simular a latência de um usuário no Brasil, costuma ver os dois produtos na mesma sessão: o Bot Management avalia a navegação inteira, e o Turnstile aparece isolado só no login. Vale registrar qual sinal apareceu em cada execução — útil também para documentar o processo se a coleta de dados de teste precisar respeitar a LGPD.
Perguntas frequentes
O Turnstile exige o plano Enterprise da Cloudflare?
Não. O Turnstile é gratuito em qualquer plano da Cloudflare. Só o Bot Management fica restrito ao plano Enterprise.
Um site pode usar Bot Management e Turnstile ao mesmo tempo?
- Sim. O Bot Management atua no nível da rede para todas as requisições.
- O Turnstile é adicionado como widget em páginas específicas — por exemplo, bloqueando bots óbvios na borda e pedindo Turnstile só no login.
Quanto tempo leva para a CaptchaAI resolver o Turnstile?
O método turnstile normalmente fecha em menos de 10 segundos, com alta taxa de sucesso. O tempo do Bot Management varia mais, porque depende de quantos sinais de rede a automação precisa satisfazer antes do desafio aparecer.
O que é mais difícil de automatizar?
- Bot Management: avalia cada requisição com vários sinais de rede — assinatura TLS, reputação de IP, padrões de requisição — além do desafio em si.
- Turnstile: protege só o envio de formulários específicos; resolvido o widget, a automação segue.
A CaptchaAI resolve o bloqueio 403 do Bot Management?
- Não sozinha. A CaptchaAI resolve o componente de desafio CAPTCHA — Turnstile e a verificação em staging.
- Um bloqueio 403 de rede exige ajustes fora desse escopo, como cabeçalhos e TLS adequados, antes que o desafio CAPTCHA apareça.
Resumo
- Cloudflare Bot Management é uma defesa de rede do plano Enterprise, com pontuação de ML, regras de WAF e limitação de taxa.
- Cloudflare Turnstile é um widget de CAPTCHA gratuito, disponível em qualquer plano, que verifica o visitante com prova de trabalho no navegador.
- Na automação, o Turnstile é resolvido diretamente com a CaptchaAI — alta taxa de sucesso, resposta em segundos; os desafios do Bot Management pedem simulação de navegador adequada, além da CaptchaAI para o componente CAPTCHA.