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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:57:06