我正在尝试在迷你网络爬虫中使用硒来获取页面源代码。我的输出日志被硒日志入侵,有没有办法完全禁用日志记录或以某种方式将其重定向到/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);
好的,我终于设法摆脱了那些无用的日志记录。这是我所做的。
用:System.setProperty("webdriver.chrome.silentOutput", "true");
要删除 chromedriver 日志:
启动ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d( 在端口 1628 上 仅限本地 允许连接。
并使用:java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);
要摆脱硒日志:
ott 24, 2018 7:52:01 PM org.openqa.selenium.remote.ProtocolHandshake 创建会话信息:检测到的方言:OSS
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 日志记录的方法。