GeeTest(极验)和 reCAPTCHA 该选哪个?验证逻辑不同:GeeTest 靠滑动、点选,reCAPTCHA v2 用图像网格,v3 无感评分。真正要比的是接入成本——参数、解析、识别耗时。三步判断你会遇到哪一种:
- 面向中国大陆或亚洲用户 → 大概率是 GeeTest(极验)
- 面向欧美或全球用户 → 大概率是 reCAPTCHA v2/v3
- 两者都用(如登录页一种、其他表单另一种)→ 需分别处理两套参数
识别机制有什么不同
| 判断信号 | GeeTest(极验) | reCAPTCHA |
|---|---|---|
| 交互速度与轨迹 | 滑动速度、加速度、有没有微调;轨迹完美笔直即机器人特征 | 持续记录鼠标 / 键盘行为 |
| 时间点异常 | 太快或耗时太一致都算异常 | v3 连续打分,异常拉低分数 |
| 历史信誉 | 不依赖,每次挑战独立判断 | Google cookie 信誉 + IP 历史评分 |
| 环境检测 | 浏览器自动化痕迹 | 同样检测;v2 信誉不够再加图像网格二次验证 |
核心特性对比
| 维度 | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| 挑战类型 | 滑动 / 图标点选 / 文字匹配 | 图像网格选择 | 无(不可见) |
| 行为分析 | 鼠标轨迹、速度曲线 | 鼠标 / 键盘行为、cookie | 持续监控 |
| 所需参数 | gt、challenge、pageurl | googlekey、pageurl | googlekey、action、pageurl |
| 响应格式 | challenge、validate、seccode | 单个 token | 单个 token + 分数 |
| 主要市场 | 中国及亚洲,全球增长中 | 全球 | 全球 |
| 免费额度 | 有限 | 有 | 有 |
| 参数是否动态 | 每次会话都变化 | 静态 sitekey | 静态 sitekey |
集成难度:谁的接入成本更高
以下数字仅供参考,实际结果因环境而异,请在自有环境中测量。
| 维度 | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| 参数提取 | 中等(需先获取 gt 与 challenge) | 简单(静态 sitekey) | 简单(静态 sitekey + action) |
| API 方法 | method=geetest |
method=userrecaptcha |
method=userrecaptcha + version=v3 |
| 识别耗时 | <12 秒 | <60 秒 | <4 秒 |
| 响应解析 | 复杂(3 个值) | 简单(1 个 token) | 简单(1 个 token) |
| 挑战是否可复用 | 否(一次性挑战) | N/A(基于 token) | N/A(基于 token) |
用 CaptchaAI 实测:GeeTest 和 reCAPTCHA 怎么调用
GeeTest v3 怎么提交
challenge 一次性,需先拿 gt 和 challenge,再连同 pageurl 提交:
# Must fetch fresh challenge first
params = requests.get("https://example.com/api/captcha").json()
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "geetest",
"gt": params["gt"], "challenge": params["challenge"],
"pageurl": URL, "json": 1
}).json()
# Solution has 3 parts
solution = poll_result(resp["request"])
# solution = {geetest_challenge, geetest_validate, geetest_seccode}
solution 含三个字段,需一起提交——比 reCAPTCHA 更“重”。
reCAPTCHA v2 怎么提交
googlekey 静态,直接传给 CaptchaAI:
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAA...", "pageurl": URL, "json": 1
}).json()
# Solution is a single token
token = poll_result(resp["request"])
返回单个 token,注入隐藏字段即可提交。
自动化落地时要注意的关键差异
- 每次求解要不要新参数:GeeTest 要(challenge 一次性);reCAPTCHA 不用(sitekey 静态)
- 会话管理:GeeTest 需在拿参数和提交解答之间保持同一会话;reCAPTCHA 更简单——token 本身独立
- token 提交方式:GeeTest 提交 3 个表单字段;reCAPTCHA 只需注入 1 个隐藏字段
- 有没有回退:GeeTest 通常没有;reCAPTCHA v3 常回退到 v2
- 要处理的错误:GeeTest 是过期 challenge;reCAPTCHA 是过期 token
常见问题
GeeTest v4 现在能用 CaptchaAI 识别吗?
不支持,目前只到 v3(method=geetest)。v4 官方标注“即将支持”。
为什么国内网站大多用 GeeTest(极验),海外网站用 reCAPTCHA?
- GeeTest(极验)是国内厂商,中国大陆和亚洲占有率高
- reCAPTCHA 背靠 Google,需加载 Google 脚本,国内网络环境下不一定稳定——这也是不少站点选 GeeTest 的原因
GeeTest v3 的 challenge 参数为什么每次都不一样?
challenge 一次性,每次会话重新生成,用完即失效——比静态 sitekey 更难被脚本复用。抓参数和提交解答需在同一会话内完成。
GeeTest 有没有类似 reCAPTCHA v3 的隐形识别模式?
没有,原因很直接:
- GeeTest v3 必须交互——滑动、点选或匹配三选一
- 无感验证目前只有 reCAPTCHA v3 这类评分方案能做到