硒的webdriver:修改navigator.webdriver标志,以防止硒检测

Ajantha:

我试图使用自动化硒和铬,但不知何故,当Chrome是由硒和块每一个请求驱动的网站检测网站一个非常基本的任务。我怀疑这个网站是靠暴露DOM变量像这样的https://stackoverflow.com/a/41904453/648236检测硒驱动器。

我的问题是,有没有办法可以让navigator.webdriver标志为假?我愿意走这么远的尝试,并进行修改后重新编译硒源,但我似乎无法找到资源库中的NavigatorAutomationInformation源代码任意https://github.com/SeleniumHQ/selenium

任何帮助深表感谢

PS:我也尝试从以下https://w3c.github.io/webdriver/#interface

Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });

但它仅更新初始页面加载后的财产。我认为,在执行我的脚本之前站点检测到的变量。

DebanjanB:

一是更新1

execute_cdp_cmd() 随着可用性execute_cdp_cmd(cmd, cmd_args)命令现在您可以轻松地执行 命令使用使用此功能,您可以修改navigator.webdriver容易,以防止硒从得到检测。


预防检测 2

为了防止驱动硒webdriver的越来越检测利基办法将包括任何/所有的以下提到的步骤:

  • 旋转所述通过execute_cdp_cmd()命令如下:

    driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browserClientA"}})
    
  • 更改属性的值navigator进行的webdriver未定义

    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    
  • 排除收集enable-automation开关

    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    
  • 关掉 useAutomationExtension

    options.add_experimental_option('useAutomationExtension', False)
    

示例代码3

向上杵上方和有效码块将提到的所有步骤:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser1"}})
driver.get("https://www.google.com/")

历史

由于按照W3C编者草案目前执行严格提到:

标志被设置为当所述用户代理正在远程控制,其最初被设置为webdriver-active truefalse

进一步,

Navigator includes NavigatorAutomationInformation;

这是要注意的是:

NavigatorAutomationInformation 接口不应该暴露WorkerNavigator

NavigatorAutomationInformation 接口被定义为:

interface mixin NavigatorAutomationInformation {
    readonly attribute boolean webdriver;
};

返回true如果webdriver-active 标志设置,否则为false。

最后,navigator.webdriver定义用于协同操作的用户代理以通知它是由控制的文档的标准方式的webdriver,以便交替代码路径可以自动化过程被触发。

注意:改变/调整上述参数可能会阻止导航,并获得的webdriver实例检测。


更新(6 - 11月,2019)

由于目前实施没有得到检测是使用了访问网页的理想方法的ChromeOptions()类一对夫妇的参数添加到:

  • 排除收集enable-automation开关
  • 关掉 useAutomationExtension

通过的一个实例ChromeOptions如下:

  • Java示例:

    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver =  new ChromeDriver(options);
    driver.get("https://www.google.com/");
    
  • Python的例子

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("https://www.google.com/")
    

传奇

1:仅适用于硒的Python的客户。

2:仅适用于硒的Python的客户。

3:仅适用于硒的Python的客户。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档