Linux服务器运行Selenium WebDriverManager抛出异常问题求助
异常根因
该异常与Chrome浏览器安装状态无关,核心触发原因是WebDriverManager初始化驱动解析缓存时无对应路径的写入权限:
- WebDriverManager 5.1.0版本默认将驱动版本解析缓存、下载的浏览器驱动文件存储在运行用户主目录下的
.cache/selenium路径中 - 应用部署到Ubuntu 18.04的Tomcat 9运行时,Tomcat服务的默认运行用户(通常为
tomcat或www-data)要么没有自身主目录的访问权限,要么最小化安装场景下该用户默认未创建主目录,导致WebDriverManager尝试创建缓存属性文件时抛出No such file or directory的IO异常 - 本地Windows 10环境运行正常,是因为本地登录用户对个人用户目录拥有完整读写权限,不会触发权限问题
解决方法
按优先级推荐以下可落地方案:
方案1:手动指定可读写缓存路径(最稳定,不依赖系统默认权限配置)
在调用setup()方法前,主动指定Tomcat进程拥有读写权限的路径作为WebDriverManager缓存目录,比如选择Tomcat自带的临时目录,或提前创建专属目录并给Tomcat运行用户授权:
// 示例:指定缓存路径为Tomcat临时目录下的专属文件夹,需提前给Tomcat运行用户授予该路径读写权限 WebDriverManager.chromedriver() .cachePath("/opt/tomcat/temp/webdriver-cache") .setup();
也可以不修改代码,通过全局配置指定路径:
- 启动Tomcat时添加JVM参数:
-Dwdm.cachePath=/your/writable/path - 或配置系统环境变量
WDM_CACHE_PATH为对应可读写路径
方案2:修复Tomcat运行用户的目录权限
- 执行命令
ps -ef | grep tomcat,确认Tomcat进程的实际运行用户 - 检查该用户的主目录是否存在,Ubuntu 18.04下Tomcat 9默认主目录通常为
/var/lib/tomcat9,若目录不存在则手动创建 - 执行权限授予命令,将主目录属主修改为Tomcat运行用户:
chown -R 你的tomcat用户名:你的tomcat用户组 /path/to/tomcat/home - 重启Tomcat服务即可生效
额外配置提醒
Linux无桌面环境下运行Chrome浏览器,初始化驱动时必须添加无头模式相关参数,否则后续启动浏览器会触发新的异常,参考配置如下:
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); WebDriver driver = new ChromeDriver(options);
内容的提问来源于stack exchange,提问作者Felix H
相关产品推荐
相关产品推荐

