Selenium C# Web Driver 4.11.0部署服务器运行异常求助
问题描述
将Selenium C# Web Driver包从4.2版本升级至4.11版本,利用Selenium 4.6及以上版本的新特性,不再手动指定驱动路径,交由Selenium Manager自动管理。本地运行正常,但部署到服务器后出现以下错误:
Unable to obtain chrome using Selenium Manager; 相关文档可参考Selenium官方故障排查
stacktrace
at OpenQA.Selenium.DriverFinder.FullPath(DriverOptions options)
at OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(ChromeOptions options)
at OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService()
相关代码:
var headlessValue = Convert.ToBoolean(_config["Driver:HeadlessFlag"]); var downloadDirectory = _config["Driver:BaseDownloadLocation"]; var currDirectory = Directory.GetCurrentDirectory(); var chromeOptions = new ChromeOptions(); chromeOptions.AddArgument("--no-sandbox"); chromeOptions.AddArgument("--disable-gpu"); chromeOptions.AddArgument("--disable-dev-shm-usage"); chromeOptions.AddUserProfilePreference("download.default_directory", @customPath + @currentUser); chromeOptions.AddUserProfilePreference("download.prompt_for_download", false); chromeOptions.AddUserProfilePreference("disable-popup-blocking", "true"); chromeOptions.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1); ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(); var driver = new ChromeDriver(driverService, chromeOptions); var driverProcessIds = driverService.ProcessId; driver.Manage().Timeouts().ImplicitWait.Add(System.TimeSpan.FromSeconds(120)); driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(120));
解决方案
- 检查服务器Chrome安装状态:Selenium Manager需要找到已安装的Chrome来匹配对应驱动,服务器可能未安装Chrome,或安装路径不在默认位置。手动安装Chrome并确保其在系统PATH中,也可通过
chromeOptions.BinaryLocation指定Chrome二进制文件的绝对路径。 - 验证服务器网络权限:Selenium Manager需联网下载对应版本的ChromeDriver,若服务器处于内网或有防火墙限制,会导致下载失败。可手动下载匹配Chrome版本的ChromeDriver,放到服务器可访问路径后,通过
ChromeDriverService.CreateDefaultService("驱动文件所在路径")指定;或配置服务器允许Selenium Manager访问驱动下载源。 - 补充无头模式参数:服务器通常无图形界面,代码中已读取
headlessValue但未添加到ChromeOptions,需补充:if (headlessValue) { chromeOptions.AddArgument("--headless=new"); // Selenium 4.10+推荐使用该参数 } - 检查服务器文件权限:Selenium Manager下载驱动时需要写入权限,确保程序运行账号对当前目录或临时目录有读写权限。
- 手动指定ChromeDriver版本:若自动匹配出现问题,可通过环境变量
SE_Driver_VERSION设置驱动版本,或在代码中配置:chromeOptions.AddAdditionalOption("chromedriverVersion", "116.0.5845.96"); // 替换为与Chrome匹配的版本号
内容的提问来源于stack exchange,提问作者Swapnil
相关产品推荐
相关产品推荐

