web-dev-qa-db-ja.com

ヘッドレスchrome + ignore-certificate-errors

証明書エラーを無視するには、ヘッドレスchromeを取得する必要があります。ヘッドレスモードで実行している場合、このオプションは無視され、httpsリソースに移動するとドライバーは空のhtml bodyタグを返します。

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

これは、chromeドライバーを構成する方法です。

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

このスレッド--ignore-certificate-errorsは、ヘッドレスモードでは無視されます。

彼らは devtool protocol について言及しています。

Javaから呼び出すことができますか?他の選択肢はありますか?

19
miklesw

medium.com by sahajamit に素晴らしい記事があります

そして、私は以下のコードをテストしましたが、自己署名証明書で完璧に動作します 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();

ソフトウェア/フレームワークのバージョン

  • Google Chromeバージョン64.0.3282.186
  • Google Chrome Driver Version 64.0.3282.186
  • Seleniumバージョン3.11.0
4
Amila kumara

@ amila-kumaraは機能していますが、DesiredCapabilities.chrome()を使用すると、ChromeOptionsを使用するように警告が表示されます。更新された回答をご覧ください。

chromeオプション値を設定する

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

サービスを開始する

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

注:ドライバーを閉じるときに問題が発生しました(RemoteWebDriverを使用)、driver.quit()を使用してもchromedriver.exeプロセスは閉じません。この問題を修正するには、RemoteWebDriverの代わりにChromeDriverを使用します

RemoteWebDriver driver = new ChromeDriver(service, options);

ドライバーを適切に閉じるには、次を使用します

driver.close();
driver.quit();
0