USB:usb_device_handle_win.cc:1020使用Windows10上的Selenium使用ChromeDriverv87/Chromev87无法从节点连接错误中读取描述符

我们最近使用 ChromeDriver v87.0.4280.20 和 Chrome v87.0.4280.66(官方版本)(64 位)升级了我们的Windows 10测试环境,升级后即使是最小的程序也会产生此错误日志:

[9848:10684:1201/013233.169:ERROR:device_event_log_impl.cc(211)] [01:32:33.170] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[9848:10684:1201/013233.169:ERROR:device_event_log_impl.cc(211)] [01:32:33.170] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)

最小代码块:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
driver = webdriver.Chrome(options=options, executable_path=r'C:WebDriverschromedriver.exe')
driver.get('https://www.google.com/')

控制台输出:

DevTools listening on ws://127.0.0.1:64170/devtools/browser/2fb4bb93-79ab-4131-9e4a-3b65c08dbffb
[9848:10684:1201/013233.169:ERROR:device_event_log_impl.cc(211)] [01:32:33.170] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[9848:10684:1201/013233.172:ERROR:device_event_log_impl.cc(211)] [01:32:33.173] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)

有人面临同样的问题吗?ChromeDriver/Chrome v87 相对于 ChromeDriver/Chrome v86 有什么变化吗?有什么线索吗?

回答

我为日志垃圾邮件道歉。如果您在使用 WebUSB 连接到设备时没有问题,您可以忽略这些警告。它们由 Chrome 尝试读取当前挂起的 USB 设备的属性触发。


回答

经过多次讨论,这里的文档和 Chromium 问题是与日志消息显示相关的详细信息:


细节

这一切都始于报告问题在 Windows 上删除 WebUSB 对 libusb 的依赖为:

  • 对于 Linux(也可能是 Mac),WebUSB 通知和通信都可以正常工作(在 udev 规则中允许用户访问设备之后)。
  • 对于 Windows,似乎 libusb 仅适用于非标准 WinUsb 驱动程序 ( https://github.com/libusb/libusb/issues/255 )。

当插入硬件并且系统未知 VID/PID 时,Windows 10 会正确加载 CDC 部分的 CDC 驱动程序和 WebUSB 部分的 WinUSB 驱动程序(版本 10)(无红旗)。但是,在我在界面上手动强制使用较旧的 WinUSB 驱动程序(版本 6 - 可能也已修改)之前,chrome 似乎从未找到该设备。

该解决方案分步实施,如下所示:

  1. 开始支持新的 Windows USB 后端中的一些传输
  2. 修复新的 Windows USB 后端中的批量/中断传输
  3. [usb] 从 Windows 上的集线器驱动程序读取 BOS 描述符
  4. [usb] 在 Windows 上枚举期间收集所有复合设备路径
  5. [usb] 移除 UsbServiceWin 辅助函数中的参数
  6. [usb] 在新的 Windows 后端支持复合设备
  7. [usb] 在 Windows 枚举 USB 功能时检测它们
  8. [usb] 支持多功能复合设备
  9. [usb] 保持接口请求直到 Windows 枚举函数
  10. [usb] 向 ClearHalt 添加方向参数
  11. [usb] 计算对 WINUSB_INTERFACE_HANDLE 的引用
  12. [usb] 在 Windows 后端实现阻塞操作

这些更改确保新后端已准备好进行测试,并可通过Chrome Canary和 chrome-dev-channel 使用,您可以通过以下方式手动访问:

chrome://flags#enable-new-usb-backend

提交的更多变更请求如下:

  • [usb] 将调用 SetupDiGetDeviceProperty 标记为潜在阻塞:根据挂起报告,此函数执行 RPC 调用,可能需要一些时间才能完成。使用 base::ScopedBlockingCall 标记调用,以便线程池知道此任务可能会忙碌一段时间。
  • 变化:在现场试验测试配置中启用 NewUsbBackend:此标志是实验性的,因为 beta-channel 使用此更改配置作为测试的默认值。

由于新后端的实验性发布似乎是稳定的,最终这些配置默认启用,以便通过USB向所有Chrome 87用户推出更改:默认启用新的 Windows USB 后端。修订/提交

我们的想法是,一旦此配置成为一些里程碑的默认配置,Chromium 团队将开始从旧后端删除特定于 Windows 的代码并删除标志。


前面的路

Chromium 团队已经在Chrome v90中合并了修订/提交以扩展 new-usb-backend 标志到期,这将很快可用。


更新

根据@ReillyGrant的 [Committer, WebDriver for Google Chrome]评论:

......“最好降低这些消息的日志级别,这样它们默认不会出现在控制台上,但我们还没有登陆代码来做到这一点”......


参考

您可以在以下位置找到一些相关的详细讨论:

  • 无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 时,连接到系统的设备无法运行错误
  • 无法从节点连接读取描述符:通过 Selenium 使用 ChromeDriver Chrome 连接到系统的设备无法运行错误

以上是USB:usb_device_handle_win.cc:1020使用Windows10上的Selenium使用ChromeDriverv87/Chromev87无法从节点连接错误中读取描述符的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>