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

Linux ARM64 Docker化.NET6程序中WebDriverManager无法定位Chrome

Linux ARM64 Docker环境下.NET 6 + Selenium+Chrome运行问题

问题背景

在Linux ARM64架构的Docker容器中运行.NET 6程序,依赖Selenium.WebDriver 4.18.1和WebDriverManager 2.17.2包,执行浏览器驱动初始化代码时触发错误:System.Exception: Unable to locate installed browser for runtime platform Unix。已尝试安装Linux64版Chrome、Mac-ARM64版Chrome及chrome-headless-shell,但问题未解决。

相关代码与错误信息

.csproj依赖配置

<PackageReference Include="Selenium.WebDriver" Version="4.18.1" />
<PackageReference Include="WebDriverManager" Version="2.17.2" />

FooService.cs核心代码

new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser, Architecture.X64);
var cService = ChromeDriverService.CreateDefaultService();
_driver = new ChromeDriver(cService, options);

错误栈

System.Exception: Unable to locate installed browser for runtime platform Unix
   at WebDriverManager.Helpers.RegistryHelper.GetInstalledBrowserVersionLinux(String[] executableAndArgumentsPairs)
   at WebDriverManager.DriverConfigs.Impl.ChromeConfig.GetRawBrowserVersion()
   at WebDriverManager.DriverConfigs.Impl.ChromeConfig.GetMatchingBrowserVersion()
   at WebDriverManager.DriverManager.GetVersionToDownload(IDriverConfig config, String version)
   at WebDriverManager.DriverManager.SetUpDriver(IDriverConfig config, String version, Architecture architecture)
   at Blabla.Services.Foo.StartChrome() in /src/Bla/FooService.cs:line 46

已尝试的手动安装命令

curl -L -o chrome-headless-shell.zip "https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.22/linux64/chrome-headless-shell-<file>.zip"
unzip chrome-headless-shell.zip -d /opt
rm chrome-headless-shell.zip
export PATH="/opt:${PATH}"

解决方案

1. 安装适配ARM64的Chrome版本

之前安装的Linux64/Mac-ARM64版本与容器架构不匹配,需安装Linux ARM64版Chrome Headless Shell,修改安装命令:

# 下载对应版本的ARM64安装包
curl -L -o chrome-headless-shell.zip "https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.22/linux-arm64/chrome-headless-shell-linux-arm64.zip"
unzip chrome-headless-shell.zip -d /opt
# 将可执行文件路径加入系统PATH,确保WebDriverManager能识别
export PATH="/opt/chrome-headless-shell-linux-arm64:${PATH}"

2. 调整WebDriverManager的架构参数

代码中指定了Architecture.X64,与容器ARM64架构冲突,改为Architecture.Arm64:

new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser, Architecture.Arm64);

3. 手动指定Chrome可执行路径(可选)

若WebDriverManager仍无法识别浏览器,在ChromeOptions中直接指定路径:

var options = new ChromeOptions();
// 指定ARM64版Chrome Headless Shell路径
options.BinaryLocation = "/opt/chrome-headless-shell-linux-arm64/chrome-headless-shell";
// 添加无头模式等必要运行参数
options.AddArgument("--headless=new");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");

var cService = ChromeDriverService.CreateDefaultService();
_driver = new ChromeDriver(cService, options);

4. 修正Docker镜像基础环境

使用支持ARM64的.NET 6基础镜像,并安装Chrome运行依赖库,示例Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-bookworm-slim-arm64v8

# 安装Chrome运行依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    libglib2.0-0 \
    libnss3 \
    libfontconfig1 \
    unzip \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 安装ARM64版Chrome Headless Shell
RUN curl -L -o chrome-headless-shell.zip "https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.22/linux-arm64/chrome-headless-shell-linux-arm64.zip" \
    && unzip chrome-headless-shell.zip -d /opt \
    && rm chrome-headless-shell.zip \
    && chmod +x /opt/chrome-headless-shell-linux-arm64/chrome-headless-shell \
    && echo 'PATH="/opt/chrome-headless-shell-linux-arm64:$PATH"' >> /etc/profile

WORKDIR /app
COPY . .

ENTRYPOINT ["dotnet", "YourApp.dll"]

内容的提问来源于stack exchange,提问作者kevinob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:10:12