如何让chromedriver无法察觉

bry*_*yce 9 java selenium selenium-chromedriver

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

我已经阅读了这个问题,这让我想知道,是否有可能让chromedriver完全无法察觉?

为了我自己的好奇心,我测试了所描述的方法,发现创建一个完全匿名的浏览器是不成功的.

我仔细阅读了驱动程序的文档并发现了:

partial interface Navigator { readonly attribute boolean webdriver; };

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

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

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

我想这将负责检测chromedriver,但是,在梳理完源代码后,我找不到这个界面.结果,它让我想知道这个特征是否包含在当前的chromedriver中.如果没有,我仍然知道当前的chromedriver可以被网站和其他服务如蒸馏检测到.

fre*_*oul 19

为了使用ChromeDriver不可检测到Distil检查点(在此stackoverflow帖子中很好地描述),您需要确保您的浏览器在其窗口中没有任何变量或文档原型显示您正在使用webdriver,因为你提到的一个.

只要您采取一些预防措施并对二进制文件进行一些修复,您就可以将软件用作Selenium以及ChromeDriver和Chrome.此方法仅适用于标题版本,如果您希望使用无头版本,则需要进行其他测量以传递窗口/渲染测试,如此处所述.


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

首先,让我们处理该navigator.webdriver设置为True.这是通过W3C协议定义在这里作为浏览器的"NavigatorAutomationInformation",它扩展了导航接口的一部分.如何删除它?该项目有很多文件,第三方的东西,闪烁的网络运行时等.所以,而不是变得疯狂试图弄清楚它是如何工作的,因为Chromium是开源的,只是聪明并搜索谷歌的提交,其中包含那.这是链接.注意这些文件:

  • 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.
    
    Run Code Online (Sandbox Code Playgroud)
  • third_party/WebKit/Source/core/frame/Navigator.idl,其中包含Navigators的扩展,包括我们的

    `Navigator implements NavigatorAutomationInformation;` 
    
    which is being commited. Interesting, isn't it?
    
    Run Code Online (Sandbox Code Playgroud)
  • 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;
         };`
    
    Run Code Online (Sandbox Code Playgroud)

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


2.修复ChromeDriver

提炼检查正则表达式规则"/\$ [AZ] DC_ /"对窗口变量,并ChromeDriver增加提到一个在这里满足这一条件.正如他们所提到的,您必须call_function.js在源代码中进行编辑,并重新定义变量var key = '$cdc_asdjflasutopfhvcZLmcfl_';.用别的东西.此外,可能更容易,您可以使用十六进制编辑器来更新现有的二进制文件.

如果您决定使用较旧版本的Chrome,我猜您也是如此 - 您需要使用适当版本的ChromeDriver.您可以在ChromeDriver下载网页中了解哪个适合您的Chrome版本.例如,对于Chrome v61(符合您的需求),您可以使用ChromeDriver 2.34.完成后,只需将ChromeDriver二进制文件放在'/ usr/bin/local'上即可.


3.采取其他预防措施

  • 注意你的用户代理.
  • 不要执行太多重复请求.
  • 在请求之间使用(随机)延迟.
  • 使用此处使用的Chrome参数来模仿普通用户个人资料.


for*_*nsa 2

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

然而,这并不意味着它不能改变。

输入 PhantomJS。

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