web-dev-qa-db-fra.com

Sans tête chrome + ignorer-certificat-erreurs

J'ai besoin de chrome sans tête pour ignorer les erreurs de certificat. L'option est ignorée lors de l'exécution en mode sans tête et le pilote renvoie des balises body vides HTML lors de la navigation vers une ressource https.

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

Voici comment je configure mon pilote 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);

Ce fil confirme que --ignore-certificate-errors est ignoré en mode sans tête.

Ils mentionnent à propos de le protocole devtool .

Est-ce quelque chose que je peux invoquer de java? Y a-t-il d'autres alternatives?

18
miklesw

Il y a un excellent article sur medium.com par sahajamit

et j'ai testé le code ci-dessous, il fonctionne parfaitement avec un certificat auto-signé 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();

versions de logiciel/framework

  • Google Chrome version 64.0.3282.186
  • Version du pilote Google Chrome 64.0.3282.186
  • Sélénium version 3.11.0
5
Amila kumara

@ amila-kumara fonctionne mais l'utilisation de DesiredCapabilities.chrome() vous avertit d'utiliser ChromeOptions . S'il vous plaît voir la réponse mise à jour.

Définir les valeurs de l'option 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);

Démarrer le 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();
}

Remarque: Je faisais face au problème lors de la fermeture du pilote (avec RemoteWebDriver), le processus chromedriver.exe ne se ferme pas même lorsque vous utilisez driver.quit () . Pour résoudre le problème, utilisez ChromeDriver au lieu de RemoteWebDriver

RemoteWebDriver driver = new ChromeDriver(service, options);

Pour fermer correctement le pilote, utilisez

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