非容器环境中使用Selenium,提升Chrome与ChromeDiver兼容性
背景在 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 版本,提高了代码的稳定性和可维护性。
页:
[1]