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

Selenium无头爬虫Mac正常运行,Ubuntu服务器启动失败求助

Selenium无头爬虫Mac正常但Ubuntu服务器运行失败的排查与解决

问题背景

  • 本地环境:MacBook,仅安装Selenium(无需手动安装Chromedriver),爬虫功能正常
  • 服务器环境:Ubuntu Linux,使用与本地相同版本的Selenium,运行脚本时抛出本地未出现的错误

已尝试的解决方案

  • 确认本地与服务器Selenium版本一致
  • 检查服务器是否缺少无头爬虫依赖
  • 安装Google Chrome、手动指定Chromedriver路径、更换114版本Chromedriver,均未解决问题

错误信息

File "/app/apps/dashboards/management/commands/scrape.py", line 9, in handle
    NewsFetcher().fetch_articles()
  File "/app/apps/dashboards/external/redacted.py", line 126, in fetch_articles
    self.initialize_driver()
  File "/app/apps/dashboards/external/redacted.py", line 39, in initialize_driver
    self.driver = webdriver.Chrome(service=service, options=options)
  File "/venv/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
    super().__init__(
  File "/venv/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 50, in __init__
    self.service.start()
  File "/venv/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 102, in start
    self.assert_process_still_running()
  File "/venv/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 115, in assert_process_still_running
    raise WebDriverException(f"Service {self._path} unexpectedly exited. Status code was: {return_code}")
selenium.common.exceptions.WebDriverException: Message: Service /root/.cache/selenium/chromedriver/linux64/121.0.6167.85/chromedriver unexpectedly exited. Status code was: 127

原因分析

状态码127表示找不到执行所需的依赖库,Mac和Ubuntu的系统依赖差异是核心原因:

  • Mac上Chrome/Chromium的依赖已随系统或浏览器安装完善,而Ubuntu服务器默认是最小化安装,缺少Chromedriver和无头Chrome运行必需的底层库。
  • Selenium的自动管理Chromedriver功能仅负责下载对应版本的驱动,但不会自动安装浏览器运行依赖。

排查与解决建议

1. 安装无头Chrome运行必需的系统依赖

执行以下命令安装所有缺失的库:

sudo apt-get update
sudo apt-get install -y libx11-xcb1 libxcb-dri3-0 libdrm2 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 libatspi2.0-0 libxshmfence1

这些是Chrome无头模式运行必须的底层图形、音频等依赖,Ubuntu最小化环境通常不会预装。

2. 确保Chrome浏览器与Chromedriver版本完全匹配

  • 先安装对应版本的Google Chrome:
    # 示例安装121.0.6167.85版本(与错误中的Chromedriver版本一致)
    wget https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_121.0.6167.85-1_amd64.deb
    sudo dpkg -i google-chrome-stable_121.0.6167.85-1_amd64.deb
    sudo apt-get install -f  # 修复依赖问题
    
  • 验证版本匹配:执行google-chrome --version和chromedriver --version,确保主版本号完全一致。

3. 配置Selenium使用正确的浏览器路径与启动参数

在初始化Chrome驱动时,明确指定Chrome二进制文件路径,并添加Ubuntu服务器必备参数:

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver

options = Options()
options.add_argument("--headless=new")  # 使用新版无头模式
options.add_argument("--no-sandbox")  # 解决Ubuntu权限限制问题
options.add_argument("--disable-dev-shm-usage")  # 避免共享内存不足
options.binary_location = "/usr/bin/google-chrome"  # 指定Chrome安装路径

service = Service("/root/.cache/selenium/chromedriver/linux64/121.0.6167.85/chromedriver")
driver = webdriver.Chrome(service=service, options=options)

4. 检查Chromedriver的可执行权限

确保下载的Chromedriver有执行权限:

chmod +x /root/.cache/selenium/chromedriver/linux64/121.0.6167.85/chromedriver

总结

Mac系统预装了更多桌面环境依赖,而Ubuntu服务器通常是极简配置,导致Chrome无头模式运行缺少必要的底层库。通过补全系统依赖、确保浏览器与驱动版本匹配、配置正确的启动参数,即可解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:26:35