You need to enable JavaScript to run this app. Selenium4运行Firefox出现SessionNotCreatedException报错排查
优惠活动
大模型
产品
解决方案
定价
更多

Selenium4运行Firefox出现SessionNotCreatedException报错排查

问题根因

会话创建失败的核心原因不是capability配置错误,是Selenium节点以root身份运行时,和snap版Firefox的沙箱权限机制产生冲突。结合日志逐行核对可以确认:

  • 日志中cannot start document portal: dial unix /run/user/0/bus的路径对应uid=0,也就是root用户的固定标识。snap打包的Firefox自带沙箱校验逻辑,会主动拦截root身份发起的进程启动请求,并不会抛出明确的权限拒绝提示,只会静默终止进程和geckodriver的通信,最终上报500连接拒绝错误
  • 日志中mkdir: cannot create directory '/run/user/1000': Permission denied是因为root运行环境下,没有为snap进程准备对应的用户态运行目录,snap无法在指定路径生成临时配置文件
  • 日志中所有和libpci缺失、libEGL初始化失败、X server连接失败相关的报错,都是无图形界面服务器的正常提示,不会直接阻塞会话创建流程,不属于核心问题。
修复操作步骤

1. 调整Selenium节点的运行身份

所有基于snap打包的浏览器(Chrome、Firefox)都内置了禁止root启动的沙箱规则,不要用root用户拉起Selenium节点进程:

  • 提前在节点服务器准备一个低权限普通用户(如你配置路径中提到的tatrytec)
  • 把geckodriver存储路径、Firefox安装路径、/tmp临时目录的可执行/读写权限全部分配给该用户
  • 切换到该普通用户身份启动Selenium服务端节点进程,禁止用sudo、root权限直接启动

2. 补充snap运行的基础环境配置

解决日志中的目录权限、portal连接报错:

  • 安装缺失的dbus-x11依赖包,解决文档portal连接失败的问题
  • 提前创建运行用户对应的uid临时目录,开放对应权限:
    # 替换为实际运行Selenium节点的用户UID,常规普通用户的UID默认一般为1000
    mkdir -p /run/user/1000
    chmod 700 /run/user/1000
    chown 1000:1000 /run/user/1000
    
  • 完成配置后先手动验证普通用户身份下可以正常启动headless Firefox,不出现崩溃、权限报错,再启动Selenium节点

3. 优化客户端代码的冗余配置

你当前的Java代码存在几处和Selenium 4版本不匹配的冗余设置,会增加capability校验的异常概率:

  • RemoteWebDriver远程模式下,客户端配置的System.setProperty("webdriver.gecko.driver", "路径")完全无效,这个配置仅作用于本地直连启动浏览器的场景,远程场景下geckodriver的路径只需要在Selenium服务端配置即可,可直接删除该设置
  • 不需要手动设置marionette capability,Selenium 4的FirefoxOptions默认已开启marionette支持,重复手动设置会和新版geckodriver的capability校验逻辑产生冲突
  • 适配无GPU的服务器环境,给Firefox补充跳过显卡检测的参数,减少无意义的启动等待:
    FirefoxOptions options = new FirefoxOptions();
    options.setHeadless(true);
    options.addPreference("gfx.graphics-features.version", "1");
    options.addArguments("--disable-gpu");
    

内容的提问来源于stack exchange,提问作者Čamo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 23:36:08