如何在Amazon EC2实例非headless模式下运行Selenium加载PDF
报错原因说明
DevToolsActivePort file doesn't exist 报错的核心原因是Amazon EC2默认Linux实例没有图形化桌面环境,Chrome非headless模式启动时需要依赖X11显示服务,找不到对应服务就会直接崩溃。
解决方案
方案1:优先使用Chrome新版headless模式(无需配置虚拟显示,操作最简单)
Chrome 112及以上版本推出的--headless=new模式,和普通非headless模式功能完全一致,支持PDF渲染,同时保留了headless模式无需图形环境的优势,完美适配EC2无桌面的运行环境,不需要修改为非headless模式就能解决PDF加载问题。
示例代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 启用新版完整功能headless模式,替代旧的options.headless = True配置 options.add_argument("--headless=new") # EC2环境必备启动参数,避免权限和共享内存不足问题 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") # 配置允许Chrome直接渲染PDF,不自动下载 options.add_experimental_option("prefs", { "plugins.always_open_pdf_externally": False }) driver = webdriver.Chrome(options=options)
方案2:必须使用非headless模式的配置方法
如果有特殊需求必须关闭headless模式,可以通过Xvfb工具模拟虚拟图形环境运行Chrome。
步骤1:安装系统依赖
- Amazon Linux/CentOS 系列实例执行:
sudo yum install xorg-x11-server-Xvfb liberation-fonts xorg-x11-fonts-*
- Ubuntu/Debian 系列实例执行:
sudo apt update && sudo apt install xvfb fonts-liberation xfonts-100dpi xfonts-75dpi xfonts-scalable
步骤2:安装Python依赖
pip install pyvirtualdisplay
步骤3:调整运行代码
from pyvirtualdisplay import Display from selenium import webdriver from selenium.webdriver.chrome.options import Options # 启动虚拟显示器,分辨率可自行调整 display = Display(visible=0, size=(1920, 1080)) display.start() options = Options() options.headless = False # EC2环境必备启动参数 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") # 配置PDF渲染权限 options.add_experimental_option("prefs", { "plugins.always_open_pdf_externally": False }) driver = webdriver.Chrome(options=options) # 业务逻辑运行结束后关闭资源 # driver.quit() # display.stop()
注意事项
- 请确保Chrome浏览器和ChromeDriver的大版本号完全匹配,避免出现兼容性问题
- EC2实例配置建议至少1G内存,否则Chrome启动容易出现崩溃
内容的提问来源于stack exchange,提问作者Galen BlueTalon
相关产品推荐
相关产品推荐

