Headless chrome + ignore-certificate-errors

两盒软妹~` 提交于 2019-12-04 09:02:36

问题


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?


回答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



回答2:


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


来源:https://stackoverflow.com/questions/45510973/headless-chrome-ignore-certificate-errors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!