You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程Tomcat部署Java应用:ChromeDriver启动后Chrome崩溃报500错误

解决Tomcat中Selenium ChromeDriver启动Chrome崩溃(DevToolsActivePort不存在)问题

问题现象

远程Apache Tomcat/10.0.23服务器上运行集成Selenium ChromeDriver的Java Web应用,ChromeDriver日志显示启动成功,但创建WebDriver时抛出HTTP 500错误,核心提示为Chrome failed to start: crashed和DevToolsActivePort file doesn't exist。

关键修复步骤

1. 补充无头模式必要启动参数

无GUI的服务器环境下,除现有参数外,需添加以下参数解决端口与渲染异常:

  • --remote-debugging-port=9222:明确指定调试端口,避免DevToolsActivePort检测失败
  • --disable-gpu:禁用GPU加速,服务器环境无需该功能
  • --window-size=1920,1080:设置固定窗口尺寸,避免无头模式下渲染异常

2. 明确指定Chrome二进制文件路径

在ChromeOptions中直接指定Chrome可执行文件路径,避免系统路径查找异常:

options.setBinary("/usr/bin/google-chrome");

3. 升级Selenium版本

当前使用的Selenium 3.14.0为2018年版本,与Chrome 110存在兼容性问题,建议升级至4.x版本(如4.11.0),新版本对Chrome无头模式、DevTools协议支持更完善,且可通过Selenium Manager自动管理驱动,无需手动设置webdriver.chrome.driver。

4. 检查Tomcat运行用户权限

确保Tomcat运行用户拥有Chrome、ChromeDriver的执行权限,以及临时目录(如/tmp)的读写权限,可通过以下命令验证:

su - tomcat-user -c "/usr/bin/google-chrome --headless=new --disable-gpu --no-sandbox --dump-dom https://google.com"

若命令执行失败,需调整文件权限或为用户添加对应权限。

修改后的Servlet代码示例

import java.io.IOException;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet(name = "TestServlet", urlPatterns = { "/test" })
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        ChromeOptions options = new ChromeOptions();
        // 指定Chrome二进制文件路径
        options.setBinary("/usr/bin/google-chrome");
        options.setPageLoadStrategy(PageLoadStrategy.EAGER);
        options.addArguments("--headless=new");
        options.addArguments("--disable-dev-shm-usage");
        options.addArguments("--no-sandbox");
        // 补充解决DevToolsActivePort问题的参数
        options.addArguments("--remote-debugging-port=9222");
        options.addArguments("--disable-gpu");
        options.addArguments("--window-size=1920,1080");
        
        WebDriver driver = new ChromeDriver(options);
        try {
            driver.get("https://www.google.com/");
            String pageTitle = driver.getTitle();
            System.out.println("Page Title: " + pageTitle);
            response.getWriter().write("Page Title: " + pageTitle);
        } finally {
            // 确保无论是否异常,驱动都能正常关闭
            driver.quit();
        }
    }
}

额外说明

  • 升级Selenium 4.x后,Maven依赖示例:
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.11.0</version>
</dependency>
  • 服务器环境建议使用官方稳定版Chrome,避免第三方编译版本带来的兼容性问题。

内容的提问来源于stack exchange,提问作者Stewart LloydJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:50:17