验证码类型详解,以及求解器能处理哪些类型
验证码主要有几种类型。有些要求访客读取或选择某些内容,有些在后台运行检查,还有些将组件与服务端校验结合起来。验证码的类型决定了脚本如何越过它,而求解器支持哪种类型,则决定了你能否使用它。本指南列出主要类型,解释每一种的工作方式,并说明 Scarnox 当前的支持状态。
简而言之:目前 Scarnox 只有一种实时任务类型,即无代理的 PopularCaptcha。其他类型即将推出,下文会说明具体是哪些。
支持状态一览
| 验证码类型 | 工作方式 | Scarnox 状态 |
|---|---|---|
| PopularCaptcha 组件 | 将 token 写入 h-captcha-response 的组件 | 已上线(无代理) |
| 文字和图片挑战 | 识别或选出字符与物体 | 不是实时任务类型 |
| 语音挑战 | 转写一段语音片段 | 不是实时任务类型 |
| Google reCAPTCHA v2 | 复选框,被标记时出现图片挑战 | 即将推出 |
| Google reCAPTCHA v3 | 根据行为打分,无挑战 | 即将推出 |
| Cloudflare Turnstile | 非交互式的浏览器检查 | 即将推出 |
| Arkose Labs(FunCaptcha) | 游戏式的强制验证挑战 | 即将推出 |
| GeeTest | 滑块与形状谜题 | 即将推出 |
| AWS WAF 验证码 | 来自 AWS WAF 的谜题挑战 | 即将推出 |
在针对任何类型进行开发之前,请查阅验证码求解 API 指南和 API 参考文档。本表反映的是撰写本文时的状态。
文字验证码
文字验证码会显示扭曲的字符,要求访客输入。扭曲的目的是让简单的光学字符识别失效。这是最古老的一类,在大型网站上现在已相当少见,但在小型表单和老旧系统中仍然能够见到。
图片验证码
图片验证码要求访客选出所有包含某种物体的图块,例如红绿灯、人行横道或商店门面。这种挑战本质上是分类任务,较复杂的版本还可能要求多轮选择。爬虫和自动化工具在访问高流量网站时经常会遇到它们。图片与文字验证码 OCR 指南介绍了其中的识别部分。
语音验证码
语音验证码会播放一段口述的数字或单词序列,通常作为一种无障碍选项。声音中混有噪声使其变得难以辨认。它们主要是为无法看清视觉挑战的用户而设的替代方案,这也是为什么应当与无障碍替代方案一同提供,而不是被自动化绕过。
谜题验证码
谜题验证码要求类似实物操作的动作:把一块拼图滑入缺口、把图片旋转到正立,或拖动某个形状。滑块谜题很常见,而 GeeTest 是这类谜题的知名服务商。答案取决于位置或角度,而挑战通常还会检查拖动的方式,而不仅仅是最终停在哪里。
无感与基于评分的验证码
有些验证码在没有可见挑战的情况下运行。浏览器在后台完成检查,网站根据结果决定是否显示挑战。这就是人们所说的“无感验证码”。reCAPTCHA v3 更进一步,它返回的是一个分数,而不是通过或不通过。无感验证码指南解释了无感模式如何影响求解器的集成,reCAPTCHA v3 评分指南则详细介绍了评分机制。
Token 组件
token 组件是页面中的一个组件,它完成自身的检查后,会把一个 token 写入一个隐藏的表单字段。网站再把该 token 发送给服务商,或发送给自己的后端进行校验。PopularCaptcha、reCAPTCHA v2 和 Cloudflare Turnstile 都采用这种模式。
这是求解器无需接触可视挑战就能处理的类型。求解器生成 token,你的代码把它写入表单。这也是为什么 PopularCaptcha 的集成只需要几行代码。使用 Python 求解验证码指南展示了具体流程。
强制验证挑战
一些大型网站使用强制验证挑战,将风险评分与游戏式谜题结合起来。Arkose Labs(常被称为 FunCaptcha)是最知名的例子。谜题经常变化,风险引擎也因网站而异,因此很难用通用方法应对。
类型为什么对你的代码很重要
每种类型都需要不同的求解器:
- 内容挑战需要能够读取或分类屏幕内容的模型。
- 谜题挑战需要能够估计位置或角度的模型,外加逼真的拖动操作。
- Token 组件需要能够为服务商生成有效响应的求解器。
如果一个求解器声称能够处理“所有验证码”,就值得打个问号。请询问它实时支持哪些类型,以及对于不支持的类型它会怎么做。
遇到不支持的类型时怎么办
如果你需要的验证码不在实时支持列表中,实际可行的选择有三种:
- 减少触发它的频率,参考如何避免爬虫遇到验证码中的方法。
- 如果该验证码保护的是你自己的系统,使用测试密钥或预发布环境。
- 向网站所有者申请 API、白名单或无障碍替代方案。
即将推出的类型仍在开发中。注册账户,即可获得免费试用额度,无需信用卡,届时你就能在类型上线时立即使用。