AWS容器环境中WebDriver无法正常运行问题求助
解决方案
1. 修复ChromeDriver的权限错误
你的fetch_chromedriver.sh脚本最后两行存在致命错误:
&& chmod -x /usr/local/bin/chromedriver \ && chmod -x /usr/local/bin/*
这会将chromedriver及/usr/local/bin下所有文件设置为不可执行,直接导致WebDriver无法启动。删除这两行,仅保留赋予chromedriver执行权限的命令即可,同时优化脚本自动匹配Chrome版本:
修正后的fetch_chromedriver.sh:
#!/bin/bash set -x # 获取已安装Chrome的版本,保证Driver与浏览器版本严格匹配 CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+') # 从Chrome官方测试镜像源下载对应版本的Driver CHROMEDRIVER_URL="https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROME_VERSION}/linux64/chromedriver-linux64.zip" # 下载并安装ChromeDriver curl -sSL "$CHROMEDRIVER_URL" -o chromedriver_linux64.zip \ && unzip chromedriver_linux64.zip \ && rm chromedriver_linux64.zip \ && chmod +x chromedriver-linux64/chromedriver \ && mv chromedriver-linux64/chromedriver /usr/local/bin/ \ && rm -rf chromedriver-linux64
2. 强制Selenium使用手动安装的ChromeDriver,禁用Selenium Manager
Lambda环境网络受限,Selenium Manager无法正常工作,需直接指定Driver路径并关闭自动管理逻辑:
修改你的setup_webdriver方法:
from selenium import webdriver from selenium.webdriver.chrome.service import Service def setup_webdriver(): opts = webdriver.ChromeOptions() # Lambda运行Chrome必需的配置 opts.add_argument('--headless=new') opts.add_argument('--no-sandbox') opts.add_argument('--disable-dev-shm-usage') opts.add_argument('--disable-gpu') opts.add_argument('--window-size=1920,1080') # 显式指定手动安装的ChromeDriver路径 service = Service(executable_path='/usr/local/bin/chromedriver') # 禁用Selenium Manager自动查找逻辑 service.manager = None driver = webdriver.Chrome(service=service, options=opts) return driver
3. 优化Dockerfile确保版本匹配
修改Dockerfile,安装Chrome后立即调用修正后的脚本下载对应版本的Driver:
FROM public.ecr.aws/lambda/python:3.11 # 安装基础依赖 RUN yum update -y && yum install -y wget unzip curl # 安装Chrome浏览器 RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm \ && yum localinstall -y google-chrome-stable_current_*.rpm \ && rm google-chrome-stable_current_*.rpm # 复制并执行Driver安装脚本 COPY fetch_chromedriver.sh . RUN chmod +x fetch_chromedriver.sh && ./fetch_chromedriver.sh # 安装Python依赖 COPY requirements.txt . RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # 复制业务代码 COPY . ${LAMBDA_TASK_ROOT} CMD ["main.lambda_handler"]
4. 验证镜像内版本一致性
构建镜像后,可进入容器验证版本是否匹配:
docker run -it --rm <你的镜像ID> bash # 检查Chrome版本 google-chrome --version # 检查ChromeDriver版本 chromedriver --version
确保两者主版本号完全一致(例如均为115.x.x.x)。
内容的提问来源于stack exchange,提问作者Andres De Innocentiis
相关产品推荐
相关产品推荐

