You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu虚拟环境中无法运行Selenium+ChromeDriver问题求助

排查Ubuntu虚拟环境中Selenium+ChromeDriver运行失败的方案

嘿,我来帮你一步步揪出Ubuntu虚拟环境里Selenium搭配ChromeDriver跑不起来的问题!先从最常见的几个坑入手:

1. 优先确认Chrome与ChromeDriver版本匹配

这是90%的人会踩的坑!ChromeDriver的版本必须和你系统里安装的Chrome大版本完全一致(比如Chrome是118.x,ChromeDriver也得是118.x)。

  • 查Chrome版本:终端敲 google-chrome --version
  • 给ChromeDriver加可执行权限:chmod +x /path/to/your/chromedriver
  • 如果代码里没指定ChromeDriver路径,要么把它放到系统PATH目录(比如/usr/local/bin),要么在初始化时显式指定:
    browser = webdriver.Chrome(executable_path="/path/to/chromedriver", options=options)
    

2. 补全无头Chrome依赖包

Ubuntu的无头Chrome需要一堆系统依赖,缺了就会静默失败或者报错。直接在终端跑这条命令补全:

sudo apt-get install -y libnss3 libgconf-2-4 libxss1 libappindicator1 libindicator7 chromium-browser chromium-chromedriver

如果你用的是官方Google Chrome,把chromium-browser换成google-chrome-stable就行。

3. 调整无头模式的启动参数

你的代码里只加了--headless,但Linux虚拟环境下还需要几个关键参数才能稳定运行,更新你的options配置:

options = Options()
options.add_argument("--headless=new")  # 新版无头模式,兼容性比旧的--headless好太多
options.add_argument("--no-sandbox")    # 禁用沙箱,虚拟环境下必须加,否则会被拦截
options.add_argument("--disable-dev-shm-usage")  # 解决/dev/shm空间不足的问题
options.add_argument("--disable-gpu")   # 无头模式下不需要GPU,直接禁用避免报错
options.add_argument("--window-size=1920,1080")  # 给无头浏览器设置窗口大小,避免页面布局异常

4. 适配Selenium 4+的Service配置

如果你用的是Selenium 4及以上版本,service_args已经不推荐使用了,换成Service类来配置更稳妥:

from selenium.webdriver.chrome.service import Service

# 初始化Service并传入参数
service = Service("/path/to/chromedriver")
service.args = ['--ignore-ssl-errors=true', '--ssl-protocol=any']

# 用Service实例启动浏览器
browser = webdriver.Chrome(options=options, service=service)

5. 修复等待逻辑的问题

你的代码里implicitly_wait(2)放错位置了——它得在浏览器初始化之后才生效!而且隐式等待只针对元素查找,页面加载完成最好用显式等待:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Chrome(...)
browser.implicitly_wait(10)  # 移到这里才生效
browser.get("whatever-url.com")

# 等待页面核心元素加载完成(比如等待body标签出现),避免拿到空白的page_source
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))

soup = BeautifulSoup(browser.page_source, 'html.parser')

6. 检查权限问题

  • 别用root用户运行代码!沙箱机制会阻止root启动Chrome,切换到普通用户试试。
  • 确保你的虚拟环境有读取ChromeDriver和写入Output.html的权限。

先按这个顺序排查,一般前3步就能解决大部分问题。如果还是不行,把终端里的报错信息贴出来,能更快定位!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:15