如何在Java Selenium中注入JS脚本以使navigator.webdriver = false

时间:2019-06-13 08:14:57

标签: javascript java selenium webdriver selenium-chromedriver

所以,我要使我的硒无法被检测到。我使用的不是无头,此处唯一失败的测试是Webdriver测试,here是在navigator.webdriver = true时标记的。我也关注this post,它似乎很有用,但全部是JS Puppeteer,我只需要Webdriver测试部分,而我不能正确使用它。

我看到有一个先前的问题得到了回答,但是除非我弄错了,否则它没有提供解决方案,这更多是它为什么发生的原因。

我已经尝试使用JavascriptExecutor(都作为异步脚本而不是异步脚本)运行这段代码(请注意,我对JS毫无头绪,因为我的实际应用程序的语言是Java,所以大多数情况下都是反复试验):

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

没用。我还尝试将其包装在“ async()=> {...”中,什么也没有。

我要运行的实际Java代码:

    String navigatorScript = "await page.evaluateOnNewDocument(() => {\n" +
            "  Object.defineProperty(navigator, 'webdriver', {\n" +
            "    get: () => false,\n" +
            "  });\n" +
            "});";

    // Unrelated stuff here

    driver = new ChromeDriver(options);

    driver.get("https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html");
    ((JavascriptExecutor)driver).executeAsyncScript(navigatorScript);

谢谢。

0 个答案:

没有答案