java在linux服务器上执行chromedriver

标签 java linux selenium selenium-webdriver selenium-chromedriver

我正在使用 Eclipse、Selenium 和 chromedriver 来促进网站数据的 headless 检索。虽然我在笔记本电脑上运行良好,但我已经将 WAR 版本部署到 Java/Linux 托管服务并收到以下错误,表明它找不到 chromedriver。

类型异常报告

留言:

The driver executable does not exist: /drivers/chromedriver

描述:

The server encountered an unexpected condition that prevented it from fulfilling the request.

异常:

java.lang.IllegalStateException: The driver executable does not exist: /drivers/chromedriver
    com.google.common.base.Preconditions.checkState(Preconditions.java:534)
    org.openqa.selenium.remote.service.DriverService.checkExecutable(DriverService.java:136)
    org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:131)
    org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:32)
    org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:137)
    org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:329)
    org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:88)
    org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
    com.carsales.rego.CarRegoAction.doPost(CarRegoAction.java:57)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

最初我有 windows 位置 C:\java\selenium\drivers\chromedriver.exe

但是我上传了Linux版本,放在"/drivers/chromedriver"

部分代码看起来像这样......

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String carRegistrationNumer = request.getParameter("cargo");

    System.setProperty("webdriver.chrome.driver",
            "/drivers/chromedriver");

    ChromeOptions options = new ChromeOptions();
       options.addArguments("headless");
       options.addArguments("window-size=1200x600");

    WebDriver webDriver = new ChromeDriver(options);

是的,我已经将文件夹和 chromedriver 的权限设置为 777 (chmod 777),所以应该没问题 - 只是找不到它。

请帮忙...

最佳答案

当您在 Linux 平台上以 headless 模式使用 chromedriver 时,您应该使用以下选项:

System.setProperty("webdriver.chrome.driver", "/drivers/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("--disable-gpu");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
options.addArguments("window-size=1200x600");
options.addArguments("--no-sandbox");
WebDriver webDriver = new ChromeDriver(options);

Note : If you are using chromedriver in headless mode on Linux platform the argument disable-gpu is crucial and mandatory. See Getting Started with Headless Chrome

关于java在linux服务器上执行chromedriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48945225/

相关文章:

java - 重置类路径

java - okHttp 库对于 webSocket 是线程安全的吗?

java - 如何通过移动手机进行更改

java - 处理与循环障碍相关的异常的更好方法

linux - 在 Linux 上的 64 位进程中运行 32 位代码 - 内存访问

c - 如何使用termios将控制权返回给C中的终端

python - 为什么父进程中的 select() 会使子进程中的 accept() 不可用?

java - 测试不工作

java - Selenium webdriver 选择

selenium - Selenium webdriver上的SendKeys偶尔在Internet Explorer 10中以大写形式发送文本