Headless chrome + ignore-certificate-errors

31,957

Solution 1

There is an excellent article on medium.com by sahajamit

and i have tested the below code, it works perfectly fine with self-signed certificate https://badssl.com/

    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--headless", "--window-size=1920,1200","--ignore-certificate-errors");

    DesiredCapabilities crcapabilities = DesiredCapabilities.chrome();
    crcapabilities.setCapability(ChromeOptions.CAPABILITY, options);
    crcapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    crcapabilities.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);

    System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY, "C:\\temp\\chrome\\chromedriver.log");
    System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, "C:\\temp\\chrome\\chromedriver.exe");

    ChromeDriverService service = null;
    try {
        service = new ChromeDriverService.Builder()
                .usingAnyFreePort()
                .withVerbose(true)
                .build();
        service.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    RemoteWebDriver driver = new RemoteWebDriver(service.getUrl(),crcapabilities);

    driver.get("https://self-signed.badssl.com/");
    System.out.println(driver.getPageSource());
    driver.quit();

software/framework versions

  • Google Chrome Version 64.0.3282.186
  • Google Chrome Driver Version 64.0.3282.186
  • Selenium version 3.11.0

Solution 2

This works for me on ChromeDriver 80.

ChromeOptions option = new ChromeOptions();
option.AddArgument("--headless");
option.AcceptInsecureCertificates = true;
driver = new ChromeDriver(option);

Solution 3

@amila-kumara is working but, usage of DesiredCapabilities.chrome() gives warning to use ChromeOptions. Please see the updated answer.

Set the chrome option values

System.setProperty("webdriver.chrome.driver", Config.NDAC_WEBDRIVER_PATH);
ChromeOptions options = new ChromeOptions();
options.addArguments("--window-size=1920,1200");
options.setAcceptInsecureCerts(true);
options.setHeadless(true);

Start the service

ChromeDriverService service = null;
try {
    service = new ChromeDriverService.Builder()
            .usingAnyFreePort()
            .withVerbose(true)
            .build();
    service.start();
    remoteWebdriverUrl = service.getUrl();
    System.out.println("Starting the url " + remoteWebdriverUrl);
} catch (IOException e) {
    e.printStackTrace();
}

Note: I was facing the issue while closing the driver(with RemoteWebDriver), chromedriver.exe process won't close even when you use driver.quit(). To fix the issue use ChromeDriver instead of RemoteWebDriver

RemoteWebDriver driver = new ChromeDriver(service, options);

To properly close the driver, use

driver.close();
driver.quit();
Share:
31,957
miklesw
Author by

miklesw

Updated on August 10, 2020

Comments

  • miklesw
    miklesw almost 4 years

    I need to get headless chrome to ignore certificate errors. The option is ignored when running in headless mode, and the driver returns empty html body tags when navigating to an https resource.

    <html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
    

    This is how I am configuring my chrome driver.

     ChromeOptions chromeOptions = new ChromeOptions();
     chromeOptions.addArguments("--headless", "--disable-gpu", "--window-size=1920,1200","--ignore-certificate-errors");
    
     DesiredCapabilities cap=DesiredCapabilities.chrome();
    
     cap.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
     cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
     cap.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);
     chromeHeadlessDriver = new ChromeDriver(cap);
    

    This thread confirms that --ignore-certificate-errors is ignored in headless mode.

    They mention about devtool protocol.

    Is it something I can invoke from java? Are there any other alternatives?