GeeTest 验证码详解:工作原理与求解方法
GeeTest 是一家验证码服务商,其组件要求访客完成一项视觉任务:把拼图块拖入缺口,按指定顺序点击一组图标,或完成一段简短的滑块移动。它在电商网站、登录页面以及许多地区的应用后端都很常见。它也是 Scarnox 目前尚未支持求解的验证码系列之一。本指南解释 GeeTest 的工作原理、为什么它比基于 token 的组件更难自动化、人们在一般情况下采用哪些方法,以及 Scarnox 目前的支持状态。
GeeTest 在页面上做了什么
GeeTest 验证码通常分三步加载:
- 页面加载 GeeTest 脚本,并使用验证码 ID 创建组件。在许多集成中,该 ID 作为名为
gt的参数传入。 - 组件向 GeeTest 服务器请求一个新的挑战。挑战包含一个
challenge值,以及拼图所需的图片或图块位置。 - 访客完成任务后,组件把结果回传给网站。随后网站后端会先向验证码服务商核实该结果,然后才接受表单。
第三步至关重要。一个看起来合理的值是不够的,因为服务器检查的是与某次挑战绑定且会过期的结果。这就是为什么从其他会话复制来的值会失败,也是为什么重放旧结果行不通。
为什么 GeeTest 比 token 组件更难
使用 PopularCaptcha 时,页面只需要一个 token 字符串,一次请求即可返回该字符串。GeeTest 在三个方面有所不同:
- 输出是一项任务的结果,而不是单个字符串。 网站期望得到几个相互关联的值,而且它们必须全部来自同一次挑战。
- 挑战是视觉性和位置性的。 求解器必须找出拼图块应放置的位置,或图标匹配的规律,然后生成一段看起来像人类操作的移动轨迹。
- 检查同时关注行为。 速度、路径和时序都可能被检查。位置正确但操作方式像机器人的结果,仍然可能被拒绝。
因此,GeeTest 求解是一个多步骤的工作:获取挑战、在图像中定位目标、生成移动轨迹、提交并读取判定结果。每一步都可能失败,而且如果步骤之间等待太久,挑战就会过期。
通用做法
自动化 GeeTest 页面的人一般会采用以下三种方法之一。它们都不是捷径,各自都有代价:
- 驱动真实浏览器。 Playwright 或 Selenium 加载页面,由你的脚本移动滑块。这种方式在你自己控制的网站或获准使用的测试环境中效果最好。浏览器是真实的,但移动轨迹仍需看起来自然。
- 图像匹配。 你的代码下载拼图背景图,通过模板匹配(例如使用 OpenCV)找到缺口,并计算拖动距离。这往往是自行搭建方案中最可靠的部分,但当服务商更改图片布局时就会失效。
- 人工介入或求解服务。 由人或托管服务完成挑战并返回结果。Scarnox 计划为 GeeTest 提供这一选项,但目前尚未上线。
无论选择哪种方法,都要保持范围清晰:只自动化你拥有的流程、你获准使用的测试环境,或你获准收集的公开数据。
查找验证码 ID
开始工作时不需要代码。打开开发者工具,重新加载页面,并在 Network 面板中搜索 geetest 或 gt。加载组件的第一个请求通常会显示验证码 ID。一个小脚本可以记录它,当你想注意到页面何时更改了组件时,这很有用:
import re
import requests
html = requests.get("https://example.com/login", timeout=30).text
match = re.search(r"gt['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", html)
print("captcha id:", match.group(1) if match else "not found")
上面的模式会在 gt 附近查找一个 32 位的十六进制值。服务商会更改其标记,因此请把它当作起点,并将输出与你正在测试的页面进行核对。
Scarnox 的支持现状
规划项目时,请对此保持清醒的认识:
- 目前可用: 无代理及使用自有代理的 PopularCaptcha。
- 即将推出: GeeTest、reCAPTCHA v2 和 v3、Cloudflare Turnstile、AWS WAF 以及 Arkose。在 GeeTest 求解被列为可用之前,不要构建依赖它的生产流程。
如果你的项目现在就需要 GeeTest,实际可行的路线是:针对你获准测试的页面,自行搭建浏览器和图像步骤;同时让代码做好准备,待 API 支持上线后切换过去。与此同时,你可以注册账户,获取免费试用额度,无需信用卡。这样你就有了一个可以测试的 PopularCaptcha 流程,并为之后接入 GeeTest 留出了位置。当前费率请查看当前定价。
合法的用途
- 测试你自己的登录或结账流程,尤其是当验证码阻碍了自动化回归测试时。
- 无障碍检查,确认无法完成视觉谜题的访客仍然有其他途径完成表单。
- 监控你获准关注的网站,例如在部署之后检查组件是否仍能正常加载。
不要利用验证码自动化来注册虚假账户、攻击登录表单或抢购限量商品。这些行为违反大多数网站的规则,也不是 Scarnox 支持的用途。