如何让chromedriver无法被检测到

问题描述 投票:0回答:3

这是我的第一个 Stack Overflow 问题,所以请耐心等待。

我已经读过this所以问题,这让我想知道,是否有可能使 chromedriver 完全无法检测到?

出于我自己的好奇心,我测试了所描述的方法,发现创建完全匿名的浏览器并不成功。

我阅读了驱动程序的文档并发现了这一点:

partial interface Navigator {
       readonly attribute boolean webdriver;
    };

Navigator 接口的 webdriver IDL 属性必须返回 webdriver-active 标志的值,该标志最初为 false。

此属性允许网站确定用户代理受 WebDriver 控制,并可用于帮助减轻拒绝服务攻击。

但是,我什至无法通过浏览器控制台或源代码找到这些标签的位置。

我想这个是负责chromedriver的检测的,然而,梳理源码后,我找不到这个接口。因此,这让我想知道当前的 chromedriver 中是否包含此功能。如果没有,我仍然知道当前的 chromedriver 可以被网站和其他服务(例如 distill)检测到。

java selenium selenium-chromedriver
3个回答
34
投票

为了使用 ChromeDriver 无法检测到 Distil 检查点(在这篇 stackoverflow 帖子 中有很好的描述),您需要确保您的浏览器的窗口或文档原型中不包含任何表明您正在使用 Webdriver 的变量,就像你提到的那样。

只要采取一些预防措施并对二进制文件进行一些修复,您就可以将 Selenium 等软件与 ChromeDriver 和 Chrome 一起使用。此方法仅适用于有头版本,如果您希望使用无头版本,则需要采取额外的测量来通过窗口/渲染测试,此处描述


1。修复 Chrome 二进制文件,或使用旧版本

首先,让我们处理

navigator.webdriver
设置为 True 的情况。这 由 W3C 协议here定义为 浏览器的“NavigatorAutomationInformation”,它扩展了 Navigator 界面。如何去除它?该项目有很多文件、第三方内容、blink web 运行时等。因此,不要疯狂地试图弄清楚它是如何工作的,因为 Chromium 是开源的,只需聪明一点并在 google 中搜索包含其中的提交即可那。 这是链接。注意这些文件:

  • third_party/WebKit/Source/core/frame/Navigator.h
    ,其中包含代码行:

     `bool webdriver() const { return true; }` 
    
    This method is supossed to always return true, as you can see.
    
  • third_party/WebKit/Source/core/frame/Navigator.idl
    ,其中包含导航器的扩展,包括我们的

    `Navigator implements NavigatorAutomationInformation;` 
    
    which is being commited. Interesting, isn't it?
    
  • third_party/WebKit/Source/core/frame/NavigatorAutomationInformation.idl
    包含扩展本身,带有一个只读变量,即
    webdriver
    :

         `[
             NoInterfaceObject, // Always used on target of 'implements'
             Exposed=(Window),
             RuntimeEnabled=AutomationControlled
         ] interface NavigatorAutomationInformation {
             readonly attribute boolean webdriver;
         };`
    

要摆脱此功能,只需注释

Navigator.idl
中使用此功能扩展
Navigator
的行,并编译源代码(在 linux 中编译)就足够了。然而,对于几乎所有计算机来说,这都是一项艰巨的任务,可能需要几个小时。如果您查看提交日期,会发现它是在 2017 年 10 月,因此可以选择下载 该日期之前发布的任何版本的 Chrome。要搜索镜子,您可以谷歌搜索inurl:/deb/pool/main/g/google-chrome-stable/


2。修复 ChromeDriver

Distil 根据窗口变量检查正则表达式规则“/\$[a-z]dc_/”,ChromeDriver 添加一个如

here提到的满足该条件的规则。正如他们提到的,您必须在源代码中编辑call_function.js

,并重新定义变量
var key = '$cdc_asdjflasutopfhvcZLmcfl_';
。与其他东西。另外,可能更容易,您可以使用十六进制编辑器来更新现有的二进制文件。

如果您决定使用旧版本的 Chrome(我猜您就是这么做的),您将需要使用适当版本的 ChromeDriver。您可以在

ChromeDriver下载网页中了解哪一个适合您的Chrome版本。例如,对于 Chrome v61(满足您的需求),您可以使用 ChromeDriver 2.34。完成后,只需将 ChromeDriver 二进制文件放在“/usr/bin/local”上即可。


3.采取其他预防措施


2
投票
您不能使用 Selenium 的 WebDriver 本身来更改 UserAgent,这听起来像是您真正想要在这里做的事情。

但是,这并不意味着它不能改变。

进入PhantomJS。

查看

这个答案。您可以使用它来将 Selenium 伪装成不同的浏览器,或者几乎任何其他浏览器。当然,如果一个网站决心找出你的踪迹,Selenium 会留下很多线索(比如完美精确的点击)。


0
投票
您将需要修改用户代理、窗口大小和 Chrome 选项。此外,您可以使用

Botasaurus 等库,它可以成功绕过 https://nowsecure.nl/ 等网站的机器人检测。

© www.soinside.com 2019 - 2024. All rights reserved.