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.0webdriver-manager==4.0.2chromedriver==114.0.5735.90aws-mwaa-local-runner v2.8.1
复现步骤
- 下载AWS MWAA localrunner v2.8.1
- 安装上述依赖
- 执行
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依赖与启动参数
- 预装系统依赖:
通过MWAA自定义镜像功能(仅支持部分MWAA版本),在基础镜像中安装Chromium及依赖库:apt-get update && apt-get install -y chromium-browser libnss3 libatk1.0-0 libxss1 libgtk-3-0 libgbm1 - 调整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, ) - 权限配置:确保MWAA执行角色有足够权限访问相关文件,或在自定义镜像中调整文件权限。
方案2:使用远程Selenium Grid服务
将Selenium运行在独立的EC2实例或EKS集群上搭建Selenium Grid,MWAA的DAG通过远程连接使用:
- 在EC2/EKS上部署Selenium Grid(可使用官方Docker镜像)。
- 在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 ) - 配置MWAA安全组,允许访问Selenium Grid的4444端口。
内容的提问来源于stack exchange,提问作者food-destroyer-big-bone-monsta
相关产品推荐
相关产品推荐

