网页抓取时如何绕过 CAPTCHA
请不要再拍交通灯的照片了。
除非您正在互联网上抓取小型网站,否则您可能遇到过 CAPTCHA。这是域名保护自己的主要方式之一,因其有效性和简单实施而广受欢迎。CAPTCHA 让您的蜘蛛发出“啊?”的声音,并堵塞您的数据收集管道,比假日粪便还要糟糕。但这并不意味着您对它们无能为力。
本文将教您如何绕过 CAPTCHA 或使用多种方法缓解它们。它包含有关 CAPTCHA 的一般信息,您可能会觉得有用,例如触发 CAPTCHA 挑战的原因或您可以期待哪些挑战。如果这些内容与您无关,请随意跳到相关部分。
什么是验证码?
CAPTCHA 的全称是“完全自动化公共图灵测试,用于区分计算机和人类” 。如果你不知道图灵测试是什么意思,其实这个缩写本身就解释了它的含义。它是一种测试,用来判断你正在与之交互的实体是计算机还是人类。换句话说,它可以判断你在 Tinder 上搭讪的那个女孩究竟是真人,还是一个精心设计的聊天机器人,试图推销某个昂贵的网络摄像头网站。
CAPTCHA 的目的是什么?
验证码测试的主要目的是区分人类流量和机器人流量(没错,网络爬虫也属于机器人)。它通过向网站访问者提出各种挑战来实现这一目标。这些挑战的设计旨在让人类能够轻松解决,但对计算机来说却很难破解。验证码使网站管理员能够遏制垃圾邮件、DDoS 攻击以及网络爬虫等不受欢迎的自动化活动。
CAPTCHA 也有次要用途。最初,它们有助于数字化光学内容识别 (OCR) 技术无法破解的扫描质量不佳的文本段落。如今,我们通过标记图像中的对象为 Google 的机器学习算法提供免费劳动力。这真是一项崇高的事业。
CAPTCHA 如何工作?
验证码(CAPTCHA)作为最终验证手段,用于判断网站访问者是真人还是机器人。当网站检测到异常流量时,验证码就会出现,并向访问者提出挑战。
CAPTCHA 的具体配置取决于网站管理员:它可以保护整个网站或特定页面。有时,页面总是会出现 CAPTCHA,尤其是注册、评论表单或结帐页面。但更多时候,它需要某种触发器才能出现。
什么会触发 CAPTCHA 挑战?
导致 CAPTCHA 的主要因素有:
- 简单的 CAPTCHA 触发器。这些包括异常流量、来自单个 IP 地址的大量连接或使用低质量 数据中心 IP。例如,VPN 用户看到的 CAPTCHA 比普通网站访问者多,因为 VPN 从数据中心获取其 IP。许多员工共享 IP 地址的公司网络也是如此。
- 被动指纹识别。 评估您的网络和设备的参数集合。最重要的是 HTTP 标头、用户代理、TLS 和 TCP/IP 数据。
- 主动指纹识别。 这是一种更为复杂的技术,可以通过 JavaScript 嗅探有关硬件和软件的高级信息。它会查看 WebGL 参数、字体、插件等。
这些触发器不必涉及 CAPTCHA – 它们可以简单地阻止访问者浏览网站。当指纹识别或其他保护方法无法确凿证明访问者不是人类时,它们就会组合在一起。以下是您可以预期的组合及其频率:
| 混合型皮肤 | 频率 |
| 简单触发 + 验证码 | 最常见的 |
| 被动指纹识别 + CAPTCHA | 相当常见 |
| 主动指纹识别 + CAPTCHA | 比较少见 |
| 简单触发 + 被动 + 主动指纹识别 + CAPTCHA | 罕见 |
正如你所见,许多网站都不愿意费心实现复杂的指纹验证。这是因为这样做需要耗费大量资源,而且也可能影响用户体验。例如,Cloudflare 使用主动指纹识别来触发验证码,我相信很多人都不喜欢被“正在检查您的浏览器”的提示信息不断打断。
一旦触发 CAPTCHA,它就会向访问者提出挑战。
CAPTCHA 挑战的主要类型
CAPTCHA 挑战有很多种类型,很难在这里一一列出。相反,我们将它们分为您最有可能遇到的几个大类:
文本输入验证码
此类型显示一串扭曲的字母和数字。要通过挑战,您必须将它们重新输入到文本字段中。
图片验证码
图像挑战的一个典型示例是 reCAPTCHA 的图像网格,您必须在其中选择包含某个对象的方块。如果成功,您就可以通过;否则,您将获得另一个网格或测试失败。
图像 CAPTCHA 非常流行,您很可能最常遇到它们。基于图像的挑战有多种变体,例如定义对象的边界或按类别标记您看到的内容。
音频验证码
这些挑战会提供一段音频摘录,然后要求输入您听到的字母、单词或数字。
音频 CAPTCHA 很少单独出现。相反,它们作为其他类型挑战的后备选项,供可访问性有限的用户使用。为了增加语音识别软件的难度,音频测试有时会使声音失真。
谜题验证码
此类 CAPTCHA 包括数学问题(加法、减法和其他运算)、文字谜题、空间任务和类似的测试。
例如,一种流行的 CAPTCHA 系统 fun CAPTCHA 经常要求网站访问者滚动一个里面有 3D 模型的球。另一个 CAPTCHA 系统 Geetest 要求您移动一块拼图来完成拼图。拼图 CAPTCHA 依靠运动和类似的机制来避免机器学习模型非常擅长解决的识别任务。
按钮验证码
这种类型也称为 noCAPTCHA,因为它要求访问者点击复选框,而不是向他们提出挑战。因此,如果一切顺利,普通用户无需执行任何其他操作即可通过。如果验证失败,则会出现常规挑战(通常是图像)。
按钮 CAPTCHA 被 Google 的 reCAPTCHA 和 hCAPTCHA 广泛使用,这是互联网上最受欢迎的两个系统。它减少了解决挑战的阻力,并且在阻止机器人方面非常有效。该系统使用行为线索来监控访问者如何勾选复选框;我们将在下面的 reCAPTCHA v2 中简要介绍它们。
隐形CAPTCHAs
隐形 CAPTCHA 甚至不会给您一个复选框来勾选 — 事实上,普通人根本看不到它。它完全在后台运行,系统会监视访问者并决定是否向他们提出挑战。
隐形 CAPTCHA 是 Google 倡导的最新技术进步。其目的是让人们更加方便。然而,这种 CAPTCHA 因使用侵入性和侵犯隐私的技术来过滤机器人流量而受到批评。
社交媒体登录
社交媒体登录要求新用户使用他们的社交媒体帐户注册,然后才能查看内容或使用服务。
虽然严格意义上来说社交媒体标志并不完全是 CAPTCHA,但它也用于过滤来自机器人的人工流量。它们非常有效,因为仅仅填写虚假信息是不够的——你还需要一个虚假的社交媒体账户。因此,你突然需要处理两个网站而不是一个,而且社交平台对于自动化工具来说并不是一个容易攻克的难题。
最流行的 CAPTCHA 系统
以下是互联网上一些较为流行的 CAPTCHA 系统:
reCAPTCHA v2
Google 自己的 CAPTCHA 解决方案。它于 2013 年发布,此后取代了该公司基于文本的 reCAPTCHA v1。尽管已经有了第三个版本,但版本 2 仍然是网站管理员非常流行的工具。
reCAPTCHA v2 以“无验证码 reCAPTCHA”而闻名。这是因为它只显示一个简单的“你是机器人吗?”复选框,而不是一个验证码挑战。球鞋黄牛称这个复选框为“一键验证码”。它减少了每次都解决验证码的麻烦。
验证失败或成功的原因是什么?Google 会考虑用户的 Cookie 历史记录、鼠标移动和其他行为数据。如果这些参数缺失或不匹配,它们可能会触发 CAPTCHA 挑战。由于依赖 Cookie,v2 因向非 Chrome 用户提供更多挑战而臭名昭著。
2017 年,谷歌推出了隐形 reCAPTCHA。它的工作原理与常规 v2 类似,但您无需点击特殊框,而是可以将其绑定为在点击任何按钮时触发。
reCAPTCHA v3
验证码
亚马逊验证码
如何绕过 CAPTCHA
如果你的网络爬虫遇到验证码,首先应该尝试轮换IP 地址。这通常会很有帮助,尤其是在使用高质量代理网络的情况下。
否则,绕过 CAPTCHA 主要有两种方法:您可以尝试解决挑战,也可以完全避免它。
解决挑战
- 基于文本的挑战 可以通过机器学习来克服。您可以下载包含文本的图像,对其进行分割,然后训练神经网络来识别字母。这需要时间,但可以彻底解决问题。
- 基于图像的挑战 有几种解决方案。你可以 发现 或者训练卷积神经网络来识别图像。或者,几乎所有基于图像的验证码都为残障人士提供了无障碍模式。它允许下载音频文件并使用任何在线(免费)语音转文本 API 进行处理,而不是解决图像问题。请注意,谷歌已经加强了其主动指纹识别算法,因此您可能并不总是能获得音频选项。
避免挑战
当然,最理想的结果是完全避免使用 CAPTCHA。这比简单地暴力破解更难实现,但通常更有回报。我们建议尝试以下方法:
- 使用优质 IP 地址。 IP 识别通常是网站使用的第一道防线。通过良好且“干净”的 住宅 IP 地址,您遇到 CAPTCHA 的可能性就会降低。
- 限制您提出的请求的数量。 您不应向网站发送大量来自同一 IP 的请求。更改请求之间的时间间隔,设置自然超时。不要抓取速度过快或一整天不停歇。
- 改善你的网络爬虫的指纹。 抓取时尽量做到有机:匹配 TLS 参数、HTTP 标头、拥有真实用户代理的数据库、在不再需要 cookie 时丢弃它们。
- 模仿人类行为。 如果网站保护得特别好,您可以尝试浏览其页面、点击链接和模拟鼠标移动。您可能还想使用无头浏览器。 无头库 像 Puppeteer 一样完全呈现 JavaScript 并包含其他有用的功能来帮助伪装你的网络爬虫。
结语
现在您知道了什么是 CAPTCHA、它们的主要类型以及绕过它们的一些方法。请注意,并非所有 CAPTCHA 都是相同的 - 它们的触发条件和难度取决于网站的安全性和您的操作。请记住这一点,祝您的网页抓取顺利!