先说结论:换到 CaptchaAI,代码上只要改一行 endpoint。两边都是 in.php 提交、res.php 轮询,参数名和返回结构一致。
要评估的不是迁移成本,而是三件事:识别耗时、v3 分数、Cloudflare Challenge 和 BLS 的覆盖。
能力对照表
以下为公开资料与内部观测样本的参考值,请在自有环境中实测。
| 能力 | CaptchaAI | 2Captcha |
|---|---|---|
| reCAPTCHA v2 | ✅ | ✅ |
| reCAPTCHA v3 | ✅ 可指定 action | 部分支持 |
| reCAPTCHA Enterprise | ✅ | ✅ |
| Cloudflare Turnstile | ✅ | 部分支持 |
| Cloudflare Challenge | ✅ | ❌ |
| GeeTest v3 | ✅ | ✅ |
| GeeTest v4 | ❌(即将支持) | ✅ |
| hCaptcha | ❌ 暂不支持 | ✅ |
| FunCaptcha(Arkose Labs) | ❌ 暂不支持 | ✅ |
| BLS CAPTCHA | ✅ | ❌ |
| 图片 / OCR | ✅ 27,500+ 种变体 | ✅ |
| CaptchaFox / Friendly Captcha / Lemin | ✅(测试版) | — |
开发者最常给出的 5 个理由
1. 识别耗时:模型识别 vs 人工打码
2Captcha 以人工打码为主,队列长度决定等待时间。
| 类型 | CaptchaAI(官方 SLA 上限) | 2Captcha(社区实测区间) |
|---|---|---|
| reCAPTCHA v2 | <60 秒 | 20–60 秒 |
| 图片验证码 | <0.5 秒 | 8–20 秒 |
| Cloudflare Turnstile | <10 秒 | 15–40 秒 |
| GeeTest v3 | <12 秒 | 无公开区间 |
人工打码有排队和换班,夜里和周末在线人数少,耗时就会拉长。
2. reCAPTCHA v3:分数够不够过阈值
v3 不看解没解出来,看分数。站点阈值常见 0.5,严的到 0.7,而 2Captcha 的 v3 token 常落在 0.1–0.3。CaptchaAI 提交时可以指定 version 和 action:
# CaptchaAI — control the v3 score
import requests
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"version": "v3",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"action": "login",
"json": 1,
})
action 必须和页面里 grecaptcha.execute() 传的值一致,写错了分数照样掉。
3. BLS 验证码:2Captcha 没有的类型
做签证预约、政府门户自动化的团队,多半是被 BLS CAPTCHA 逼着换服务的。
# CaptchaAI — BLS CAPTCHA with a high success rate
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "bls",
"pageurl": "https://bls-portal.example.com",
"sitekey": "BLS_SITE_KEY",
"json": 1,
})
参数结构和 reCAPTCHA 一样,只是 method 换了个名字。
4. Cloudflare 要覆盖两层
| 类型 | CaptchaAI | 2Captcha |
|---|---|---|
| Turnstile | ✅ SLA <10 秒 | 部分支持 |
| Challenge 挑战页 | ✅ SLA <15 秒 | ❌ |
| JS 挑战 | ✅ | ❌ |
拦住爬虫的往往不是 Turnstile,而是那张 Challenge 挑战页。
5. 接口格式与 2Captcha 兼容
# 2Captcha original
ENDPOINT = "https://2captcha.com"
# CaptchaAI — just change the URL
ENDPOINT = "https://ocr.captchaai.com"
# Same API format, same parameters, same response structure
CAPCHA_NOT_READY 等状态串也一致,轮询和超时逻辑原样保留。
迁移前后的运行记录
自有 QA 采集流水线切换前后的对照,仅作参考,实际结果随环境变化。
迁移前(2Captcha)
Pipeline: 500 pages/hour
Avg solve time: 35s
Failure rate: 8%
Peak hour solve: 60-90s
Monthly cost: $300
Night shift: Slow (fewer workers)
Weekends: Slower (fewer workers)
Flash sales: Breaks (demand spike)
迁移后(CaptchaAI)
Pipeline: 1,200 pages/hour
Avg solve time: 12s
Failure rate: 3%
Peak hour solve: 12-15s
Monthly cost: $280
Night shift: Same speed
Weekends: Same speed
Flash sales: Same speed
月成本几乎没动($300 → $280),吞吐量翻了一倍多。差别在等待时间:平均识别耗时从 35 秒降到 12 秒,同样的线程数能跑完更多任务。按线程包月、套餐内识别次数不限,吞吐涨了账单也不跟着涨。
中文开发者的两个额外考量
- 国内站点大多是极验(GeeTest)、易盾、防水墙,reCAPTCHA 和 Turnstile 更多出现在出海项目上。先把类型列清楚,再对照上面的表。
- reCAPTCHA 的前端脚本挂在 Google 域名下,国内加载不稳定,但这只影响本地调试——提交
googlekey和pageurl是纯服务端 API 调用。采集类项目另外守住授权边界:《网络安全法》《数据安全法》和 PIPL 都要求只采集你有权采集的数据。
切换清单
- 注册 CaptchaAI,在控制台拿到 API Key。
- endpoint 常量改成
https://ocr.captchaai.com,key 换成新的。 - 旧任务继续用 2Captcha 余额,新任务走 CaptchaAI,并行跑一周。
- 对比识别耗时和失败率,再全量切过来。
import requests
import time
# Only these two lines change:
API_KEY = "YOUR_CAPTCHAAI_KEY"
API_URL = "https://ocr.captchaai.com"
def solve_recaptcha(sitekey, pageurl):
resp = requests.post(f"{API_URL}/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get(f"{API_URL}/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
只有开头两行常量变了,轮询逻辑完全不动。
故障排查
- 速度和以前一样:请求还打在 2captcha.com,确认 endpoint 是
ocr.captchaai.com。 - API Key 被拒:还在用 2Captcha 的 key,到控制台重新申请。
- Turnstile 任务失败:method 名写旧了,改成
method=turnstile。
常见问题
CaptchaAI 是按次收费还是按线程收费?
按线程包月:BASIC $15/月(5 线程)、ADVANCE $90/月(50 线程),最高到 VIP-3 $7,500/月(5,000 线程)。套餐内识别次数不限,也不按类型加价,选档看的是并发量。
hCaptcha 和 GeeTest v4 能用 CaptchaAI 识别吗?
都不支持。GeeTest v4 官方标注为即将支持,现在可用的是 v3。CaptchaFox、Friendly Captcha、Lemin 属于测试版,上生产前先小批量验证。
迁移期间两家能同时跑吗?
能,也建议这么做。接口格式一致,用一个环境变量控制 endpoint 就能来回切。
v3 分数一直上不去怎么办?
先核对 action 与页面是否一致,再确认 pageurl 写的是真正触发验证码的页面。
相关指南
想知道差距有多大?免费试用 CaptchaAI,把 endpoint 换掉,用现有代码跑一轮对比。