我在 centos 上运行 headless chrome,headless chrome 版本为 2.38,google-chrome-stable 版本为 67.0
System.setProperty("webdriver.chrome.driver", driverPath);
log.warn("chrome driver path is : {}", driverPath);
List<String> options = proxyConfig.getChromeOptions();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments(options);
Map<String, String> capabilites = proxyConfig.getCapabilities();
if(MapUtils.isNotEmpty(capabilites)) {
for (Map.Entry<String, String> entry : capabilites.entrySet()) {
chromeOptions.setCapability(entry.getKey(), entry.getValue());
}
}
// proxy configuration
/*Proxy proxy = new Proxy();
proxy.setProxyType(Proxy.ProxyType.MANUAL);
proxy.setHttpProxy(proxyConfig.getProxyHost());
proxy.setSocksUsername(proxyConfig.getProxyUsername());
proxy.setSocksPassword(proxyConfig.getProxyPassword());
chromeOptions.setCapability(CapabilityType.PROXY, proxy);*/
log.warn("chorme driver created ");
return new ChromeDriver(chromeOptions);
Chrome 选项:
"--headless",
"----disable-gpu",
"--ignore-certificate-errors",
"window-size=1920,1080"
它在最后一行给出了以下给出的错误消息:
org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Linux 4.9.77blibli.com x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.11 seconds
Build info: version: ‘3.6.0’, revision: ‘6fbf3ec767’, time: ‘2017-09-27T15:28:36.4Z’
System info: host: ‘csrapp-02’, ip: ‘127.0.1.1’, os.name: ‘Linux’, os.arch: ‘amd64’, os.version: ‘4.9.77dwdwde.com’, java.version: ‘1.8.0_101’
Driver info: driver.version: ChromeDriver
我已经验证了chrome和chromedriver版本,它是兼容的。不明白为什么它不能在centos上运行? 相同的代码在 mac 上运行良好
pom
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
</dependency>
最佳答案
此错误消息...
org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed
...意味着 ChromeDriver 无法启动/生成新的 WebBrowser,即 Chrome 浏览器 session 。
由于您在 CentOS 上使用Headless Chrome,因此值得一提的是,根据讨论 Getting Started with Headless Chrome --disable-gpu
是如果在 Windows 上运行则暂时需要。
--disable-gpu \ # Temporarily needed if running on Windows.
但是,您的主要问题是您使用的二进制文件版本之间不兼容,如下所示:
- 您正在使用 chromedriver=2.38
- 您正在使用chrome=67.0
- 您的 Selenium 客户端版本为 3.6.0,2017-09-27T15:28:36.4Z几乎一岁大了。
- 您的JDK版本是1.8.0_101,这是相当古老的。
因此,JDK v8u101、Selenium Client v3.6.0、ChromeDriver v2.38 和 之间存在明显不匹配Chrome 浏览器 v67.0
解决方案
- 将 JDK 升级到最新级别 JDK 8u171 .
- 将Selenium升级到当前级别 Version 3.12.0 .
- 将ChromeDriver升级到当前的ChromeDriver v2.40级别。
- 将 Chrome 版本保持在 Chrome v66-68 级别之间。 (as per ChromeDriver v2.40 release notes)
- 通过IDE清理您的项目工作区,并仅使用所需的依赖项重建项目。
- 使用CCleaner工具可以清除执行测试套件之前和之后的所有操作系统杂务。
- 如果您的基本网络客户端版本太旧,请通过 Revo Uninstaller 卸载它并安装最新的 GA 和已发布版本的Web 客户端。
- 重新启动系统。
- 执行您的
@Test
。 - 始终在
tearDown(){}
方法中调用driver.quit()
来关闭和销毁 WebDriver 和 Web Client 优雅地实例化。
关于java - org.openqa.selenium.WebDriverException : unknown error: Chrome failed to start: crashed (headless chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50830193/