如何避免CAPTCHA验证码和reCAPTCHA
如果您是网络抓取开发人员,您就会知道遇到验证码时的挫败感。它们的故障率低于 10%,并且每年都在发展,成为最可靠的反机器人措施之一。
在本文中,您将学习七种行之有效的方法来避免在网络抓取时避免 CAPTCHA 和 reCAPTCHA:
本指南还将涵盖基础知识,例如 CAPTCHA 类型及其工作原理,以便您更好地了解技术以避开它们。
什么是验证码?
CAPTCHA(完全自动区分计算机和人类的公共图灵测试)是您在加载请求的页面之前必须解决的中断,并以不同形式的挑战出现。网站使用它们通过测试最终用户的准确性来确定您是实际用户还是机器人,并且它们通常具有时间敏感性元素,例如时间到期。
一个重要的考虑因素是测试不应损害用户体验。这就是为什么他们不使用复杂的生物识别技术和面部识别技术进行验证的原因。
验证码的类型
您将遇到的障碍类型如下所述。
文本验证码
3D 验证码
这项新技术是文本挑战的演变,使用了计算机更难识别的 3D 字符。
数学挑战
图片验证码
隐形和被动验证码
这些更难识别,因为它们隐藏在代码中。
在不可见测试的情况下,想象一个表单,在该表单中单击提交按钮将运行 JavaScript 挑战,以验证您的浏览器是否像人类使用的常规浏览器一样运行。
对于被动验证码,它们是基于时间的检查。例如,如果一个人打字需要超过两秒,而你只用了 0.1 秒,那就很可疑了。
这两种方法的组合是可能的并且经常被使用。
验证码如何工作?
为避免 CAPTCHA 和 reCAPTCHA,您需要了解何时可能会提示质询。有以下三种情况:
- 短时间内来自同一用户的流量异常激增。
- 可疑的交互,例如在不滚动的情况下访问许多页面。
- 随机因为一些具有高安全措施的防火墙检查以防万一。
抓取时如何避免 CAPTCHA 和 reCAPTCHA?
网络抓取工具使用各种方法来避免验证码,以下是经过最充分验证的七种方法:
1.避免隐藏的陷阱
蜜罐陷阱是对真实用户隐藏但对机器人出现的链接。因此,如果您单击它们,您将被标记为刮板。
它们通常具有display: none
或 之类的属性visibility: hidden
,表单也可以这样做。为了远离问题,跳过隐藏的元素以避免蜜罐陷阱。
2.使用真正的标题
您的请求标头包含有关您的客户端的特征信息,因此它们可以用作网络抓取工具的指示器。
流行的无头浏览器,例如 Selenium 和 Puppeteer,具有独特的User-Agent 标头,您应该将其替换为人类使用的真实标头。
3.旋转标题
太多具有相同 HTTP 标头的请求是可疑的,不是吗?真正的用户不会在五分钟内访问 1,000 个页面。
因此,您应该旋转标题以避免引起注意。从网站的角度来看,你们似乎是不同的用户。
4.使用旋转代理
使用真正的标头并轮换它们是不够的,因为网站可以通过分析源 IP 地址来检测网络抓取工具。因此,如果您在不更改 IP 地址的情况下轮换标头集,它也会看起来很可疑。
您需要做的是同时轮换标头和您的 IP 地址,最好是住宅地址。幸运的是,您可以查看我们关于如何在 Python 中轮换代理的分步指南。
5. 实现无头浏览器
浏览器自动化工具,例如 Selenium 和 Puppeteer,有助于避免验证码,因为它们模拟了与网站的类人交互。在网络抓取中,它们以无头模式使用,它删除了图形界面并节省了资源。
6.禁用自动化指标
大多数基于浏览器的工具都有特定的指示器和 WebDriver 标志,可以表明您是机器人。例如,Selenium 和 Puppeteer 的标志默认navigator.webdriver
设置为 。true
无头浏览器的插件,例如 Puppeteer-stealth,实现了许多技术来擦除这些痕迹。查看我们关于使用 Puppeteer 避免检测的教程,了解它们是如何实现的。
7. 让你的爬虫看起来像一个真正的用户
模仿人类行为和避免模式对于避免被发现很重要。网站跟踪用户导航、悬停元素,甚至点击坐标来分析用户行为。
您可以实施的行动包括:
- 随机化动作,例如滚动。
- 点击。
- 打字
- 在操作之间使用随机时间间隔。
通过遵循这些行为模式,网络抓取工具可以避开验证码和其他形式的网站保护。
要了解更多信息,请查看我们的防刮技术指南。
结论
我们已经了解了如何在网络抓取时避免使用 CAPTCHA 和 reCAPTCHA。例如,您应该通过跳过隐藏链接来避免蜜罐陷阱,还应结合您的 IP 轮换真实的 HTTP 标头,并实施无头浏览器以通过随机操作模仿人类行为。