背景
在 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 版本,进步了代码的稳定性和可维护性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |