无头铬 + 忽略证书错误



我需要让无头铬来忽略证书错误。在无外设模式下运行时,将忽略该选项,驱动程序在导航到 https 资源时返回空的 html 正文标记。

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

这就是我配置铬驱动程序的方式。

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协议。

我可以从 java 调用它吗?还有其他选择吗?

有一篇关于 medium.com 的优秀文章 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();

软件/框架版本

  • 谷歌浏览器版本 64.0.3282.186
  • 谷歌浏览器驱动程序版本 64.0.3282.186
  • 硒版本 3.11.0

这在ChromeDriver 80上对我有用。

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

@amila-kumara正在运行,但是,使用DesiredCapabilities.chrome()会发出使用ChromeOptions的警告。请参阅更新的答案。

设置镶边选项值

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

注意:我在关闭驱动程序(使用远程WebDriver(时遇到了这个问题,即使您使用driver.quit((,chromedriver.exe进程也不会关闭。要解决此问题,请使用ChromeDriver 而不是 RemoteWebDriver

RemoteWebDriver driver = new ChromeDriver(service, options);

要正确关闭驱动程序,请使用

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

相关内容

  • 没有找到相关文章

最新更新