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