Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium chromedriver disable logging or redirect it java

I am trying to use selenium in a mini web crawler to get the page source. My output log is invaded by selenium logs, is there a way to totally disable the logging or just redirect it in someway to /dev/null?

The logging messages are these:

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

I am calling the driver in the following way:

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);
like image 760
Drunk Cat Avatar asked Oct 24 '18 17:10

Drunk Cat


People also ask

How do I disable Selenium logging?

Selenium logs are enabled by default. Set the browserstack. seleniumLogs capability to false to disable Selenium logs.

How do I stop ChromeDriver from running?

As per the Selenium API, you really should call browser. quit() as this method will close all windows and kills the process.

Does ChromeDriver need to be in path?

By saving chromedriver.exe in the same folder als your Python working directory, there's no need to specify the path.

How does Selenium handle Chromeoptions?

Code Explanation:Create an object of DesiredCapabilities Chrome class and merge the Desired Capabilities class object with Chrome Options class object using merge method. Create an object of Chrome Driver class and pass the Chrome Options Selenium object as an argument.


2 Answers

Ok i have managed to finally get rid of that useless loggings. Here is what i did.
Use:
System.setProperty("webdriver.chrome.silentOutput", "true");

To get rid of chromedriver logs:

Starting ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d) on port 1628 Only local connections are allowed.


And use: java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);
To get rid of selenium logs:

ott 24, 2018 7:52:01 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFORMAZIONI: Detected dialect: OSS

like image 77
Drunk Cat Avatar answered Nov 16 '22 02:11

Drunk Cat


Drunk Cat's answer is right and very useful to get rid of 100's of pointless info messages in a log. Maybe use java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
to catch errors (Level.SEVERE instead of Level.OFF)

Chromedriver v83 (2020 Update)
Note that an alternate to setting the property:

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

is something like this:

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);

However, for whatever reason neither .withSilent(true) or setting the property work on Chromedriver v83 (confirmed on Linux and Windows). I needed to add a line of code to re-direct output:

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

You could just substitute "/dev/nul" with a real file if you wanted (for debugging, etc). Or a platform independent way of dealing with null output that works with Java 8+ :

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

My guess is that this may be a bug in the v83 release, but at least it got me to find another way of re-directing or shutting off chromedriver logging.

like image 35
MetalRules Avatar answered Nov 16 '22 03:11

MetalRules