Java+Selenium启动Chromedriver特定用户报错:无法找到默认字体(RHEL7.9)
问题核心
报错日志的关键信息是[FATAL:platform_font_skia.cc(98)] Check failed: InitDefaultFont(). Could not find the default font,说明特定用户运行Chromium时无法加载系统默认字体——尽管表面上权限和环境变量与正常用户一致,但存在隐藏的资源访问或配置差异。
解决方案
1. 验证字体目录访问权限
系统字体通常存放在/usr/share/fonts/和/etc/fonts/,检查特定用户能否读取这些目录:
su - 目标用户名 -c "ls -l /usr/share/fonts/" su - 目标用户名 -c "cat /etc/fonts/fonts.conf"
如果出现权限拒绝,可调整目录权限(如chmod o+r -R /usr/share/fonts/),或将用户加入拥有字体目录权限的用户组。
2. 强制指定Chrome启动字体
在Java代码中通过ChromeOptions添加参数,直接指定系统中已安装的字体:
ChromeOptions options = new ChromeOptions(); // 替换为系统存在的字体名称,例如"Noto Sans"、"Arial" options.addArguments("--default-font-family='Noto Sans'"); // 无头模式建议补充以下参数 options.addArguments("--headless"); options.addArguments("--disable-gpu"); WebDriver driver = new ChromeDriver(options);
3. 同步字体配置文件
复制正常用户的字体配置到特定用户目录,重建字体缓存:
# 复制配置文件 cp -r /home/正常用户名/.config/fontconfig/ /home/目标用户名/.config/ cp -r /home/正常用户名/.fonts/ /home/目标用户名/ # 修改权限归属 chown -R 目标用户名:目标用户名 /home/目标用户名/.config/fontconfig/ /home/目标用户名/.fonts/ # 重建字体缓存 su - 目标用户名 -c "fc-cache -fv"
4. 检查Chromium依赖库
确认特定用户环境下Chromium的字体相关依赖是否完整:
su - 目标用户名 -c "ldd /path/to/your/chromium | grep font"
对比正常用户的输出,安装缺失的依赖库(例如libfontconfig,可通过yum install fontconfig安装)。
5. 临时关闭沙箱测试
部分场景下用户权限不足导致沙箱启动失败,添加--no-sandbox参数排查问题:
options.addArguments("--no-sandbox");
注意:此参数仅用于排查,生产环境不建议长期使用,避免安全风险。
内容的提问来源于stack exchange,提问作者Kamlesh
相关产品推荐
相关产品推荐

