这是 reCAPTCHA(版本 2,请查看演示在这里 https://recaptcha-demo.appspot.com/),向您显示该信息是因为页面所有者不希望您自动抓取该页面。
您的选择如下:
选项1:停止抓取或尝试使用官方API
由于页面所有者不希望您抓取该页面,因此您可以简单地尊重该决定并停止抓取。也许有您可以使用的已记录的 API。
选项 2:自动化/外包验证码解决
整个行业都有人(通常在发展中国家)为其他人的机器人填写验证码。我不会链接到任何特定网站,但您可以查看其他答案阿布·塔赫尔博士 https://stackoverflow.com/a/55498953有关该主题的更多信息或搜索验证码解算器.
选项 3:自行解决验证码
为此,让我解释一下 reCAPTCHA 的工作原理以及当您使用它访问页面时会发生什么。
reCAPTCHA (v2) 的工作原理
每个页面都有一个ID,可以通过查看源代码来查看,例如:
<div class="g-recaptcha form-field" data-sitekey="ID_OF_THE_WEBSITE_LONG_RANDOM_STRING"></div>
当 reCAPTCHA 代码加载时,它会添加一个responsetextarea 到没有值的表单。它看起来像这样:
<textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="... display: none;"></textarea>
解决挑战后,提交表单时,reCAPTCHA 会向此文本字段添加一个非常长的字符串(稍后可以由后端的服务器/reCAPTCHA 服务检查)。
如何自己解决验证码
通过复制的值textarea
字段中,您可以将“已解决的挑战”从一个浏览器转移到另一个浏览器(这也是解决服务为您提供的服务)。完整的流程如下所示:
- 检测页面是否使用 reCAPTCHA(例如检查
.g-recaptcha
)在“爬行”浏览器中
- 使用相同的 URL 以非无头模式打开第二个浏览器
- 自己解决验证码
- 从以下位置读取值:
document.querySelector('#g-recaptcha-response').value
- 将该值放入第一个浏览器中:
document.querySelector('#g-recaptcha-response').value = '...'
- 提交表格
更多信息/阅读
谷歌没有提供太多 reCAPTCHA 到底如何工作的公开信息,因为这是机器人创建者和谷歌检测算法之间的猫鼠游戏,但网上有一些资源提供了更多信息:
-
来自 Google 的官方文档 https://developers.google.com/recaptcha/docs/display:显然,他们只是解释了基础知识,而不是“在后面”如何工作
-
内部验证码 https://github.com/neuroradiology/InsideReCaptcha:这是 2014 年的一个项目,试图对 reCAPTCHA 进行“逆向工程”。尽管这已经很老了,但页面上仍然有很多有用的信息。
-
stackoverflow上的另一个问题 https://stackoverflow.com/q/27286232/5627599:这个问题包含一些有关 reCAPTCHA 的有用信息,但也包含许多关于如何欺骗 reCAPTCHA 的推测性(并且很可能)过时的方法。