验证码解决方案有两种形式:注入表单提交的令牌,以及授予会话级访问权限的cookie。选择正确的方法取决于您面临的验证码以及目标站点如何验证它。
一目了然
| 方面 | 基于代币 | 基于cookie |
|---|---|---|
| 输出 | 字符串标记(500+ 个字符) | 浏览器 cookie(qa_session_cookie 等) |
| 用于 | reCAPTCHA v2/v3、hCaptcha、Turnstile | Cloudflare 验证流程 页 |
| 如何使用 | 注入表单字段或 POST 正文 | 与后续 HTTP 请求一起发送 |
| 寿命 | 60-120秒 | 30分钟至24小时 |
| 可重复使用的 | 无(一次性使用) | 是(在会话期间) |
| 需要浏览器 | 仅用于提取 | 用于解决(需要完整的浏览器) |
基于令牌的解决方案
它是如何运作的
- 从页面中提取 sitekey
- 提交 sitekey + 页面 URL 至 CaptchaAI
- 接收令牌字符串
- 将token 提交隐藏表单字段
- 提交表格
哪些验证码使用令牌
- reCAPTCHA v2:令牌进入
g-recaptcha-response文本区域 - reCAPTCHA v3:相同字段,但还需要
action(Enterprise sitekey 还需enterprise=1) - hCaptcha:令牌进入
h-captcha-response - Turnstile:代币进入
cf-turnstile-response
执行
import requests
import time
API_KEY = "YOUR_API_KEY"
# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAAAPBMR...",
"pageurl": "https://staging.example.com/qa-login",
"json": "1",
}).json()
task_id = resp["request"]
# 2. Poll
token = None
for _ in range(24):
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["status"] == 1:
token = result["request"]
break
# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
"email": "user@example.com",
"password": "password",
"g-recaptcha-response": token,
})
主要特点
- 无需浏览器提交:您可以将令牌直接注入到 HTTP POST 请求中
- 短暂:代币在 60-120 秒内过期 — 立即解决并使用
- 单次使用:每个代币只能使用一次;再次解决每个表单提交的问题
- 服务器端验证:目标站点将令牌发送到Google/Cloudflare/hCaptcha进行验证
基于cookie的解决方案
它是如何运作的
- 提供挑战页面(Cloudflare 验证流程,JS 挑战)
- 浏览器解决了这个挑战(内部可能涉及 Turnstile)
- 服务器设置会话 cookie (
qa_session_cookie) - 使用该 cookie 的所有后续请求都会跳过挑战
哪些验证码使用 cookie
- Cloudflare 验证流程 页面:
qa_session_cookiecookie - JS 挑战:Cloudflare 仅 JavaScript 挑战
- 一些 WAF 挑战:各种 Web 应用程序防火墙
执行
from selenium import webdriver
import requests
import time
# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")
# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10) # Or use CaptchaAI token 提交
# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_session_cookie = next(
(c for c in cookies if c["name"] == "qa_session_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()
# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})
for cookie in cookies:
session.cookies.set(cookie["name"], cookie["value"])
# All requests now pass the challenge
for page in range(1, 50):
resp = session.get(f"https://example.com/api/data?page={page}")
print(f"Page {page}: {resp.status_code}")
主要特点
- 解决所需的浏览器:挑战需要完整的浏览器环境
- 寿命长:Cookie 可持续 30 分钟至 24 小时
- 可重复使用:一个解决方案授予对多个请求的访问权限
- IP 绑定:cookie 与解决挑战的 IP 绑定
- UA-bound:用户代理必须与求解过程中使用的用户代理相匹配
何时使用哪个
| 设想 | 方法 | 为什么 |
|---|---|---|
| 使用 reCAPTCHA 登录表单 | 代币 | 提交带有表单数据的令牌 |
| 抓取受 Cloudflare 保护的网站 | 曲奇饼 | 一次解决,多个页面请求 |
| 使用 Turnstile 提交表格 | 代币 | 注入cf-turnstile-response |
| 访问 Cloudflare 背后的 API | 曲奇饼 | 对所有 API 调用重用 cookie |
| 提交多个表格 | 令牌(每次) | 每个表单都需要一个新的令牌 |
| 批量抓取同一个域 | 曲奇饼 | 解决一次,刮至cookie过期 |
混合方法
有些网站同时使用这两种方式: Cloudflare 验证流程 页面 (cookie) 保护具有 reCAPTCHA(令牌)的表单。
# Step 1: Get past Cloudflare (cookie)
session = get_qa_session_cookie_session("https://example.com")
# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)
# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")
# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
"data": "value",
"g-recaptcha-response": token,
})
对比总结
| 特征 | 代币 | 曲奇饼 |
|---|---|---|
| 解决成本 | 每次提交表格 | 每会话(摊销) |
| 求解时间 | 每个令牌 10-30 秒 | 10-30秒一次 |
| 每次解决的请求数 | 1 | 很多(直到过期) |
| 知识产权灵活性 | 令牌可在任何 IP 上使用 | Cookie绑定解析IP |
| 使用浏览器 | 不需要 | 不需要(只需 cookie) |
| 到期风险 | 60-120秒 | 30 分钟 - 24 小时 |
常问问题
我可以将基于令牌的验证码转换为基于 cookie 的验证码吗?
不会。该方法取决于网站的验证方式。 reCAPTCHA 始终使用令牌; Cloudflare 验证流程 始终使用 cookie。
对于大批量刮擦哪个更便宜?
如果可用的话,基于 Cookie 的价格要便宜得多。一次解决可以涵盖数千个请求。基于令牌需要每次提交表单时进行解决。
CaptchaAI 两者都能处理吗?
是的。基于令牌的验证码返回令牌字符串。对于 Cloudflare 验证流程 页面,您可以使用 Turnstile 求解器来获取完成挑战所需的令牌,然后提取生成的 cookie。
使用 CaptchaAI 解决验证码
获取您的 API 密钥:验证码网站。
相关指南
- Cloudflare 验证流程 qa_session_cookie Cookie 指南
- 提取 reCAPTCHA 参数
- Turnstile、hCaptcha 与 reCAPTCHA