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
相关产品推荐
相关产品推荐

