【问题标题】:chromedriver window.navigator.webdriver flag is true with chrome v80+chromedriver window.navigator.webdriver 标志在 chrome v80+ 中为真
【发布时间】:2020-03-10 10:31:19
【问题描述】:

我正在使用 selenium chromeDriver 进行自动化测试。但我不能“隐藏”window.navigator.webdriver 属性。当我通过驱动程序打开 chrome(v64-80.0.3987.100) 时,在控制台中查看时它总是返回 true。这是我的代码:

System.setProperty("webdriver.firefox.marionette", "false");
System.setProperty("webdriver.chrome.driver", webDriverPath);
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-extensions");
options.addArguments("--blink-settings=imagesEnabled=false");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--incognito");
options.addArguments("--start-maximized");
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
options.addArguments("--lang=zh-CN,zh,en");
options.addArguments("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36");
options.addArguments("--window-size=1920,1080");
ChromeDriver driver = new ChromeDriver(options);
driver.executeScript("Object.defineProperty(navigator, \"webdriver\", {\n" + "    get()  { return undefined; },\n" + "    set(v) { return v; },\n" + "    configurable: true,\n" + "    enumerable: false\n" + "});");
driver.manage().timeouts().pageLoadTimeout(30L, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(5L, TimeUnit.SECONDS);

如果我使用较低版本的 chrome(如 v64-76.0.3809.100),它会返回 undefined。谁能帮帮我?

【问题讨论】:

标签: java selenium google-chrome webdriver selenium-chromedriver


【解决方案1】:

window.navigator.webdriver 属性的存在是由W3C WebDriver Specification 强制要求的。它既是一项安全功能,也是一项允许更好地测试网页的功能。如果您尝试使用基于 WebDriver 的机器人自动化页面,并且您不拥有正在自动化的页面,并且您试图向页面所有者隐藏您正在使用机器人的事实,那就是 正是该属性打算公开的那种东西。

Chrome 和 chromedriver 的开发者现在似乎已经关闭了他们在之前版本中允许的安全漏洞。我想您可以构建自己的破解版浏览器和驱动程序,以便在使用 WebDriver 浏览网站时不设置该属性,但这是唯一的方法。

作为编辑评论,试图通过 WebDriver 驱动的机器人隐藏浏览通常是愚蠢的差事。除了navigator.webdriver 属性之外,还有多种检测此类机器人的方法,几乎​​不可能将它们全部屏蔽。即使它看起来工作了一段时间,最终,有问题的网站也会提出更多的检测机制。此外,此类活动极有可能违反了几乎任何愿意尝试这样做的网站的服务条款。找到另一种实现目标的机制会好得多。

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 2020-06-03
    • 2020-05-23
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多