Selenium C#中如何获取浏览器及驱动版本?含控制台提取需求
可以从控制台输出提取驱动版本,实现自动化版本匹配
完全可行,而且有两种更可靠的方式实现,不用等程序启动失败再抓日志:
方式一:直接让驱动输出版本号(最简单高效)
绝大多数Selenium驱动(ChromeDriver、GeckoDriver等)都支持--version参数,执行后会直接输出版本信息,不需要启动完整的驱动会话。用C#的Process类就能捕获这个输出:
using System; using System.Diagnostics; using System.Text.RegularExpressions; public static string GetChromeDriverVersion(string driverExecutablePath) { var startInfo = new ProcessStartInfo { FileName = driverExecutablePath, Arguments = "--version", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true // 不弹出控制台窗口 }; using (var driverProcess = Process.Start(startInfo)) { driverProcess.WaitForExit(); var output = driverProcess.StandardOutput.ReadToEnd(); // 匹配ChromeDriver的版本号,格式类似 "ChromeDriver 118.0.5993.70" var versionMatch = Regex.Match(output, @"ChromeDriver\s+([\d.]+)"); return versionMatch.Success ? versionMatch.Groups[1].Value : null; } }
如果是GeckoDriver(Firefox),只需要调整正则表达式:
// GeckoDriver输出格式类似 "geckodriver 0.33.0" var versionMatch = Regex.Match(output, @"geckodriver\s+([\d.]+)");
方式二:捕获驱动启动时的完整日志(同时获取浏览器版本)
如果需要同时获取浏览器版本,可以手动启动驱动进程并捕获其输出流(部分驱动会把日志输出到StandardError流):
using System; using System.Diagnostics; using System.Text.RegularExpressions; using System.Threading.Tasks; public static (string DriverVersion, string BrowserVersion) GetDriverBrowserInfo(string driverPath) { var startInfo = new ProcessStartInfo { FileName = driverPath, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true }; using (var driverProcess = Process.Start(startInfo)) { // 异步读取输出,避免进程死锁 var outputTask = driverProcess.StandardOutput.ReadToEndAsync(); var errorTask = driverProcess.StandardError.ReadToEndAsync(); // 给驱动1秒时间输出启动日志,然后终止进程(不需要创建会话) System.Threading.Thread.Sleep(1000); driverProcess.Kill(); driverProcess.WaitForExit(); var fullLog = await outputTask + await errorTask; // 提取ChromeDriver版本 var driverMatch = Regex.Match(fullLog, @"ChromeDriver\s+([\d.]+)"); // 提取Chrome浏览器版本 var browserMatch = Regex.Match(fullLog, @"Chrome\s+([\d.]+)"); return ( driverMatch.Success ? driverMatch.Groups[1].Value : null, browserMatch.Success ? browserMatch.Groups[1].Value : null ); } }
实现自动化匹配的后续步骤
- 获取本地浏览器版本:可以通过读取注册表(比如Chrome的版本存在
HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon的version键)或WMI查询。 - 对比驱动版本与浏览器版本:Selenium驱动和浏览器的版本通常需要大版本一致(比如ChromeDriver 118.x对应Chrome 118.x)。
- 版本不匹配时自动下载对应驱动:根据获取到的浏览器版本,下载对应版本的驱动文件替换本地驱动。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

