背景

在 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 版本,提高了代码的稳定性和可维护性。

非容器环境中使用Selenium,提升Chrome与ChromeDiver兼容性的更多相关文章

  1. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  2. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  3. Django学习系列2:django环境中安装selenium并查看selenium版本号

    在Django环境中安装selenium (django) root@ranxf-TEST:/studydisk/Python_web_TDD/superlists# conda install se ...

  4. selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)

    一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ...

  5. 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践

    [点击 关注「 WeiyiGeek」公众号 ] 设为「️ 星标」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ...

  6. Web自动化测试python环境中安装 --selenium安装、火狐和火狐驱动版本、谷歌和谷歌驱动版本、测试

    一.安装selenium Windows命令行(cmd)输入pip install selenium(无须指定版本默认最新)或 pip install selenium==3.141.0(可指定版本) ...

  7. ARCproject中加入非ARC文件,或者非ARC环境中加入ARC文件

    ARC与非ARC在一个项目中同一时候使用, 选择项目中的Targets,选中你所要操作的Target,选Build Phases,在当中Complie Sources中选择须要ARC的文件双击,并在输 ...

  8. neo4j在docker容器环境中无法启动的问题

    回去过了个周末,neo4j就无法启动了 数据还没备份出来,着急啊.上周回去前刚刚在研究怎么把数据导出来,尝试了一些容器导出的方法,没有成功.周一回来就无法启动了... 表现为启动后过几十秒又变为sto ...

  9. 非spring环境中配置文件工具

    http://commons.apache.org/proper/commons-configuration/ 注意:属性的值使用","分割,会造成读取属性值不正确的问题.建议使用 ...

  10. .Net6在Docker环境下操作Selenium.Chrome的那些坑

    .Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图. 实现 安装Nuget包 <PackageReference Include="Selenium.Chr ...

随机推荐

  1. mysql数据库 主从同步

    我们知道mysql数据库为了得到更高性能,一般会读写分离.主库用于写操作,比如用于执行的insert.update操作:从库用于读,也就是常见的select操作. 写数据都在主库(master)操作, ...

  2. Windows10 64环境下用Qt5.12.12自带的mingw730_64构建编译OpenCV4.1.0时cmake-3.20.6中的参数配置

    一.环境条件说明: 操作系统:Windows10 64环境 编译工具:用Qt5.12.12自带的mingw730_64构建 构建对象:编译OpenCV4.1.0的Release 64位和Debug 6 ...

  3. C#中如何将图片添加为程序的资源

    C#中将图片添加为程序的资源的步骤: 1.在C#程序的"Properties"文件夹中双击Resources.resx文件,以便打开资源文件,使其处于可编辑状态: 2.在打开后的R ...

  4. 即时通讯技术文集(第11期):IM通信格式的选型及Protobuf专题 [共16篇]

    为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第11 期. [- 1 -] 如何选择即时通讯应用的数据传输格式 [链接] http://www. ...

  5. 详解AQS五:深入理解共享锁CountDownLatch

    CountDownLatch是一个常用的共享锁,其功能相当于一个多线程环境下的倒数门闩.CountDownLatch可以指定一个计数值,在并发环境下由线程进行减一操作,当计数值变为0之后,被await ...

  6. 让element的el-dialog居中显示

    我发现element的弹窗偏上,有点不太美观,所以就让它居中显示,直接更改css样式就可以 /deep/.el-dialog__wrapper { text-align: center; white- ...

  7. Solution Set -「LOCAL」冲刺省选 Round XXXI

    \(\mathscr{Summary}\)   前期节奏太懒散,后面发现 C 题是水题都没时间写,提起精神来啊!   A 题卡得比较久,对线性基的理解不够深刻,思来想去半天才把转移系数调对.B 题也卡 ...

  8. manim边做边学--缩放变换

    使用 Manim 进行动画创作时,缩放变换是一项强大且实用的功能. 当我们处理复杂的科学模型可视化.数学原理演示时,缩放变换可以帮助我们在不改变元素位置关系的基础上,突出关键信息,引导观众聚焦于特定的 ...

  9. 【python】如何优雅的终止while循环

    1. 背景需求 python需要与外界或终端交互时,常常需要使用while循环一直跑. 如果需要终止程序,一般使用Ctrl+c,此时终端会打印一大堆backtrace,并且无法保留当前运行的状态,非常 ...

  10. Tesseract-OCR使用有感

    这玩意儿就只有一个Tesseract.dll 就算有其它的加上x64目录下的另外两个dll leptonica-1.80.0.dll  tesseract41.dll也不过几兆而已,但是 但是 但是 ...