You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:38:16