如何让chromedriver无法察觉

时间:2017-02-10 22:11:44

标签: java selenium selenium-chromedriver

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

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

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

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

  

partial interface Navigator { readonly attribute boolean webdriver; };

     

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

     

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

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

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

2 个答案:

答案 0 :(得分:15)

为了使用无法检测到要检查点的ChromeDriver(在本stackoverflow post中对此进行了很好的描述),您需要确保浏览器的窗口或文档原型中不包含任何变量以表明您就像您提到的那样使用网络驱动程序。

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


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

首先,让我们处理一下将navigator.webdriver设置为True的情况。这个     由W3C协议here定义为     浏览器的“ NavigatorAutomationInformation”,扩展了Navigator     接口。如何删除?该项目包含许多文件,第三方内容,闪烁的Web运行时等。因此,不要生气,因为Chromium是开源的,试图弄清楚它是如何工作的,只要聪明一点,然后在Google上搜索包含的提交即可那。 Here is the link。请注意以下文件:

  • 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(包含Navigators的扩展名)包括

    `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的行并编译源代码(compiling in linux here)。但是,对于几乎所有计算机而言,这都是一项艰巨的任务,并且可能需要几个小时。如果您查看提交日期,则该日期为 2017年10月,因此可以选择下载该日期之前发布的任何版本的Chrome 。要搜索镜子,可以在Google上搜索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 downloads webpage中知道哪种版本适合您的Chrome版本。例如,对于适合您需要的Chrome v61,可以使用ChromeDriver 2.34。完成后,只需将ChromeDriver二进制文件放在“ / usr / bin / local”上即可。


3。采取其他预防措施

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

答案 1 :(得分:0)

你不能使用Selenium的WebDriver本身来改变UserAgent,这听起来就像你真正想要做的那样。

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

输入PhantomJS。

结帐this answer。您可以使用它将Selenium伪装成不同的浏览器,或者其他任何东西。当然,如果一个网站决定让你知道,那么Selenium留下了很多线索(比如用精确的点击点击)。