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

AWS MWAA中Selenium Webdriver意外退出问题求助

在AWS MWAA中运行Selenium遇到Chromium状态码-5崩溃的问题

问题描述

尝试在AWS MWAA中定期运行Selenium,但每次Chromium都会以状态码-5崩溃,搜索该状态码未找到有效信息,同时想了解在AWS MWAA中正确运行Selenium的方式(已知无法在MWAA旁部署Docker容器运行Selenium)。

运行代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromiumService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.os_manager import ChromeType
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new")
driver = webdriver.Chrome(
    service=ChromiumService(
        ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()
    ),
    options=options,
)

错误信息

>>> options = Options()
>>> options.add_argument("--headless=new")
>>> driver = webdriver.Chrome(
...             service=ChromiumService(
...                 ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()
...             ),
...             options=options,
...         )

DEBUG:selenium.webdriver.common.driver_finder:Skipping Selenium Manager; path to chrome driver specified in Service class: /usr/local/airflow/.wdm/drivers/chromedriver/linux64/114.0.5735.90/chromedriver
DEBUG:selenium.webdriver.common.service:Started executable: `/usr/local/airflow/.wdm/drivers/chromedriver/linux64/114.0.5735.90/chromedriver` in a child process with pid: 19414 using 0 to output -3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/airflow/.local/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
    super().__init__(
  File "/usr/local/airflow/.local/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py", line 55, in __init__
    self.service.start()
  File "/usr/local/airflow/.local/lib/python3.11/site-packages/selenium/webdriver/common/service.py", line 102, in start
    self.assert_process_still_running()
  File "/usr/local/airflow/.local/lib/python3.11/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 /usr/local/airflow/.wdm/drivers/chromedriver/linux64/114.0.5735.90/chromedriver unexpectedly exited. Status code was: -5

版本信息

  • selenium==4.21.0
  • webdriver-manager==4.0.2
  • chromedriver==114.0.5735.90
  • aws-mwaa-local-runner v2.8.1

复现步骤

  1. 下载AWS MWAA localrunner v2.8.1
  2. 安装上述依赖
  3. 执行docker exec -it {container_id} /bin/bash进入容器后运行脚本

问题解答

状态码-5崩溃的原因

状态码-5对应Chromium的SIGTRAP信号,通常由以下情况导致:

  • 依赖缺失:MWAA容器或运行环境缺少Chromium必需的系统库(如libnss3、libatk1.0-0、libxss1等),启动时触发陷阱错误。
  • 权限不足:Airflow运行用户无足够权限访问Chromium/chromedriver执行文件,或无法创建临时文件目录。
  • 版本不兼容:chromedriver与Chromium版本不匹配(尽管webdriver-manager自动匹配,但容器环境可能存在缓存或安装异常)。
  • 资源限制:MWAA环境内存、CPU资源不足,导致Chromium启动失败。

AWS MWAA中正确运行Selenium的方式

由于MWAA不允许在Airflow实例旁部署Docker容器,推荐以下两种方案:

方案1:配置MWAA环境的Chromium依赖与启动参数

  1. 预装系统依赖:
    通过MWAA自定义镜像功能(仅支持部分MWAA版本),在基础镜像中安装Chromium及依赖库:
    apt-get update && apt-get install -y chromium-browser libnss3 libatk1.0-0 libxss1 libgtk-3-0 libgbm1
    
  2. 调整Selenium启动参数:
    添加容器环境必需的参数,规避权限和资源问题:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service as ChromiumService
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--headless=new")
    options.add_argument("--no-sandbox")  # 禁用沙箱解决容器权限问题
    options.add_argument("--disable-dev-shm-usage")  # 避免/dev/shm空间不足
    options.add_argument("--disable-gpu")
    options.binary_location = "/usr/bin/chromium-browser"  # 指定系统预装的Chromium路径
    
    driver = webdriver.Chrome(
        service=ChromiumService("/usr/bin/chromedriver"),  # 使用系统预装的chromedriver
        options=options,
    )
    
  3. 权限配置:确保MWAA执行角色有足够权限访问相关文件,或在自定义镜像中调整文件权限。

方案2:使用远程Selenium Grid服务

将Selenium运行在独立的EC2实例或EKS集群上搭建Selenium Grid,MWAA的DAG通过远程连接使用:

  1. 在EC2/EKS上部署Selenium Grid(可使用官方Docker镜像)。
  2. 在MWAA的DAG中配置远程WebDriver连接:
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    driver = webdriver.Remote(
        command_executor='http://<selenium-grid-ip>:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME
    )
    
  3. 配置MWAA安全组,允许访问Selenium Grid的4444端口。

内容的提问来源于stack exchange,提问作者food-destroyer-big-bone-monsta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:44:57