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

AWS EC2红帽实例Selenium ChromeDriver问题排查求助

问题描述

在Red Hat系统的AWS EC2实例上配置Selenium WebDriver时出现异常,当前Chrome版本为120.0.6099.109。尝试安装对应版本ChromeDriver(如120.0.6099.71)后,Python脚本间歇性故障:偶尔能正常运行,多数时候提示chrome has crashed,更换多个ChromeDriver版本无效。

本地Chrome版本信息:

$ google-chrome --version
Google Chrome 120.0.6099.109

Python脚本片段:

chrome_options = webdriver.ChromeOptions()
prefs = { 
    "download.prompt_for_download": False,
    "plugins.always_open_pdf_externally": True,
    "download.open_pdf_in_system_reader": False,
    "profile.default_content_settings.popups": 0,
    "download.default_directory": file_path_descargas_guias
}
chrome_options.add_experimental_option('prefs', prefs)


chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=chrome_options)

多数时候Jupyter Labs单元格长时间运行后抛出错误:

---------------------------------------------------------------------------
SessionNotCreatedException                Traceback (most recent call last)
Cell In[11], line 16
     13 chrome_options.add_argument('--no-sandbox')
     14 chrome_options.add_argument("--disable-dev-shm-usage")
---> 16 driver = webdriver.Chrome(options=chrome_options)

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py:45, in WebDriver.__init__(self, options, service, keep_alive)
     42 service = service if service else Service()
     43 options = options if options else Options()
---> 45 super().__init__(
     46     browser_name=DesiredCapabilities.CHROME["browserName"],
     47     vendor_prefix="goog",
     48     options=options,
     49     service=service,
     50     keep_alive=keep_alive,
     51 )

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py:61, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, options, service, keep_alive)
     52 executor = ChromiumRemoteConnection(
     53     remote_server_addr=self.service.service_url,
     54     browser_name=browser_name,
   (...)
     57     ignore_proxy=options._ignore_local_proxy,
     58 )
     60 try:
---> 61     super().__init__(command_executor=executor, options=options)
     62 except Exception:
     63     self.quit()

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:209, in WebDriver.__init__(self, command_executor, keep_alive, file_detector, options)
    207 self._authenticator_id = None
    208 self.start_client()
---> 209 self.start_session(capabilities)

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:293, in WebDriver.start_session(self, capabilities)
    286 """Creates a new session with the desired capabilities.
    287 
    288 :Args:
    289  - capabilities - a capabilities dict to start the session with.
    290 """
    292 caps = _create_caps(capabilities)
---> 293 response = self.execute(Command.NEW_SESSION, caps)["value"]
    294 self.session_id = response.get("sessionId")
    295 self.caps = response.get("capabilities")

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:348, in WebDriver.execute(self, driver_command, params)
    346 response = self.command_executor.execute(driver_command, params)
    347 if response:
---> 348     self.error_handler.check_response(response)
    349     response["value"] = self._unwrap_value(response.get("value", None))
    350     return response

File ~/anaconda3/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:229, in ErrorHandler.check_response(self, response)
    227         alert_text = value["alert"].get("text")
    228     raise exception_class(message, screen, stacktrace, alert_text)  # type: ignore[call-arg]  # mypy is not smart enough here
---> 229 raise exception_class(message, screen, stacktrace)

SessionNotCreatedException: Message: session not created: DevToolsActivePort file doesn't exist
Stacktrace:
#0 0x5635242acd33 <unknown>
#1 0x563523f69f87 <unknown>
#2 0x563523fa5e21 <unknown>
#3 0x563523fa1d9f <unknown>
#4 0x563523f9e4de <unknown>
#5 0x563523feea90 <unknown>
#6 0x563523fe30e3 <unknown>
#7 0x563523fab044 <unknown>
#8 0x563523fac44e <unknown>
#9 0x563524271861 <unknown>
#10 0x563524275785 <unknown>
#11 0x56352425f285 <unknown>
#12 0x56352427641f <unknown>
#13 0x56352424320f <unknown>
#14 0x56352429a028 <unknown>
#15 0x56352429a1f7 <unknown>
#16 0x5635242abed4 <unknown>
#17 0x7f84fd69f802 start_thread

已将ChromeDriver加入PATH,但问题未解决,寻求以下建议:

  1. 适配Linux/Red Hat系统、Chrome 120.0.6099.109的推荐ChromeDriver版本;
  2. 在无显示硬件的AWS EC2实例上运行无头模式Selenium WebDriver的特定配置;
  3. 正确设置ChromeDriver路径的方法。

解决方案

1. 匹配Chrome版本的ChromeDriver

ChromeDriver版本必须与Chrome主版本完全匹配,你的Chrome是120.0.6099.109,对应ChromeDriver的正确版本是120.0.6099.71——这个版本是官方针对Chrome 120.0.6099.x发布的稳定版,不要尝试其他版本,版本不匹配是间歇性崩溃的常见原因。

2. AWS EC2无头模式优化配置

EC2实例无桌面环境,且默认/dev/shm空间有限,需补充以下配置参数:

  • 明确指定现代无头模式参数:--headless=new(旧--headless在新版Chrome中兼容性差)
  • 禁用GPU加速:--disable-gpu(无硬件GPU时必须)
  • 设置固定窗口尺寸:--window-size=1920,1080(避免渲染异常)
  • 补充资源优化参数:--disable-extensions、--disable-plugins、--disable-background-timer-throttling(减少资源占用)

修改后的ChromeOptions配置:

chrome_options = webdriver.ChromeOptions()
prefs = { 
    "download.prompt_for_download": False,
    "plugins.always_open_pdf_externally": True,
    "download.open_pdf_in_system_reader": False,
    "profile.default_content_settings.popups": 0,
    "download.default_directory": file_path_descargas_guias
}
chrome_options.add_experimental_option('prefs', prefs)

# 核心优化参数
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("--disable-extensions")
chrome_options.add_argument("--disable-plugins")
chrome_options.add_argument("--disable-background-timer-throttling")

driver = webdriver.Chrome(options=chrome_options)

若EC2实例内存较小(如t2.micro),建议升级实例规格,或增加交换空间:

# 创建4GB交换文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

3. 正确设置ChromeDriver路径

即使加入PATH,有时因环境变量优先级问题仍会失效,建议直接指定路径:

  1. 将ChromeDriver解压到固定目录,例如/usr/local/bin/chromedriver
  2. 修改权限确保可执行:
sudo chmod +x /usr/local/bin/chromedriver
  1. 在Python脚本中明确指定ChromeDriver路径:
from selenium.webdriver.chrome.service import Service

# 指定ChromeDriver路径
service = Service(executable_path='/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)

验证ChromeDriver是否正常:

chromedriver --version

输出应为ChromeDriver 120.0.6099.71 (...)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:29:51