【问题标题】:Selenium chromedriver disable logging or redirect it javaSelenium chromedriver 禁用日志记录或将其重定向 java
【发布时间】:2019-03-29 05:46:12
【问题描述】:

我正在尝试在迷你网络爬虫中使用 selenium 来获取页面源。我的输出日志被 selenium 日志入侵,有没有办法完全禁用日志记录或只是以某种方式将其重定向到 /dev/null?

日志消息如下:

Starting ChromeDriver 2.43.600233 
(523efee95e3d68b8719b3a1c83051aa63aa6b10d) on port 1628
Only local connections are allowed.
ott 24, 2018 7:52:01 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMAZIONI: Detected dialect: OSS

我通过以下方式调用驱动程序:

WebDriver driver = null;
            try {
            System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.setBinary("/usr/bin/chromium");
            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("--silent");
            chromeOptions.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
            driver = new ChromeDriver(chromeOptions);
            /*FirefoxBinary firefoxBinary = new FirefoxBinary();
            firefoxBinary.addCommandLineOptions("--headless");
            System.setProperty("webdriver.gecko.driver", "/usr/local/bin/geckodriver");
            System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE, "true");
            System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "/dev/null");


            FirefoxOptions firefoxOptions = new FirefoxOptions();
            firefoxOptions.setBinary(firefoxBinary);
            FirefoxDriver driver = new FirefoxDriver(firefoxOptions);*/
            if(driver!=null) {
            driver.get(link);

【问题讨论】:

  • 也许你应该看看这个thread
  • 好吧,可以去掉:Starting ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d) on port 1628 Only local connections are allowed.使用:System.setProperty("webdriver.chrome.silentOutput", "true");但是ott 24, 2018 7:52:01 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFORMAZIONI: Detected dialect: OSS还在。

标签: java selenium logging selenium-chromedriver


【解决方案1】:

好的,我终于设法摆脱了那些无用的日志记录。这就是我所做的。
使用:
System.setProperty("webdriver.chrome.silentOutput", "true");

摆脱 chromedriver 日志:

启动 ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d) 在端口 1628 上仅限本地 允许连接。


并使用: java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);
摆脱硒日志:

2018 年 2 月 24 日下午 7:52:01 org.openqa.selenium.remote.ProtocolHandshake createSession INFORMAZIONI:检测到的方言:OSS

【讨论】:

  • 为什么这些没用?您开始遇到问题,可能您要做的第一件事就是重新打开它们……忽略它们。
  • @JeffC 任何未请求的日志记录或错误/警告都会向读者发送大量垃圾邮件,当它发生时他们不会注意到问题。 UNIX 哲学也同意;好的命令行工具在成功时没有输出。
  • 您不应该查看控制台输出以获取测试运行结果。您应该使用像 TestNG 或 JUnit 这样的测试运行器框架来运行您的测试并获得结果。最好使用 Jenkins(或其他)的插件,将这些 TestNG 等结果提取到报告中,以使其更清晰、有历史记录等。
  • 很多“ChromeDriver 已成功启动”。来自 v83 的消息...请参阅下面的回复
  • ChromeDriver was started successfully 的事情似乎有解决方案,但我不是很喜欢它。 groups.google.com/g/chromedriver-users/c/QipZrjyoEgg
【解决方案2】:

Drunk Cat 的回答是正确的,并且对于摆脱日志中的 100 条毫无意义的信息消息非常有用。也许使用java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
捕捉错误(Level.SEVERE 而不是 Level.OFF)

Chromedriver v83(2020 更新)
请注意,设置属性的替代方法:

System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true"); 

是这样的:

DriverService.Builder serviceBuilder = new ChromeDriverService.Builder().withSilent(true);
ChromeOptions options = new ChromeOptions();
// ... addArguments to options ....
ChromeDriverService chromeDriverService = (ChromeDriverService)serviceBuilder.build(); 
ChromeDriver driver = new ChromeDriver(chromeDriverService, options);

但是,无论出于何种原因,.withSilent(true) 或设置属性都不适用于 Chromedriver v83(在 Linux 和 Windows 上已确认)。我需要添加一行代码来重定向输出:

:
ChromeDriverService chromeDriverService = (ChromeDriverService)serviceBuilder.build(); 
chromeDriverService.sendOutputTo(new FileOutputStream("/dev/null"));
ChromeDriver driver = new ChromeDriver(chromeDriverService, options);

如果需要(用于调试等),您可以将“/dev/nul”替换为真实文件。或者一种独立于平台的方式来处理适用于 Java 8+ 的空输出:

chromeDriverService.sendOutputTo(new OutputStream(){@Override public void write(int b){}});

我的猜测是,这可能是 v83 版本中的一个错误,但至少它让我找到了另一种重定向或关闭 chromedriver 日志记录的方法。

【讨论】:

  • MetalRules - 你的是唯一有效的答案,Chrome 91。
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2011-01-09
  • 2018-04-03
相关资源
最近更新 更多