求指导:获取AWS Lambda适配的最新Chrome二进制文件下载路径
获取适配AWS Lambda的Chrome二进制文件(适配ChromeDriver 79.x)
既然你已经搞定了ChromeDriver 79.0.3945.36,一定要注意Chrome二进制版本必须和Driver完全匹配——版本不兼容可是Selenium最常见的坑之一。下面一步步教你搞定适配Lambda的Chrome文件:
1. 下载对应版本的Linux Chrome二进制
Lambda运行在Amazon Linux 2(x86_64架构)环境下,所以得下载Linux x64版本的无头Chrome(毕竟Lambda没图形界面):
- 直接从Google官方Linux源获取指定版本的Chrome rpm包:
wget https://dl.google.com/linux/chrome/rpm/stable/x86_64/google-chrome-stable-79.0.3945.36-1.x86_64.rpm - 解压rpm包提取核心二进制文件:
rpm2cpio google-chrome-stable-79.0.3945.36-1.x86_64.rpm | cpio -idmv - 解压完成后,Chrome二进制会在
./opt/google/chrome/google-chrome路径下,把这个文件和相关依赖准备好,后续要放到Lambda环境里。
2. 适配Lambda的文件系统与依赖
Lambda只有/tmp目录是可写的,而且默认缺少部分Chrome依赖库,得这么处理:
- 二进制存放方式:要么把Chrome二进制打包到Lambda部署包里,要么在Lambda启动时从S3下载到
/tmp目录。 - 依赖补全:Amazon Linux 2默认缺
libX11、libXcomposite这类Chrome依赖,两种解决办法:- 办法一:把缺失的依赖库和Chrome二进制一起打包,放到部署包的
/tmp/lib目录,然后设置环境变量LD_LIBRARY_PATH=/tmp/lib。 - 办法二:直接用社区预打包好的Lambda Layer,这类Layer已经包含了Chrome和所有依赖,添加到你的Lambda函数里就能用,省得自己折腾依赖。
- 办法一:把缺失的依赖库和Chrome二进制一起打包,放到部署包的
3. 在Lambda代码里配置Selenium
拿到Chrome二进制后,代码里要指定路径和无头模式,举个Python例子:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def lambda_handler(event, context): 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二进制路径 chrome_options.binary_location = "/tmp/google-chrome" # 初始化Driver driver = webdriver.Chrome(executable_path="/tmp/chromedriver", options=chrome_options) # 这里写你的Selenium业务逻辑 driver.get("https://example.com") print(driver.title) driver.quit()
关键注意点
- 版本严格匹配:Chrome和ChromeDriver的主版本号必须完全一致(比如都是79.0.3945.36),不然会直接抛出
SessionNotCreatedException。 - 部署包大小:Lambda未压缩的部署包不能超过250MB,所以建议用压缩后的二进制,或者通过S3动态下载到
/tmp。 - 冷启动优化:把二进制打包到部署包或使用Layer,比启动时从S3下载能减少冷启动时间。
内容的提问来源于stack exchange,提问作者Pransh Tiwari
相关产品推荐
相关产品推荐

