AWS Lambda Python3.8运行Selenium报chromedriver退出码127错误
错误原因
/opt/chromedriver unexpectedly exited. Status code was: 127是Linux环境下进程启动失败的典型错误,退出码127代表系统无法正常执行目标二进制,在AWS Lambda + Selenium场景下,触发原因按概率从高到低排序:
- Chromium与ChromeDriver版本不匹配。两个二进制文件必须严格对应主版本号,任意一方版本差1个以上大版本,都会导致ChromeDriver启动时无法拉起Chromium进程,直接退出返回127
- 二进制依赖缺失。AWS Lambda的运行环境是裁剪版Amazon Linux,没有预装桌面端Chrome依赖的系统共享库(如libnss3、libatk-1.0.so、libgbm.so等),如果打包的headless-chromium没有把依赖库一并打包进Lambda层,启动时会因为找不到依赖库直接退出
- 二进制无执行权限。如果是在Windows/macOS环境下直接打包zip上传Lambda层,压缩包内的
headless-chromium和chromedriver文件默认没有可执行权限,Lambda运行时无权限拉起进程,也会返回该错误 - 额外说明:代码中使用
chrome_options参数传递配置是Selenium 3.x的旧写法,Selenium 4.x版本中该参数已被废弃,会触发参数错误,但不是导致127退出码的原因。
解决步骤
- 匹配二进制版本:选择专门为AWS Lambda编译的headless Chromium构建包,下载对应完全一致版本号的ChromeDriver,不要直接使用桌面版Chrome的二进制文件
- 配置文件权限:打包Lambda层前,在类Unix环境下对两个二进制文件执行
chmod 755 /path/to/headless-chromium /path/to/chromedriver,赋予可执行权限后再压缩打包 - 补全运行依赖:如果自行打包难度较高,可直接使用已预装所有Chromium依赖、适配Lambda运行环境的公共Lambda层,注意选择和自己Lambda运行架构(x86_64/arm64)、Python版本匹配的层资源;自行打包需要将Chromium依赖的所有.so共享库放到层的lib目录下,确保运行时可被系统加载
- 修正代码参数:将Selenium初始化的参数写法调整为兼容全版本的形式,修正后的参考代码如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def handler(event, context): options = Options() options.binary_location = '/opt/headless-chromium' options.add_argument('--headless=new') options.add_argument('--no-sandbox') options.add_argument('--single-process') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu') driver = webdriver.Chrome(executable_path='/opt/chromedriver', options=options) driver.get('https://www.google.com/') driver.quit() return { "statusCode": 200, "body": "Selenium Headless Chrome Initialized" }
Selenium与Python 3.8兼容性说明
Selenium 3.x、4.x全系列稳定版本均完全兼容Python 3.8。Python 3.8是官方长期支持版本,属于Selenium明确支持的Python版本范围,该报错和Python版本本身无关。
内容的提问来源于stack exchange,提问作者Sparsh Rawat
相关产品推荐
相关产品推荐

