You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS7服务器用Selenium+Python调用Headless Chrome报错求助

解决CentOS 7上Selenium调用Headless Chrome的SessionNotCreatedException问题

我来帮你排查这个问题,这类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

火山引擎 最新活动