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

如何解决AWS环境中Selenium Python函数的运行异常问题?

在AWS Lambda中运行Selenium Python爬虫的解决方案

核心问题分析

你遇到的几个问题本质上都和Chrome与ChromeDriver版本不兼容有关,Lambda超时大概率也是因为驱动启动失败或页面加载未完成导致的。


一、解决Chrome与ChromeDriver版本匹配问题

不需要刻意找旧版本Chrome,直接用对应版本的ChromeDriver适配当前Chrome即可:

  • 查看你的Chrome版本(比如EC2上的123.0.6312.105),下载主版本号完全一致的ChromeDriver(即123.x.x.x系列)
  • 验证版本匹配:运行chromedriver --version和google-chrome --version,确保主版本号完全对齐

二、AWS Lambda部署正确姿势

Lambda运行环境没有预装Chrome,必须手动打包或使用现成的Lambda层:

方案1:使用预构建的Chrome Lambda层

  1. 下载适配Lambda运行时(比如Python 3.11)的Chrome和ChromeDriver层
  2. 在Lambda控制台为函数添加该层
  3. 代码中指定Chrome和Driver的路径:
opts = webdriver.ChromeOptions()
opts.binary_location = "/opt/chrome/chrome"
opts.add_argument("--headless")
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-dev-shm-usage")
# 指定Driver路径
driver = webdriver.Chrome(executable_path="/opt/chromedriver", options=opts)

方案2:手动打包Chrome和Driver

  1. 在和Lambda同架构(x86_64或arm64)的环境中下载对应版本的Chrome和ChromeDriver
  2. 将Chrome解压到chrome目录,Driver放在根目录
  3. 把代码、依赖包(selenium、boto3等)、chrome目录一起打包成Zip
  4. 上传到Lambda,代码中指定对应的binary_location和executable_path

三、解决Lambda超时问题

  1. 延长超时时间:1分钟可能不足以完成Chrome启动和页面加载,建议先设为5分钟测试
  2. 优化页面等待:替换time.sleep(10)为Selenium显式等待,避免不必要的等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get("SOME_URL")
# 等待目标表格加载完成
WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//table[@class='Box-cui__sc-6h7t1h-0 TableComponents__StyledTable-cui__sc-19kjwg0-3 dISGpF']"))
)
  1. 提升Lambda内存配置:内存越高CPU性能越好,建议至少设置为1024MB

四、Docker运行报错127的解决

127错误一般是找不到Chrome或ChromeDriver的可执行文件,检查以下几点:

  • Dockerfile中是否正确安装了Chrome和对应版本的Driver
  • 确保容器内的Chrome和Driver有执行权限:RUN chmod +x /path/to/chrome /path/to/chromedriver
  • 代码中指定的路径和容器内的实际路径完全一致

代码优化建议

  • 移除硬编码的AWS密钥:Lambda通过IAM角色授权访问S3,直接使用默认客户端即可:
s3_client = boto3.client('s3')
  • 扩大异常捕获范围:当前仅捕获自定义Error类,建议捕获通用异常以便排查问题:
except Exception as err:
    return {
        "statusCode": 500,
        "body": repr(err)
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:33:13