1

我想将 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 的开/关吗?
  2. 使用 ChromeDriver 更容易做到这一点吗?
4

1 回答 1

1

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

Selenium 标识自己

您可以在如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?


木偶

根据文档,Marionette是 Mozilla 的 Gecko 引擎的自动化驱动程序。它可以远程控制 Gecko 平台的 UI 和内部 JavaScript,例如 Mozilla Firefox。它可以控制chrome(即菜单和功能)或内容(在浏览上下文中加载的网页),从而提供高级别的控制和复制用户操作的能力。除了在浏览器上执行操作之外,Marionette 还可以读取 DOM 的属性和属性。现在,Selenium/WebDriver共享许多相同的 API ,并具有与 Gecko 的 chrome 界面交互的附加命令。它的目标是复制 Selenium 对 web 内容所做的事情,即使测试人员能够发送命令来远程控制用户代理

我们还详细讨论了为什么 Firefox 需要 GeckoDriver?在这个线程内

最后,在讨论webdriver.firefox.marionette 和 webdriver.gecko.driver 之间的区别中,我们讨论了使用旧版 Firefox 47.x 浏览器和启用GeckoDriver的 Firefox >47.x 浏览器初始化Firefox会话。结论是当使用 Firefox 浏览器 > v77.x 时,您必须强制使用广泛使用marionette的GeckoDriver。所以配置as不会帮助我们。在使用最新版本的时,您必须默认使用marionettemarionettefalse

如果您仍想在不使用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://stackoverflow.com");
System.out.println("Application opened");
System.out.println("Page Title is : "+driver.getTitle());
driver.quit();

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


其他问题:


奥特罗

在这里您可以找到关于给定 Geckodriver 版本支持哪些 Firefox 浏览器版本的详细讨论?

于 2019-11-25T08:41:06.750 回答