非容器环境中使用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 版本,提高了代码的稳定性和可维护性。
非容器环境中使用Selenium,提升Chrome与ChromeDiver兼容性的更多相关文章
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数
		目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ... 
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action
		目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ... 
- Django学习系列2:django环境中安装selenium并查看selenium版本号
		在Django环境中安装selenium (django) root@ranxf-TEST:/studydisk/Python_web_TDD/superlists# conda install se ... 
- selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)
		一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ... 
- 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践
		[点击 关注「 WeiyiGeek」公众号 ] 设为「️ 星标」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ... 
- Web自动化测试python环境中安装 --selenium安装、火狐和火狐驱动版本、谷歌和谷歌驱动版本、测试
		一.安装selenium Windows命令行(cmd)输入pip install selenium(无须指定版本默认最新)或 pip install selenium==3.141.0(可指定版本) ... 
- ARCproject中加入非ARC文件,或者非ARC环境中加入ARC文件
		ARC与非ARC在一个项目中同一时候使用, 选择项目中的Targets,选中你所要操作的Target,选Build Phases,在当中Complie Sources中选择须要ARC的文件双击,并在输 ... 
- neo4j在docker容器环境中无法启动的问题
		回去过了个周末,neo4j就无法启动了 数据还没备份出来,着急啊.上周回去前刚刚在研究怎么把数据导出来,尝试了一些容器导出的方法,没有成功.周一回来就无法启动了... 表现为启动后过几十秒又变为sto ... 
- 非spring环境中配置文件工具
		http://commons.apache.org/proper/commons-configuration/ 注意:属性的值使用","分割,会造成读取属性值不正确的问题.建议使用 ... 
- .Net6在Docker环境下操作Selenium.Chrome的那些坑
		.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图. 实现 安装Nuget包 <PackageReference Include="Selenium.Chr ... 
随机推荐
- mybatis-plus逻辑删除不生效的解决办法
			我们在使用mybatis-plus时,一般设备逻辑删除是非常简单的,基本上在yaml等配置文件中做一下配置.然后在字段上注解@TableLogic就可以了.有不清楚的,可以参考https://www. ... 
- NoSuchAlgorithmException
			今天在写UT时遇到了下面的问题: 1. 使用的powermock来处理static方法; 2. 静态方法里的却有使用到org.apache.http.client(4.3.1)的方法 异常如下: Ca ... 
- 跟着 8.6k Star 的开源数据库,搞 RAG!
			过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目.然而,随着项目数量的增加,不少用户反馈:"搜索功能不好用,找不到想要的项目!" 这让我意识到,仅仅收 ... 
- Qt/C++音视频开发80-ffmpeg实现srt推拉流/实时性非常好/音视频同步/支持格式众多
			一.前言 目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTP+FLV或者HLS,直播延时一般大于3秒,广泛应用秀场.游戏. ... 
- Qt音视频开发22-音频播放QAudioOutput
			一.前言 以前一直以为只有Qt5以后才有QAudioOutput播放音频,其实从Qt4.6开始就有,在Qt6中变成了QAudioSink,功能一样.用QAudioOutput播放音频pcm数据极其方便 ... 
- Qt编写视频监控系统(移动侦测/遮挡报警/区域入侵/越界侦测/报警输入输出等)
			一.前言 得益于标准的onvif协议,各大监控厂商的设备都会支持onvif协议,在onvif协议中就包括了事件订阅机制,通过这个机制,可以拿到各种报警事件,比如移动侦测/遮挡报警/区域入侵/越界侦测/ ... 
- Qt编写地图综合应用49-地图类型(街道图、卫星图)
			一.前言 地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内 ... 
- Typora设置自定义脚本上传图片
			搭建图床服务 这里利用CloudFlare搭建免费的图床服务 cf-image-hosting 部署Pages $ git clone https://github.com/ifyour/cf-ima ... 
- BotSharp 4.0 Sidecar:迈向更大规模化的AI Agent平台框架
			BotSharp 是一个功能强大的开源项目,由 SciSharp[1] 社区开发和维护,旨在实现.NET技术栈下高度可定制的多智能体解决方案.为开发高效的对话式 AI 系统提供了极大的灵活性.通过其模 ... 
- 关于前端上传excell时间的问题
			当前端导入excell里的数据时,只能获取到下面类似的这种数据 Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1. 转化的思路和对Excel中 ... 
