背景
在 Windows 環境下使用 Selenium 時,Chrome 瀏覽器版本與 ChromeDriver 版本的兼容性問題是一個常見的困擾。
由于 Chrome 頻繁更新,而 ChromeDriver 需要與特定版本的 Chrome 精確匹配,導致 Selenium 代碼可能會因版本不匹配而無法正常運行。
在非容器環境中,直接使用系統安裝的 Chrome 可能會引發問題,比如自動更新導致版本不匹配。
因此,我們推薦的做法是下載 Chrome 的指定版本,并將其與匹配的 ChromeDriver 版本一起放入項目的發布目錄,確保 Selenium 運行時始終使用兼容的版本。
解決方案
下載兼容版本的 Chrome 和 ChromeDriver
首先,訪問 ChromeDriver 官方文檔中的版本選擇指南,找到與你的 Chrome 版本兼容的 ChromeDriver。
然后,下載對應版本的 Chrome 和 ChromeDriver,并將它們解壓到項目的 chrome-win64 目錄中。

將 Chrome 和 ChromeDriver 包含到發布目錄
在項目的 .csproj 文件中,添加以下配置,以確保 chrome-win64 目錄在發布時被包含到輸出目錄:
<ItemGroup>
<None Update="chrome-win64\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
這樣,在 dotnet publish 之后,chrome-win64 目錄及其內容都會被復制到發布目錄,確保部署后仍能找到 Chrome 和 ChromeDriver。
在代碼中指定 Chrome 和 ChromeDriver 的路徑
在 C# 代碼中,使用 ChromeOptions 顯式指定 Chrome 的二進制文件路徑,并使用 ChromeDriverService 指定 ChromeDriver 的路徑:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.IO;
class Program
{
static void Main()
{
var options = new ChromeOptions();
options.BinaryLocation = Path.Combine(AppContext.BaseDirectory, "chrome-win64", "chrome.exe");
var chromeService = ChromeDriverService.CreateDefaultService(
Path.Combine(AppContext.BaseDirectory, "chrome-win64"), "chromedriver.exe"
);
var driver = new ChromeDriver(chromeService, options);
driver.Navigate().GoToUrl("https://www.example.com");
Console.WriteLine(driver.Title);
driver.Quit();
}
}
運行與調試
執行程序時,Selenium 會使用 chrome-win64 目錄中的 Chrome 及 ChromeDriver,避免了系統 Chrome 版本更新導致的不兼容問題。
如果需要更新 Chrome,可以手動下載新的 Chrome 便攜版和對應的 ChromeDriver,并替換 chrome-win64 目錄中的文件。
總結
在 Windows 非容器環境中使用 Selenium 時,通過手動下載 Chrome 和 ChromeDriver 并將其包含到項目的發布目錄,可以有效避免版本兼容性問題。
這種方法確保了 Selenium 運行時始終使用正確的 Chrome 版本,提高了代碼的穩定性和可維護性。
浙公網安備 33010602011771號