我可以 运行 Selenium 使用 geckodriver 而不检测网页 marionette 吗?

Can I run Selenium using geckodriver without a webpage detecting marionette?

我想将 FirefoxDriver 与 Selenium 一起使用,但我总是被网页检测到。当我添加以下代码时

System.setProperty("webdriver.gecko.driver", "../../../../../../../usr/bin/geckodriver");
FirefoxOptions opt = new FirefoxOptions();
opt.setCapability("marionette", false);
driver = new FirefoxDriver(opt);

网页无法检测到我正在使用 geckodriver,但我无法使用 Selenium 自动化,这是我的问题。我需要没有检测的自动化。

问题:

  1. 我可以在驱动程序 运行 时更改 setCapabilites on/off 吗?
  2. 使用 ChromeDriver 是否更容易做到这一点?

FirefoxDriverSelenium 一起使用,但现在被检测到很常见,因为:

Selenium identifies itself

您可以在

中找到详细的讨论

Marionette

根据文档,Marionette, is the automation driver for Mozilla’s Gecko engine. It can remotely control the UI and the internal JavaScript of a Gecko platform, such as Mozilla Firefox. It can control both the chrome (i.e. menus and functions) or the content (the webpage loaded inside the browsing context), giving a high level of control and ability to replicate user actions. In addition to performing actions on the browser, Marionette can also read the properties and attributes of the DOM. Now, shares much of the same API as ,使用额外的命令与 Gecko 的 chrome 界面进行交互。它的目标是复制 Selenium 对 Web 内容所做的工作,即 使测试人员能够发送命令以远程控制用户代理

我们还详细讨论了 为什么 Firefox 需要 GeckoDriver? 在此

最后,在讨论中 we discussed about initializing Firefox sessions using legacy Firefox 47.x browsers and GeckoDriver enabled Firefox >47.x browsers. The conclusion was when using Firefox browsers > v77.x you have to mandatorily use GeckoDriver which extensively uses the marionette. So configuring marionette as false won't help us out. While using the latest version of , and ,你必须默认使用marionette

如果您仍然想在不使用 marionette 的情况下初始化 Firefox 浏览会话,您需要配置 "marionette"false如下:

System.setProperty("webdriver.gecko.driver", "C://path//to//geckodriver.exe");
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("marionatte", false);
FirefoxOptions opt = new FirefoxOptions();
opt.merge(dc);
FirefoxDriver driver =  new FirefoxDriver(opt);
driver.get("https://whosebug.com");
System.out.println("Application opened");
System.out.println("Page Title is : "+driver.getTitle());
driver.quit();

您可以在以下位置找到一些相关讨论:


其他问题:

  • 我可以在驱动程序 运行 时更改 setCapabilites on/off 吗?:简短的回答是 ,当网络驱动程序发起的会话为In Progress时,您无法更改功能,您可以在以下位置找到一些详细的讨论:

    • Change ChromeOptions in an existing webdriver
    • Set capability on already running selenium webdriver
  • 使用 ChromeDriver 更容易做到这一点吗?:同样,准确的答案是 ChromeDriver 也被检测到,您可以在以下位置找到一些详细的讨论:


结尾

在这里你可以找到关于Which Firefox browser versions supported for given Geckodriver version?

的详细讨论