将FirefoxDriver与Selenium一起使用但被检测到现在很常见,因为:
Selenium 标识自己
您可以在如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?
木偶
根据文档,Marionette是 Mozilla 的 Gecko 引擎的自动化驱动程序。它可以远程控制 Gecko 平台的 UI 和内部 JavaScript,例如 Mozilla Firefox。它可以控制chrome(即菜单和功能)或内容(在浏览上下文中加载的网页),从而提供高级别的控制和复制用户操作的能力。除了在浏览器上执行操作之外,Marionette 还可以读取 DOM 的属性和属性。现在,marionette与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不会帮助我们。在使用最新版本的geckodriver、selenium和firefox时,您必须默认使用marionette。marionette
false
如果您仍想在不使用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 浏览器版本的详细讨论?