Recaptcha 3如何知道我正在使用硒/ chromedriver?

时间:2019-04-03 18:03:07

标签: selenium web-scraping selenium-chromedriver recaptcha recaptcha-v3

我很好奇Recaptcha v3的工作方式。具体来说就是浏览器的指纹。

当我通过selenium / chromedriver启动chrome实例并针对ReCaptcha 3(https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php)进行测试时,使用selenium / chromedriver时总得到0.1分。

在正常实例中使用隐身模式时,我得到0.3。

我已经击败其他检测系统,方法是注入JS并修改Web驱动程序对象,然后从源代码重新编译WebDriver并修改$ cdc_变量。

我可以看到看起来有些混乱的POST返回服务器,所以我将开始在那里进行挖掘。

我只想检查是否有人愿意与他们分享任何建议或经验,以决定我是否正在运行硒/ chromedriver?

2 个答案:

答案 0 :(得分:2)

reCaptcha

网站可以轻松检测网络流量并将您的程序标识为 BOT Google 已经发布了 5(五) reCAPTCHA,供您在创建新网站时选择。其中四个处于活动状态,而 reCAPTCHA v1 正在关闭。


reCAPTCHA版本和类型

  • reCAPTCHA v3 (使用分数验证请求):reCAPTCHA v3允许您在没有任何用户交互的情况下验证交互是否合法。它是一个纯JavaScript API,可返回分数,使您能够在网站的上下文中采取措施:例如,需要其他身份验证因素,发送帖子以进行审核或限制可能抓取内容的机器人。
  • reCAPTCHA v2 -“我不是机器人”复选框:“我不是机器人”复选框要求用户单击一个指示用户的复选框不是机器人。这将立即使用户(没有CAPTCHA)通过,或者要求他们验证他们是否是人类。这是最简单的选项,只需两行HTML即可呈现该复选框。

newCaptchaAnchor

  • reCAPTCHA v2 -不可见的reCAPTCHA徽章:不可见的reCAPTCHA徽章不需要用户单击复选框,而是在用户单击网站上现有的按钮,也可以通过JavaScript API调用来调用。 reCAPTCHA验证完成后,集成需要JavaScript回调。默认情况下,将仅提示最可疑的流量来解决验证码。要更改此行为,请在高级设置下编辑您的站点安全首选项。

reCaptcha_invisible_badge

  • reCAPTCHA v2 - Android :reCAPTCHA Android库是Google Play服务SafetyNet API的一部分。该库提供了本机Android API,您可以将它们直接集成到应用程序中。您应该在应用程序中设置Google Play服务并连接到GoogleApiClient,然后再调用reCAPTCHA API。这将立即使用户通过(没有CAPTCHA提示),或者要求用户验证他们是否是人类。
  • reCAPTCHA v1 :reCAPTCHA v1自2018年3月以来已关闭。

解决方案

但是,有一些通用方法可以避免在抓取网页时被检测到


Outro

一些值得深思的地方:

答案 1 :(得分:2)

Selenium和Puppeteer具有一些与非自动化浏览器不同的浏览器配置。另外,由于一些JS函数已注入浏览器以操纵元素,因此您需要创建一些替代来避免检测。

有一些很好的文章解释了硒和木偶检测器在具有检测机制的站点上运行时的检测要点:

Detecting Chrome headless, new techniques-您可以使用它在机器人上编写防御性代码

It is not possible to detect and block chrome headless-用清晰,合理的方式说明JS代码可以检测到由自动软件启动的浏览器和实际的浏览器之间的差异,以及如何伪造它。

Github - headless-cat-n-mouse-使用puppeteer + python避免检测的示例