Como contornar Cloudflare Turnstile com Python#

logoNextCaptcha
March 26,2026

O que é Cloudflare Turnstile?#

Cloudflare Turnstile é uma alternativa inteligente ao CAPTCHA projetada para verificar usuários sem desafios intrusivos. Diferente dos CAPTCHAs tradicionais que exigem seleção de imagens ou entrada de texto, o Turnstile executa desafios invisíveis no navegador para determinar se o visitante é humano. É amplamente adotado por sites que utilizam os serviços da Cloudflare e pode ser um obstáculo significativo para web scraping e fluxos de trabalho automatizados.

Pré-requisitos#

Antes de começar, certifique-se de ter o Python 3.7 ou superior instalado. Você também precisa de uma chave API NextCaptcha — cadastre-se no NextCaptcha para obter créditos de teste gratuitos. Em seguida, instale o SDK Python do NextCaptcha:
pip install nextcaptcha-python

Início rápido com o SDK NextCaptcha#

Primeiro, crie uma instância NextCaptchaAPI com sua chave API. Você pode encontrar sua chave de cliente no painel do NextCaptcha:
from nextcaptcha import NextCaptchaAPI
 
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
Depois, chame o método turnstile com a URL do site alvo e a chave do site Turnstile. A chave pode ser encontrada no atributo data-sitekey do widget Turnstile na página alvo:
result = api.turnstile(
    website_url="https://example.com",
    website_key="0x4XXXXXXXXXXXXXXXXX"
)
 
if result["status"] == "ready":
    token = result["solution"]["token"]
    print(f"Turnstile token: {token}")

Exemplo completo com tratamento de erros#

Aqui está um exemplo pronto para produção com tratamento de erros e suporte a variáveis de ambiente:
import os
import sys
from nextcaptcha import NextCaptchaAPI
 
CLIENT_KEY = os.getenv("NEXTCAPTCHA_KEY", "YOUR_CLIENT_KEY")
WEBSITE_URL = "https://example.com"
WEBSITE_KEY = "0x4XXXXXXXXXXXXXXXXX"
 
api = NextCaptchaAPI(client_key=CLIENT_KEY)
 
try:
    result = api.turnstile(
        website_url=WEBSITE_URL,
        website_key=WEBSITE_KEY
    )
 
    if result["status"] == "ready":
        token = result["solution"]["token"]
        print(f"Turnstile solved successfully!")
        print(f"Token: {token[:50]}...")
    else:
        print(f"Failed to solve: {result.get('errorDescription', 'Unknown error')}")
        sys.exit(1)
 
except Exception as e:
    print(f"Error: {e}")
    sys.exit(1)

Usando a API direta (sem SDK)#

Se preferir não usar o SDK, você pode chamar a API NextCaptcha diretamente com a biblioteca requests. Essa abordagem dá controle total sobre as requisições HTTP:
import requests
import time
 
API_KEY = "YOUR_API_KEY"
WEBSITE_URL = "https://example.com"
WEBSITE_KEY = "0x4XXXXXXXXXXXXXXXXX"
 
# Step 1: Create task
response = requests.post("https://api.nextcaptcha.com/createTask", json={
    "clientKey": API_KEY,
    "task": {
        "type": "TurnstileTaskProxyless",
        "websiteURL": WEBSITE_URL,
        "websiteKey": WEBSITE_KEY
    }
})
 
data = response.json()
if data.get("errorId", 0) != 0:
    print(f"Error creating task: {data.get('errorDescription')}")
    exit()
 
task_id = data["taskId"]
print(f"Task created: {task_id}")
 
# Step 2: Poll for result
while True:
    time.sleep(3)
    result = requests.post("https://api.nextcaptcha.com/getTaskResult", json={
        "clientKey": API_KEY,
        "taskId": task_id
    }).json()
 
    if result["status"] == "ready":
        token = result["solution"]["token"]
        print(f"Solved! Token: {token[:50]}...")
        break
    elif result["status"] == "failed":
        print(f"Failed: {result.get('errorDescription')}")
        break
    else:
        print("Waiting for solution...")
Essa abordagem envolve duas chamadas de API: createTask para enviar o desafio Turnstile, e getTaskResult para consultar a solução. Um intervalo de consulta de 3 segundos é recomendado para evitar limites de taxa.

Resumo#

Neste guia, cobrimos dois métodos para contornar o Cloudflare Turnstile com Python: o SDK NextCaptcha para uma abordagem simples, e a API direta para controle total. O NextCaptcha resolve automaticamente o desafio Turnstile e retorna um token válido. Para mais detalhes, confira os links abaixo: