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

AWS EC2 Ubuntu20.04下Python Selenium启动Chrome报错排查

AWS EC2 Ubuntu 20.04 Selenium动态爬取环境修复方案

根因说明

报错核心来自三点:

  • 服务器无GUI环境缺少Chromium运行依赖的系统库,且启动参数缺失必填项,触发unknown error: DevToolsActivePort file doesn't exist错误
  • Selenium 4版本废弃了旧的chrome_options、直接传executable_path的写法,旧写法会触发DeprecationWarning警告
  • webdriver-manager默认查找官方Google Chrome二进制路径,apt安装的Chromium路径不在它的检索列表里,触发KeyError: 'google-chrome'异常

第一步:安装系统级依赖(必做)

直接通过apt源安装版本严格匹配的Chromium和ChromeDriver,不需要手动下载二进制包,从根源避免版本不兼容问题,执行以下命令:

sudo apt update && sudo apt upgrade -y
sudo apt install -y chromium-browser chromium-chromedriver xvfb libxi6 libgconf-2-4 libnss3 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0

安装完成后可执行which chromium-browser和which chromedriver确认路径,默认分别为/usr/bin/chromium-browser和/usr/bin/chromedriver。

不需要安装webdriver-manager,apt安装的驱动和浏览器版本100%匹配,稳定性高于自动拉取的版本,之前装过的可以执行pip uninstall -y webdriver-manager卸载,避免冲突。

第二步:正确初始化Selenium(无警告无报错)

使用Selenium 4标准写法,配齐无GUI环境必填启动参数,代码如下:

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

# 配置启动参数
chrome_options = Options()
# 核心必填参数(少一个都可能启动失败)
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
# 业务自定义参数
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--hide-scrollbars")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-extensions")
# 显式指定Chromium二进制路径
chrome_options.binary_location = "/usr/bin/chromium-browser"

# 初始化驱动
service = Service(executable_path="/usr/bin/chromedriver")
driver = webdriver.Chrome(service=service, options=chrome_options)

# 测试验证
driver.get("https://example.com")
print("页面标题:", driver.title)
# 后续动态爬取逻辑可配合隐式/显式等待实现
# driver.implicitly_wait(10)
driver.quit()

关键参数说明:

  • --headless=new:使用Chromium新版无头模式,兼容所有动态渲染特性,旧版--headless参数存在部分JS加载兼容问题
  • --no-sandbox:root/非桌面用户运行Chromium的必填参数,禁用沙箱适配服务器环境
  • --disable-dev-shm-usage:解决EC2默认/dev/shm共享内存空间不足导致的浏览器崩溃问题

异常排查清单

  • 仍报DevToolsActivePort file doesn't exist:直接在终端执行/usr/bin/chromium-browser --headless=new --no-sandbox https://example.com,根据终端输出的缺失依赖提示安装对应包即可
  • 报驱动与浏览器版本不匹配:执行sudo apt install --reinstall chromium-browser chromium-chromedriver重新安装对齐版本
  • 动态内容加载不全:配置driver.implicitly_wait(10)隐式等待,或使用WebDriverWait针对目标元素做显式等待,不要用固定time.sleep
  • 出现弃用警告:检查代码是否还在使用chrome_options=传参、是否直接给webdriver.Chrome()传executable_path,这两种写法在Selenium 4中已废弃,必须按示例代码用Service对象传驱动路径、用options=传配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:54:23