reCAPTCHA 3如何知道我在使用Selenium/chromedriver?

46

我想知道 reCAPTCHA v3 是如何工作的,特别是浏览器指纹技术。

当我通过Selenium/chromedriver启动Chrome并测试reCAPTCHA 3 (https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php)时,使用Selenium/chromedriver始终得到0.1的分数。

而在隐身模式下使用普通实例时,我得到了0.3的分数。

我曾通过注入JavaScript并修改Webdriver对象,重新编译来自源代码的Webdriver并修改 $cdc_ 变量,打败过其他检测系统。

我可以看到一些类似于混淆的POST回服务器,所以我将从这里开始挖掘。

它可能会查找什么来确定我是否正在运行Selenium/chromedriver?


这个问题在互联网上经常被问到... - Lukas
2
虽然这可能是一个有趣的问题,但它不是一个编程问题,也不适合在SO上讨论。 - JeffC
2
对我来说,reCaptcha v3无法检测到Selenium(Firefox IDE)作为机器人,并返回得分为0.9 - Krisztián Balla
2个回答

52

reCaptcha

网站可以轻松检测到网络流量并将您的程序识别为BOT。谷歌已经发布了五个reCAPTCHA版本供创建新网站时选择使用。其中四个版本处于活跃状态,而reCAPTCHA v1已经被停用。


reCAPTCHA 版本和类型

  • reCAPTCHA v3(使用分数验证请求):reCAPTCHA v3允许您在没有任何用户交互的情况下验证交互是否合法。这是一个纯JavaScript API,返回一个分数,使您能够在您的站点上采取行动:例如要求额外的身份验证因素、发送文章进行审核或限制可能正在搜索内容的机器人。
  • reCAPTCHA v2 - "我不是机器人"复选框: "我不是机器人" 复选框要求用户点击一个复选框表示用户不是机器人。这将立即通过用户(无需验证码)或者要求他们验证是否为人类。这是最简单的集成选项,只需要两行HTML代码来呈现复选框。

newCaptchaAnchor

  • reCAPTCHA v2 - 不可见 reCAPTCHA 标记:不可见的 reCAPTCHA 标记不需要用户点击复选框,而是在用户单击站点上现有按钮或通过 JavaScript API 调用时直接引用。集成需要在 reCAPTCHA 验证完成时进行 JavaScript 回调。默认情况下,只有最可疑的流量才会提示解决验证码。要更改此行为,请在高级设置下编辑站点安全性偏好。

reCaptcha_invisible_badge

  • reCAPTCHA v2 - Android:reCAPTCHA Android 库是 Google Play 服务 SafetyNet API 的一部分。该库提供了原生 Android API,您可以将其直接集成到应用程序中。在调用 reCAPTCHA API 之前,您应在应用程序中设置 Google Play 服务并连接到 GoogleApiClient。这将立即使用户通过(无需 CAPTCHA 提示)或者挑战他们验证是否为人类。
  • reCAPTCHA v1:自 2018 年 3 月以来已关闭 reCAPTCHA v1。

解决方案

然而,有一些通用方法可以在 Web 抓取时避免被检测:

  • 网站可以通过您的显示器尺寸来确定您所使用的脚本/程序,因此建议不要使用传统的Viewport
  • 如果您需要向网站发送多个请求,请在每个请求中更改用户代理。您可以在这里找到有关更改Selenium中Google Chrome用户代理的详细讨论。
  • 为了模拟类似于人的行为,您可能需要减慢脚本执行速度,甚至超出WebDriverWaitexpected_conditions,引入time.sleep(secs)。您可以在这里找到有关在Python中使Webdriver休眠毫秒的详细讨论。

尾声

思考一下:


更改用户代理使hcaptcha无法解决,它们返回403,有任何新的解决方案吗? - Nguyen Hoà
第一个解决方案 - 改变窗口大小? - Smart Manoj
这个回答解答了“I'm curious how reCAPTCHA v3 works”这个问题吗? - dovid

10

Selenium和Puppeteer的浏览器配置与非自动化浏览器不同。此外,由于某些JavaScript函数被注入到浏览器中以操纵元素,因此需要创建一些覆盖来避免检测。

有一些很好的文章解释了在带有检测机制的站点上运行Selenium和Puppeteer时的一些问题:

检测Chrome headless,新技术 - 您可以使用它来编写防御您的机器人的代码。

无法检测和阻止Google Chrome headless - 它以清晰而明确的方式解释了JavaScript代码可以检测到自动软件启动的浏览器与真实浏览器之间的差异,以及如何欺骗它。

GitHub - headless-cat-n-mouse - 使用Puppeteer + Python的示例以避免检测。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接