CentOS7服务器用Selenium+Python调用Headless Chrome报错求助
我来帮你排查这个问题,这类SessionNotCreatedException在CentOS 7环境下跑Headless Chrome是很常见的,主要和系统依赖、Chrome启动参数、权限配置这些因素有关,咱们一步步来解决:
1. 先补全系统缺失的依赖库
CentOS 7默认缺少Chrome运行必需的基础库(哪怕是Headless模式也需要),先通过yum安装:
# 安装基础图形依赖 sudo yum install -y libX11 libXext libXtst libXScrnSaver libXdamage mesa-libGL mesa-libEGL # 安装SSL、UI相关依赖 sudo yum install -y nss cups-libs libXrandr libXcursor libXinerama cairo pango atk gtk3
2. 调整Chrome启动参数(关键步骤)
你的代码里需要添加适配CentOS 7的启动参数,尤其是禁用沙箱(CentOS 7内核默认不支持Chrome沙箱机制),修改你的activate_driver()函数:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def activate_driver(): optionsChrome = Options() # 基础Headless配置 optionsChrome.add_argument('--headless') optionsChrome.add_argument('--disable-gpu') # 适配CentOS的关键参数 optionsChrome.add_argument('--no-sandbox') # 必须加,否则root/普通用户都可能启动失败 optionsChrome.add_argument('--disable-dev-shm-usage') # 解决/dev/shm临时空间不足的问题 optionsChrome.add_argument('--window-size=1920x1080') # 指定窗口大小,避免渲染异常 # 替换过时参数:用options替代chrome_options(适配Selenium 3.x+版本) driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver", options=optionsChrome) return driver
3. 验证ChromeDriver与Chrome的兼容性
你当前的Chrome(80.0.3987.116)和ChromeDriver(80.0.3987.106)主版本一致,是兼容的,但可以手动验证ChromeDriver是否能正常工作:
# 查看版本 /usr/local/bin/chromedriver --version google-chrome --version # 启动ChromeDriver并测试连接 /usr/local/bin/chromedriver & # 新开终端执行curl测试 curl http://localhost:9515/status
如果返回{"value":{"ready":true}},说明ChromeDriver本身没问题。
4. 检查权限配置
确保运行脚本的用户有执行Chrome和ChromeDriver的权限:
sudo chmod +x /usr/local/bin/chromedriver sudo chmod +x /usr/bin/google-chrome # 请根据你的Chrome实际安装路径调整
另外尽量避免用root用户直接运行(虽然加了--no-sandbox可以绕过限制,但普通用户运行更安全稳定)。
5. 排查SELinux的影响
CentOS 7默认开启的SELinux可能会阻止ChromeDriver与Chrome的通信,临时关闭测试:
sudo setenforce 0
如果问题解决了,可以修改/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,或者添加SELinux规则允许Chrome相关操作。
最后:升级Selenium版本(可选)
如果你的Selenium版本过旧,可能存在参数兼容性问题,Python 2.7支持的最新Selenium版本是3.141.0,执行升级:
pip install --upgrade selenium==3.141.0
内容的提问来源于stack exchange,提问作者Tycho Koster




