求助:2023年在AWS Lambda上部署Selenium遇阻
在AWS Lambda上运行Selenium的可行方案
一、正确配置Lambda Layer(核心解决步骤)
Lambda基于Amazon Linux 2运行,必须使用适配该系统的Chrome浏览器和ChromeDriver,不能用本地Windows/mac版本:
- 下载适配Amazon Linux 2的稳定版Chrome包:
google-chrome-stable_current_x86_64.rpm - 下载与Chrome主版本完全一致的ChromeDriver
- 按固定目录结构打包Layer:
- Selenium包放在
python/lib/python3.x/site-packages/(x对应Lambda使用的Python版本,比如3.9) - Chrome和ChromeDriver放在
bin/目录下
- Selenium包放在
- 打包成zip时,直接将
python和bin目录放在zip根目录,不要嵌套外层文件夹,上传为Lambda Layer
二、Lambda函数代码示例
import os from selenium import webdriver from selenium.webdriver.chrome.options import Options def lambda_handler(event, context): # 配置Chrome无头模式参数 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--window-size=1920x1080') # 指定Lambda Layer中的Chrome和ChromeDriver路径 chrome_options.binary_location = '/opt/bin/google-chrome' driver_path = '/opt/bin/chromedriver' # 初始化驱动并执行操作 driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options) driver.get('https://example.com') page_title = driver.title driver.quit() return {'result': page_title}
三、必做的排查项
- 版本匹配:Chrome和ChromeDriver的主版本号必须完全一致,比如Chrome 119.x对应ChromeDriver 119.x
- 权限设置:打包前在本地给ChromeDriver添加可执行权限,执行命令:
chmod +x chromedriver - 资源分配:Lambda默认128MB内存不足以运行Chrome,至少分配512MB,建议1GB
- 超时设置:Selenium页面加载和操作耗时较长,将Lambda函数超时时间设置为5-10分钟
内容的提问来源于stack exchange,提问作者40 hunnid messiah
相关产品推荐
相关产品推荐

