如何在C#的Selenium ChromeDriver中禁用WEB USB Flag?
问题
在AWS EC2实例运行应用时遇到以下报错,本地运行正常,但服务器端卡在该环节:
[3528:3760:0205/072321.889:ERROR:device_event_log_impl.cc(192)] [07:23:21.489] USB: usb_service_win.cc:105 SetupDiGetDeviceProperty({{A45C254E-DF1C-4EFD-8020-67D146A850E0}, 6}) failed: Element not found. (0x490)
尝试通过以下代码禁用WEB USB Flag:
Dictionary<string, object> prefs = new Dictionary<string, object> { { "webusb_allow_devices", false } }; browserOptions.AddAdditionalCapability("prefs", prefs);
报错:there is already an option for the prefs capabilty.
随后换了另一种写法:
Dictionary<string, object> prefs = new Dictionary<string, object> { { "webusb_allow_devices", false } }; browserOptions.AddAdditionalCapability("chromeOptions", prefs);
报错:OpenQA.Selenium.WebDriverException: unknown error: cannot parse capability: goog:chromeOptions
请问如何正确在C#的Selenium ChromeDriver中禁用WEB USB Flag?
解决方案
在C#的Selenium中配置ChromeDriver禁用WEB USB,需遵循正确的ChromeOptions配置方式,以下是两种可靠方法:
方法1:使用ChromeOptions的AddUserProfilePreference方法
直接通过ChromeOptions类提供的方法添加用户配置偏好,避免手动处理capability冲突:
using OpenQA.Selenium.Chrome; // 初始化ChromeOptions实例 ChromeOptions options = new ChromeOptions(); // 添加禁用WEB USB的用户偏好设置 options.AddUserProfilePreference("webusb_allow_devices", false); // 初始化ChromeDriver并传入配置 using (IWebDriver driver = new ChromeDriver(options)) { // 执行你的业务逻辑代码 }
方法2:添加Chrome启动参数
若偏好设置未生效,可直接添加Chrome启动参数强制禁用WEB USB:
using OpenQA.Selenium.Chrome; ChromeOptions options = new ChromeOptions(); // 添加--disable-webusb启动参数 options.AddArgument("--disable-webusb"); using (IWebDriver driver = new ChromeDriver(options)) { // 执行你的业务逻辑代码 }
原写法错误原因
- 第一种写法直接添加
prefscapability,是由于ChromeOptions内部已维护prefs配置,重复添加导致冲突报错。 - 第二种写法错误地将prefs直接作为
chromeOptions的值,正确结构需将prefs嵌套在chromeOptions字典中;且新版Selenium需使用goog:chromeOptions作为capability名称,不过直接使用ChromeOptions类的方法会自动处理这些细节,无需手动拼接。
内容的提问来源于stack exchange,提问作者Priyank Dave
相关产品推荐
相关产品推荐

