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

