reCAPTCHA 3 如何知道我正在使用 Selenium/chromedriver?
Posted
技术标签:
【中文标题】reCAPTCHA 3 如何知道我正在使用 Selenium/chromedriver?【英文标题】:How does reCAPTCHA 3 know I'm using Selenium/chromedriver? 【发布时间】:2019-08-25 08:36:20 【问题描述】:我很好奇 reCAPTCHA v3 的工作原理。特别是浏览器指纹。
当我通过 Selenium/chromedriver 启动 Chrome 实例并针对 reCAPTCHA 3 (https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php) 进行测试时,我在使用 Selenium/chromedriver 时总是得到 0.1 分。
当对普通实例使用隐身模式时,我得到 0.3。
我通过注入 javascript 和修改 web 驱动程序对象、从源代码重新编译 webdriver 和修改 $cdc_
变量来击败其他检测系统。
我可以看到看起来像一些混淆的POST 返回服务器,所以我要开始在那里挖掘。
它可能会寻找什么来确定我是否正在运行 Selenium/chromedriver?
【问题讨论】:
这个问题网上经常有人问... 虽然这可能是一个有趣的问题,但它不是编程问题,也不适合 SO。 对我来说,reCaptcha v3 不会将 Selenium (Firefox IDE) 检测为机器人并返回0.9
的分数。
【参考方案1】:
重新验证码
网站可以轻松检测网络流量并将您的程序识别为BOT。 Google 已经发布了 5(5) reCAPTCHA 在创建新网站时可供选择。其中四个处于活动状态并且 reCAPTCHA v1 正在关闭。
reCAPTCHA 版本和类型
reCAPTCHA v3(使用分数验证请求):reCAPTCHA v3 允许您在没有任何用户交互的情况下验证交互是否合法。它是一个返回分数的纯 JavaScript API,让您能够在您的网站上下文中采取行动:例如需要额外的身份验证因素、发送帖子进行审核或限制可能正在抓取内容的机器人。 reCAPTCHA v2 - “我不是机器人”复选框:“我不是机器人”复选框要求用户点击一个复选框,表明用户不是机器人机器人。这将立即通过用户(没有验证码)或挑战他们以验证他们是否是人类。这是最简单的集成选项,只需要两行 html 即可呈现复选框。 reCAPTCHA v2 - 不可见的 reCAPTCHA 徽章:不可见的 reCAPTCHA 徽章不需要用户单击复选框,而是在用户单击现有按钮时直接调用您的站点,或者可以通过 JavaScript API 调用来调用。当 reCAPTCHA 验证完成时,集成需要 JavaScript 回调。默认情况下,只会提示最可疑的流量来解决验证码。要更改此行为,请在高级设置下编辑您的网站安全首选项。 reCAPTCHA v2 - android:reCAPTCHA Android 库是 Google Play 服务 SafetyNet API 的一部分。这个库提供了可以直接集成到应用程序中的原生 Android API。在调用 reCAPTCHA API 之前,您应该在您的应用中设置 Google Play 服务并连接到 GoogleApiClient。这将立即让用户通过(没有验证码提示)或挑战他们以验证他们是否是人类。 reCAPTCHA v1:reCAPTCHA v1 自 2018 年 3 月起已关闭。解决方案
但是,有一些通用方法可以避免在网络抓取时被检测到:
网站可以确定您的脚本/程序的首要属性是您的显示器大小。所以建议不要使用常规的Viewport。 如果您需要向网站发送多个请求,请继续更改每个请求的用户代理。在这里你可以找到关于Way to change Google Chrome user agent in Selenium?的详细讨论 要模拟 类人 行为,您可能需要减慢脚本执行速度,甚至超过 WebDriverWait 和 expected_conditions 诱导time.sleep(secs)
。在这里你可以找到关于How to sleep webdriver in python for milliseconds的详细讨论
结尾
一些思考的食物:
Selenium webdriver: Modifying navigator.webdriver flag to prevent selenium detection Unable to use Selenium to automate Chase site login Confidence Score of the request using reCAPTCHA v3 API【讨论】:
【参考方案2】:Selenium 和Puppeteer 具有一些不同于非自动浏览器的浏览器配置。此外,由于一些 JavaScript 函数被注入到浏览器中来操作元素,因此您需要创建一些覆盖以避免检测。
有一些很好的文章解释了有关 Selenium 和 Puppeteer 检测的一些要点,而它在具有检测机制的站点上运行时:
Detecting Chrome headless, new techniques - 您可以使用它为您的机器人编写防御性代码。
不可能detect and block Google Chrome headless - 它以清晰而合理的方式解释了 JavaScript 代码可以检测到由自动化软件启动的浏览器和真实浏览器之间的差异,以及如何检测假的。
GitHub - headless-cat-n-mouse - 使用 Puppeteer + Python 避免检测的示例
【讨论】:
以上是关于reCAPTCHA 3 如何知道我正在使用 Selenium/chromedriver?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Selenium python中使用reCaptcha2解决服务
密钥如何与 reCAPTCHA v3 Enterprise 配合使用?