【问题标题】:Java execute chromedriver on linux serverJava在linux服务器上执行chromedriver
【发布时间】:2018-02-23 20:47:44
【问题描述】:

我正在使用 Eclipse、Selenium 和 chromedriver 来促进网站数据的无头检索。虽然我的笔记本电脑运行良好,但我已将 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),所以应该没问题 - 只是找不到。

请帮忙...

【问题讨论】:

    标签: java linux selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    当您在 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);
    

    注意:如果您在 Linux 平台上以 headless 模式使用 chromedriver,则参数 disable -gpu 是至关重要的和强制性的。见Getting Started with Headless Chrome

    【讨论】:

      【解决方案2】:

      尝试在 chrome 驱动程序中使用这些选项:-

              Options.addArguments("--no-sandbox");
              Options.addArguments("start-maximized");
              Options.addArguments("disable-notifications");
              Options.addArguments("allow-running-insecure-content");
      

      【讨论】:

      • 谢谢,但执行并没有那么远 - 如果有进一步的问题,我会记住这些选项,但我尝试并期望相同。我想我的路径是正确的,而且文件在那里,所以不知道为什么找不到它。
      • 你设置路径变量了吗?
      【解决方案3】:

      在例外情况下,出现“驱动程序可执行文件不存在:/drivers/chromedriver”,因此您应该检查路径是否正确。

      如果您想在文件中排序,您可以将驱动程序放在 Java 项目的资源目录中,例如。 “src/test/resources/drivers/chromedriver”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多