Cloudflare Turnstile 是网络上最常见的验证码之一。在本教程中,您将学习如何使用 Python 和 NSLSolver API 以编程方式绕过它。我们将在 5 分钟内从零开始实现一个可用的解决方案。
前置条件
- 已安装 Python 3.7 或更高版本
- requests 库(pip install requests)
- NSLSolver API 密钥 — 免费注册
第一步:安装依赖
您只需要 requests 库。使用 pip 安装:
terminal
$pip install requests
第二步:获取 API 密钥
使用 NSLSolver API 需要一个 API 密钥:
- 在 nslsolver.com 创建免费账户
- 验证邮箱即可获得 100 次免费请求
- 从控制台复制您的 API 密钥
第三步:发送解决请求
以下是解决 Turnstile 验证码的最简代码:
solve_turnstile.py
import requests
API_KEY = "nsl_YOUR_API_KEY"
response = requests.post(
"https://api.nslsolver.com/solve",
headers={"X-API-Key": API_KEY},
json={
"type": "turnstile",
"siteKey": "0x4XXXXXXXXXXXXXXXXX",
"url": "https://example.com"
}
)
data = response.json()
print(data["token"])API 返回包含已解决令牌的 JSON 响应:
response.json
{
"success": true,
"token": "1.AgAAAIxD...a_long_token_string",
"cost": 0.001
}第四步:使用令牌
现在将令牌连同表单数据一起提交到目标网站:
use_token.py
# After getting the token from NSLSolver:
token = data["token"]
# Submit the form with the solved token
result = requests.post(
"https://example.com/login",
data={
"username": "[email protected]",
"password": "your_password",
"cf-turnstile-response": token
}
)
print(result.status_code)完整示例(含错误处理)
以下是适用于生产环境的示例,包含重试和错误处理:
turnstile_bypass.py
import requests
import time
API_KEY = "nsl_YOUR_API_KEY"
SITE_KEY = "0x4XXXXXXXXXXXXXXXXX"
PAGE_URL = "https://example.com/protected-page"
def solve_turnstile(site_key, url, retries=3):
"""Solve a Cloudflare Turnstile challenge via NSLSolver."""
for attempt in range(retries):
try:
resp = requests.post(
"https://api.nslsolver.com/solve",
headers={"X-API-Key": API_KEY},
json={
"type": "turnstile",
"siteKey": site_key,
"url": url
},
timeout=30
)
resp.raise_for_status()
data = resp.json()
if data.get("success"):
return data["token"]
print(f"Attempt {attempt + 1} failed: {data}")
except requests.RequestException as e:
print(f"Request error: {e}")
if attempt < retries - 1:
time.sleep(2)
return None
# Solve and use the token
token = solve_turnstile(SITE_KEY, PAGE_URL)
if token:
print("Got token, submitting form...")
result = requests.post(
PAGE_URL,
data={"cf-turnstile-response": token}
)
print(f"Status: {result.status_code}")
else:
print("Failed to solve turnstile after retries.")错误处理
您可能遇到的常见 HTTP 状态码:
- 401API 密钥无效。请检查您的 X-API-Key 请求头。
- 402余额不足。请为账户充值。
- 429请求被限流。请稍等片刻后重试。
- 500服务器错误。请重试请求。如果持续出现,请联系客服。
小贴士:务必实现重试逻辑。虽然偶发故障很少见,但仍有可能。上面的完整示例已自动处理了这种情况。