远程Tomcat部署Java Web应用启动ChromeDriver报500错误求助
解决Tomcat中Selenium ChromeDriver启动崩溃的问题
问题核心
部署在Apache Tomcat/10.0.23的Java Web应用创建WebDriver时触发HTTP 500错误,错误提示Chrome启动失败:崩溃、DevToolsActivePort文件不存在,尽管Chromedriver已成功启动,但Chrome进程无法正常运行。
环境信息确认
- Google Chrome路径:
/usr/bin/google-chrome - Chrome版本:110.0.5481.77
- Chromedriver路径:
/usr/bin/chromedriver - Chromedriver版本:110.0.5481.77
- Selenium依赖:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.8.0</version> </dependency>
版本匹配无问题,Selenium 4.8.0兼容Chrome 109-111版本。
解决方案
1. 补充Chrome启动参数
在现有参数基础上,添加以下关键参数解决DevToolsActivePort和权限问题:
ChromeOptions options = new ChromeOptions(); // 已有参数 options.addArguments("--headless=new"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--no-sandbox"); // 新增参数 options.addArguments("--remote-debugging-port=9222"); // 指定调试端口,避免端口冲突 options.addArguments("--user-data-dir=/tmp/chrome-user-data"); // 指定临时用户目录,解决权限问题 options.addArguments("--disable-gpu"); // 无GPU环境下禁用GPU加速 options.addArguments("--single-process"); // 单进程模式,降低资源占用与冲突概率 WebDriver driver = new ChromeDriver(options);
2. 检查Tomcat运行权限
- 确保Tomcat进程的运行用户对
/tmp目录拥有读写权限,Chrome需要在此创建临时文件 - 执行
chmod +x /usr/bin/google-chrome确保Chrome可执行,同时验证Tomcat用户能执行该命令:su - tomcat-user -c "/usr/bin/google-chrome --headless=new --disable-gpu --no-sandbox --dump-dom https://www.google.com"
若执行失败,需排查Chrome安装完整性或用户权限。
3. 手动指定Chromedriver服务(可选)
通过ChromeDriverService显式指定驱动路径,避免自动识别异常:
ChromeDriverService service = new ChromeDriverService.Builder() .usingDriverExecutable(new File("/usr/bin/chromedriver")) .usingAnyFreePort() .build(); service.start(); WebDriver driver = new ChromeDriver(service, options);
内容的提问来源于stack exchange,提问作者Stewart LloydJones
相关产品推荐
相关产品推荐

