如何解决Selenium C#初始化Web Driver时的无效参数错误?
解决ChromeDriver构造函数无效参数的WebDriverArgumentException错误
问题场景
下载Chrome Web Driver并安装C# NuGet的Selenium包后,编写爬取代码时触发WebDriverArgumentException,提示Web Driver构造函数的选项中使用了无效参数,具体错误信息:
invalid argument session-info: chrome-headless-shell=125.0.6422.113
(翻译:无效参数 会话信息:chrome-headless-shell=125.0.6422.113)
用户原代码如下:
try { string chrome_path = "C:\\Users\\HP\\PycharmProjects\\Scraping\\chromedriver.exe"; var data = new Dictionary<string, List<string>>() { {"Home", new List<string>() }, {"Draw", new List<string>() }, {"Away", new List<string>() }, }; var options = new ChromeOptions(); options.AddArgument("--headless"); options.AddArgument("--no-sandbox"); options.AddArgument("--disable-dev-shm-usage"); using (var driver = new ChromeDriver(chrome_path, options)) { driver.Navigate().GoToUrl("https://www.betexplorer.com"); // 页面滚动及后续逻辑 } } catch (WebDriverArgumentException ex) { MessageBox.Show($"An error occurred: {ex.Message}"); }
解决方案
- 更新无头模式参数:Chrome 112及以上版本中,旧的
--headless参数会默认启用轻量的chrome-headless-shell,容易和ChromeDriver出现兼容性问题。将参数改为--headless=new,启用完整无头模式,行为与普通Chrome浏览器一致。 - 匹配Chrome与ChromeDriver版本:确保Chrome浏览器版本和ChromeDriver版本完全对应(主版本号必须相同,比如Chrome是125.x,ChromeDriver也得是125.x),版本不匹配是这类错误的核心原因之一。
- 精简环境参数:
--no-sandbox和--disable-dev-shm-usage主要用于Linux容器或无桌面环境,Windows下通常不需要,可先移除这两个参数测试。 - 优化Driver初始化方式:可以通过
ChromeDriverService指定路径,或者将ChromeDriver加入系统环境变量后直接初始化,避免路径传递的潜在问题。
修改后的示例代码
try { var data = new Dictionary<string, List<string>>() { {"Home", new List<string>() }, {"Draw", new List<string>() }, {"Away", new List<string>() }, }; var options = new ChromeOptions(); // 使用新版无头模式参数 options.AddArgument("--headless=new"); // 方式1:通过ChromeDriverService指定Driver路径 using (var service = ChromeDriverService.CreateDefaultService(@"C:\Users\HP\PycharmProjects\Scraping")) { using (var driver = new ChromeDriver(service, options)) { driver.Navigate().GoToUrl("https://www.betexplorer.com"); // 后续页面操作逻辑 } } // 方式2:若ChromeDriver已加入环境变量,可直接初始化 // using (var driver = new ChromeDriver(options)) // { // driver.Navigate().GoToUrl("https://www.betexplorer.com"); // // 后续页面操作逻辑 // } } catch (WebDriverArgumentException ex) { MessageBox.Show($"发生错误:{ex.Message}"); }
内容的提问来源于stack exchange,提问作者Anthony Kinyua
相关产品推荐
相关产品推荐

