如何使用 Python 绕过 Cloudflare Turnstile#

logoNextCaptcha
March 26,2026

什么是 Cloudflare Turnstile?#

Cloudflare Turnstile 是一种智能验证码替代方案,无需侵入式验证即可确认用户身份。与传统的图片选择或文字输入验证码不同,Turnstile 通过隐形浏览器挑战来判断访问者是否为真人。它被广泛应用于使用 Cloudflare 服务的网站,对于网络爬虫和自动化工作流程来说可能是一个重大障碍。

环境准备#

开始之前,请确保已安装 Python 3.7 或更高版本。您还需要一个 NextCaptcha API 密钥 — 在 NextCaptcha 注册即可获取免费试用额度。然后安装 NextCaptcha Python SDK:
pip install nextcaptcha-python

使用 NextCaptcha SDK 快速开始#

首先,使用您的 API 密钥创建 NextCaptchaAPI 实例。您可以在 NextCaptcha 控制台中找到您的 client key:
from nextcaptcha import NextCaptchaAPI
 
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
然后调用 turnstile 方法,传入目标网站 URL 和 Turnstile 站点密钥。站点密钥可以在目标页面的 Turnstile 组件的 data-sitekey 属性中找到:
result = api.turnstile(
    website_url="https://example.com",
    website_key="0x4XXXXXXXXXXXXXXXXX"
)
 
if result["status"] == "ready":
    token = result["solution"]["token"]
    print(f"Turnstile token: {token}")

包含错误处理的完整示例#

以下是一个包含完善错误处理和环境变量支持的生产级示例:
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)

使用原生 API(不使用 SDK)#

如果不想使用 SDK,您可以直接使用 requests 库调用 NextCaptcha API。这种方式让您可以完全控制 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...")
这种方式需要两次 API 调用:createTask 提交 Turnstile 验证任务,getTaskResult 轮询获取解决结果。建议轮询间隔为 3 秒,以避免触发频率限制。

总结#

本指南介绍了两种使用 Python 绕过 Cloudflare Turnstile 的方法:使用 NextCaptcha Python SDK 实现简洁的高级调用,以及使用原生 API 实现完全控制。NextCaptcha 会自动处理 Turnstile 验证挑战,返回有效的令牌供您提交到目标网站。更多详情请参阅以下链接: