如何使用 Geckodriver 在 Selenium 中禁用 Firefox 登录?
Posted
技术标签:
【中文标题】如何使用 Geckodriver 在 Selenium 中禁用 Firefox 登录?【英文标题】:How do I disable Firefox logging in Selenium using Geckodriver? 【发布时间】:2017-05-14 06:09:17 【问题描述】:我正在使用:
火狐版本 50.1.0 geckodriver 版本 0.11.1 硒-java 3.0.1我试过了
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("webdriver.log.browser.ignore", true);
profile.setPreference("webdriver.log.driver.ignore", true);
profile.setPreference("webdriver.log.profiler.ignore", true);
FirefoxDriver driver = new FirefoxDriver();
和
LoggingPreferences preferences = new LoggingPreferences();
preferences.enable(LogType.BROWSER, Level.OFF);
preferences.enable(LogType.CLIENT, Level.OFF);
preferences.enable(LogType.DRIVER, Level.OFF);
preferences.enable(LogType.PERFORMANCE, Level.OFF);
preferences.enable(LogType.SERVER, Level.OFF);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.LOGGING_PREFS, preferences);
FirefoxDriver driver = new FirefoxDriver(capabilities);
这些方法都不会停止记录。 如果有帮助,这里是控制台输出:
第一种方法:http://pastebin.com/23nate2G 第二种方法:http://pastebin.com/NwmWEeXT对于那些想知道的人,我的 pom.xml
中有 log4j 1.2.17,但没有 log4j.properties
或 log4j.xml
,我根本不使用它。
澄清一下:当我说日志时,我指的是 IntelliJ IDEA 中的控制台输出。我正在使用 Java。
【问题讨论】:
你为什么要使用 geckodriver ? Firefox 需要它吗?哦,好的,它是 selenium 3 中的新功能 如果我没记错的话,使用 selenium 3.0.0 及更高版本的 Firefox 需要 Geckodriver How to turn off the Marionette/gecko driver logs in selenium 3的可能重复 【参考方案1】:您可以在 geckodriver.exe 中通过命令行定义所需的日志记录级别。
geckodriver.exe -help
USAGE:
geckodriver.exe [FLAGS] [OPTIONS]
...
OPTIONS:
--log <LEVEL>
Set Gecko log level [values: fatal, error, warn, info, config,
debug, trace]
如果你使用 selenium 的 geckodriver,你有两个选择:
使用自定义参数单独启动 geckodriver.exe,并通过 RemoteWebDriver 从 selenium 使用它 创建自定义包装器,为 geckodriver.exe 添加额外参数geckodriver 包装 bat 文件示例(适用于 windows):
@ECHO OFF
ECHO Starting geckodriver: %0 %*
.\GeckoDriver\geckodriver.exe --log fatal %* > NUL 2>&1
在 java 中,您可以通过 webdriver.gecko.driver 系统属性定义 geckodriver 可执行路径:
System.setProperty("webdriver.gecko.driver", "c:/selenium/geckodriver/gdrvwrapper.bat");
【讨论】:
我选择了这个答案,但在 Linux 上设置日志级别对我没有任何帮助。它起作用了,因为输出被重定向到空值。您可以通过不添加 > NUL 2>& 部分来尝试此操作。我在下面添加了linux版本 这个bat文件还需要吗?或者有没有办法以编程方式做到这一点? 系统属性让你可以务实地做。查看其他答案 如何从 java 添加 geckodriver 日志级别?【参考方案2】: GeckoDriverService gecko = new GeckoDriverService(new File("c:/selenium/geckodriver.exe"), 4444, ImmutableList.of("--log=fatal"), ImmutableMap.of());
gecko.sendOutputTo(new FileOutputStream("gecko_log.txt"));
gecko.start();
FirefoxOptions opts = new FirefoxOptions().setLogLevel(Level.OFF);
DesiredCapabilities capabilities = opts.addTo(DesiredCapabilities.firefox());
capabilities.setCapability("marionette", true);
driver = new FirefoxDriver(gecko, capabilities);
【讨论】:
即使我将其更改为不再给出错误,我也会收到错误和弃用警告。这一定是 Selenium 的旧版本【参考方案3】:这是上面@voji 答案的Linux 版本。请注意我在上面的评论中所说的。我不相信 --log fatal 没有任何作用,至少在 linux 上没有。 但是重定向到 NULL 对我来说效果很好
"webdriver.gecko.driver": "/path-to-driver/geckodriver.sh
文件名:geckodriver.sh(可执行文件)
#! /bin/bash
echo " ARGS: " $@
geckodriver --log fatal "$@" > /dev/null 2>&1
【讨论】:
【参考方案4】:要在控制台中看不到日志,您可以使用以下命令:
System.setProperty("webdriver.gecko.driver","src/main/resources/drivers/geckodriver.exe");
System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,"true");
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");
return new FirefoxDriver();
【讨论】:
如何将 Marionette 日志级别设置为“警告”? From seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/…,BROWSER_LOGFILE
定义了 Firefox 日志应该存储的文件的位置 --> 但是我没有看到 /dev/null 下的日志文件(这个文件不存在) /dev/null 是否将其保存到无处?
@IceTea 结帐:en.wikipedia.org/wiki/Null_device /dev/null
丢弃一切,就像垃圾一样【参考方案5】:
就这样做
System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,"true");
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");
driver = new FirefoxDriver();
【讨论】:
如何将日志级别设置为warn
?【参考方案6】:
对于 selenium 3.14.0,这是有效的
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");
【讨论】:
【参考方案7】:我在 C# 中使用无头 Firefox 驱动程序。 要禁用 geckoDriver 日志控制台,下面的代码似乎对我有用:
FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(Directory.GetCurrentDirectory());
service.HideCommandPromptWindow = true;
FirefoxOptions options = new FirefoxOptions();
options.AddArguments("--headless");
options.LogLevel = FirefoxDriverLogLevel.Fatal;
WebDriver = new FirefoxDriver(service, options);
【讨论】:
【参考方案8】:这可能有点老套,但无需任何编码即可快速完成工作。鉴于您知道文件的确切位置并在 Linux 上运行代码,您只需 cd 进入该目录并
rm geckodriver.log
ln -s /dev/null geckodriver.log
【讨论】:
【参考方案9】:profile.setPreference("webdriver.log.init", true);
有效,因为它欺骗了 webdriver 相信日志已经被初始化,所以它不会初始化它并且不会产生日志。
【讨论】:
以上是关于如何使用 Geckodriver 在 Selenium 中禁用 Firefox 登录?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?
如何防止 Selenium 3.0 (Geckodriver) 创建临时 Firefox 配置文件?
如何通过 System.setProperty() 启动多个版本的 Geckodriver