AWS Lambda中C# Selenium调用Chrome遇Exec format error求助
解决AWS Lambda(arm64)上Selenium ChromeDriver执行格式错误问题
问题根源
报错Exec format error是因为Selenium自动调用的selenium-manager二进制文件架构与Lambda的arm64架构不匹配——默认情况下Selenium Manager可能下载了x86_64版本的二进制,无法在arm64环境运行。
解决方案
绕过Selenium Manager的自动检测,直接指定你层中已有的arm64版本Chromedriver路径:
1. 修改ChromeDriver初始化代码
在创建ChromeDriver时,手动指定ChromeDriverService的路径,避免Selenium Manager自动启动:
public void DownloadFile(string downloadPath) { var options = GetChromeOptions(downloadPath); // 从环境变量获取chromedriver路径 var driverPath = Environment.GetEnvironmentVariable("DRIVER_PATH"); // 初始化DriverService var driverService = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath)); using (IWebDriver driver = new ChromeDriver(driverService, options)) { try { driver.Navigate().GoToUrl(_config.BaseUrl); // 其他操作 } catch (Exception ex) { _logger.Error(ex, "Error downloading file"); } } }
2. 额外配置(可选)
如果仍有问题,添加环境变量彻底禁用Selenium Manager的自动管理:
在Lambda的环境变量中新增:
SE_MANAGER_SKIP=true
3. 验证层中二进制架构
确保你的chrome-layer中的chrome-headless-shell和chromedriver都是arm64架构的版本:
- 本地可执行
file chrome-headless-shell和file chromedriver命令,验证输出是否包含aarch64字样。
关键说明
- 直接指定DriverService路径会完全跳过Selenium Manager的自动检测逻辑,从根源避免架构不匹配问题。
- 必须保证Lambda函数和附加层的架构完全一致(均为arm64),禁止混用x86和arm资源。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

