Linux无GUI环境下Python3+Selenium(Edge)会话创建失败求助
问题描述
在Windows 11上可正常运行的Selenium代码,在纯CLI无GUI的Linux机器执行时抛出SessionNotCreatedException错误。
代码示例
import time from selenium.webdriver.common.by import By from selenium import webdriver from webdriver_manager.microsoft import EdgeChromiumDriverManager browser = webdriver.Edge(EdgeChromiumDriverManager().install()) options = EdgeOptions() options.use_chromium = True options.add_argument("headless") options.add_argument("disable-gpu") browser = webdriver.Edge(options=options) browser.get("http://www.abv.bg") abv_output = browser.page_source print(abv_output)
错误信息
root@pinger-st:/sbin# python3 simo.py [WDM] - ====== WebDriver manager ====== [WDM] - Current edge version is 115.0.1901 [WDM] - Get LATEST edgedriver version for 115.0.1901 Edge [WDM] - Driver [/root/.wdm/drivers/edgedriver/linux64/115.0.1901.183/msedgedriver] found in cache Traceback (most recent call last): File "simo.py", line 5, in <module> browser = webdriver.Edge(EdgeChromiumDriverManager().install()) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/edge/webdriver.py", line 66, in __init__ desired_capabilities=capabilities) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__ self.start_session(capabilities, browser_profile) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.SessionNotCreatedException: Message: session not created: No matching capabilities found
解决方案
1. 修复代码冗余与参数问题
代码中重复实例化浏览器对象,且第一个实例未配置headless参数,在无GUI环境下无法启动。合并实例化步骤并补充Linux必需参数:
import time from selenium.webdriver.common.by import By from selenium import webdriver from webdriver_manager.microsoft import EdgeChromiumDriverManager from selenium.webdriver.edge.options import EdgeOptions # 配置浏览器选项 options = EdgeOptions() options.use_chromium = True options.add_argument("--headless=new") # 适配Edge 112+的新版无头模式 options.add_argument("--disable-gpu") options.add_argument("--no-sandbox") # 规避Linux权限限制 options.add_argument("--disable-dev-shm-usage") # 解决共享内存不足问题 # 一次性创建带驱动路径和选项的浏览器实例 browser = webdriver.Edge(executable_path=EdgeChromiumDriverManager().install(), options=options) browser.get("http://www.abv.bg") abv_output = browser.page_source print(abv_output) browser.quit() # 关闭浏览器释放资源
2. 安装Linux图形依赖库
即使无头模式,Edge仍依赖基础图形组件,根据发行版执行安装命令:
Debian/Ubuntu系:
apt-get update && apt-get install -y libglib2.0-0 libnss3 libgconf-2-4 libfontconfig1 libx11-xcb1 libxcb-dri3-0 libdrm2 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2
RHEL/CentOS系:
yum install -y glib2.x86_64 nss.x86_64 gconf2.x86_64 fontconfig.x86_64 libX11-xcb.x86_64 libxcb-dri3.x86_64 libdrm.x86_64 libXcomposite.x86_64 libXdamage.x86_64 libXfixes.x86_64 libXrandr.x86_64 libgbm.x86_64 alsa-lib.x86_64
3. 更新Selenium及依赖包
旧版Selenium与Edge 115兼容性较差,执行升级命令:
pip3 install --upgrade selenium webdriver-manager
4. 确认Edge浏览器已安装
系统未安装Edge时,即使有驱动也无法运行,安装Edge稳定版:
Debian/Ubuntu系:
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list' rm microsoft.gpg apt-get update && apt-get install -y microsoft-edge-stable
内容的提问来源于stack exchange,提问作者svaleriev
相关产品推荐
相关产品推荐

