如何在Python3.8+/3.9版本的AWS Lambda中运行Selenium
AWS Lambda Python3.7+ 运行Selenium解决chromedriver路径问题
问题核心
报错'chromedriver' executable needs to be in PATH的本质原因:
- Lambda默认环境变量PATH不包含自定义层中chromedriver的存放路径
- 自定义层打包结构错误,导致chromedriver未被放置在Lambda可识别的目录
- Selenium版本升级后,初始化参数格式发生变化(旧版
chrome_options参数已被弃用)
解决步骤
1. 修正自定义层打包结构
Chromedriver层
- 下载与Lambda架构(x86_64/arm64)匹配的chromedriver,版本需和headless-chromium完全一致
- 将chromedriver直接放在压缩包根目录(禁止嵌套文件夹),命名为
chromedriver,压缩成chromedriver.zip - 提前在Linux环境下给chromedriver添加可执行权限:
chmod +x chromedriver
Selenium Python层
- 创建目录结构:
python/lib/pythonX.X/site-packages(X.X对应Lambda使用的Python版本,如3.8) - 将Selenium安装到该目录:
pip install selenium -t python/lib/python3.8/site-packages/ - 压缩整个
python文件夹为selenium-layer.zip
2. 修正Lambda代码
针对Selenium 4.x版本,使用Service类指定chromedriver绝对路径,同时更新参数格式:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service def lambda_handler(event, context): options = Options() options.binary_location = '/opt/headless-chromium' options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--single-process') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu') options.add_argument('--window-size=1920,1080') # 明确指定chromedriver的绝对路径 service = Service(executable_path='/opt/chromedriver') driver = webdriver.Chrome(service=service, options=options) try: driver.get('https://www.google.com/') title = driver.title response = { "statusCode": 200, "body": title } finally: driver.quit() # 确保浏览器资源被正确释放 return response
3. 额外检查项
- 确认Lambda函数已添加上述两个自定义层
- 将Lambda内存配置调整为至少1024MB(headless浏览器运行需要足够内存)
- 验证chromedriver与headless-chromium的版本完全匹配(版本不兼容会导致启动失败)
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

