
Cloudflare Turnstile Solver — 用 Python 获取 Turnstile Token
Cloudflare Turnstile Solver 包让你能轻松地从 Python 处理 Cloudflare Turnstile:它会在任意页面上找到 Turnstile sitekey,通过 Peak API 创建有效的 Turnstile token,并将 cf-turnstile-response token 交给你,可注入表单或请求中。它是一个小型、无依赖的库外加一个 CLI——专为 CI 流水线、QA 自动化和集成工程而设计。
目录:
- 本包的功能
- 快速开始
- 查找 Turnstile sitekey
- 创建 Turnstile token
- Python API 参考
- CLI 用法
- 示例
- 由 Peak 驱动
- 许可证
本包的功能
Cloudflare Turnstile 通过一个发放 token 的小部件来保护页面。始终需要两件事:找到页面使用的 sitekey,以及为该 sitekey 创建 token。本包两者兼备:
find_sitekey()— 扫描页面以查找其data-sitekey。create_token()— 向 Peak API 提交求解任务并获取有效 token。token_for_page()— 一次调用完成上述两步。
它不依赖浏览器。单个 Python 文件,仅使用标准库,可在无头服务器和 CI 运行器上工作。
快速开始
$ export PEAK_API_KEY=pk_your_api_key
$ python -m cloudflare_turnstile_solver --url https://example.com/
0.AgAAABBqzz...
或者先找到 sitekey,再创建 token:
from cloudflare_turnstile_solver import find_sitekey, create_token
sitekey = find_sitekey("https://example.com/")
token = create_token("pk_...", sitekey, "https://example.com/")
print(token) # -> "0.AgAAABBqzz..."
查找 Turnstile sitekey
Turnstile 小部件会在页面标记中暴露 sitekey:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAxxxx"></div>
find_sitekey() 会帮你读取它:
from cloudflare_turnstile_solver import find_sitekey
sitekey = find_sitekey("https://example.com/")
print(sitekey) # -> "0x4AAAAAAAxxxx"
若存在 data-action,它也会一并找到,确保 token 的作用域正确。
创建 Turnstile token
token 与 sitekey、页面 URL 以及可选的 action 绑定。要通过 Peak API 创建一个:
from cloudflare_turnstile_solver import create_token
result = create_token("pk_...", "0x4AAAAAAAxxxx", "https://example.com/",
proxy="http://u:p@1.2.3.4:8080")
print(result.token)
将返回的 token 作为 cf-turnstile-response 提交:
cf-turnstile-response: 0.AgAAABBqzz...
⚠️ 如果 token 被拒绝,请检查基本要素。token 与创建它的页面 URL 和环境绑定。请求时请使用相同的代理和匹配的 user agent。
Python API 参考
| 函数 | 描述 |
|---|---|
find_sitekey(url, html=None) | 扫描页面以查找其 Turnstile sitekey。 |
find_action(html) | 查找可选的 data-action 值。 |
create_token(api_key, sitekey, url, proxy=None, action=None, cdata=None, ...) | 通过 Peak API 创建有效 token。 |
token_for_page(api_key, url, proxy=None, html=None) | 一次调用完成查找 sitekey 并创建 token。 |
所有函数在失败时都会抛出 TurnstileTokenError。create_token 会自动重试瞬时故障。
CLI 用法
$ python -m cloudflare_turnstile_solver --url https://example.com/ --output json
{
"sitekey": "0x4AAAAAAAxxxx",
"token": "0.AgAAABBqzz...",
"success": true
}
参数:--url(必需)、--sitekey、--proxy、--api-key、--output {text,json}、--retries。
示例
在脚本中配合 requests 使用
import requests
from cloudflare_turnstile_solver import token_for_page
result = token_for_page("pk_...", "https://example.com/")
resp = requests.post("https://example.com/submit",
data={"cf-turnstile-response": result.token})
print(resp.status_code)
在 CI / shell 中
TOKEN=$(python -m cloudflare_turnstile_solver --url https://example.com/)
curl -X POST https://example.com/submit \
-H "cf-turnstile-response: $TOKEN" \
-d "payload=..."
由 Peak 驱动
本包使用 Peak 来求解 Turnstile。
- ✅ 注册即赠 1,000 次免费求解——无需信用卡。领取 1,000 次免费求解,只需为成功的求解付费。
- 成功求解每 1,000 次低至 $0.8。
- 约 1 秒内解决 Cloudflare Turnstile 与 5 秒挑战。
获取免费 API key • 文档 • 定价
常见问题
它可以在无头/无浏览器环境下运行吗?
可以。整个包是一个仅使用标准库的单个 Python 文件——无需浏览器、无需 webdriver、无需 Node。它在无头 CI 运行器上与本地运行方式完全相同。
如何使用代理?
通过 proxy 参数将其传递给 create_token / token_for_page,或在 CLI 上使用 --proxy:
$ python -m cloudflare_turnstile_solver --url https://example.com/ --proxy http://u:p@1.2.3.4:8080
可以在同一网站的多个页面上使用吗?
可以——为每个页面 URL 分别调用 token_for_page。每个 token 都与其创建时所针对的页面 URL 绑定,因此不要在不同页面之间复用同一个 token。
许可证
MIT