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

Posted

技术标签:

【中文标题】无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误【英文标题】:Failed to read descriptor from node connection: A device attached to the system is not functioning error using ChromeDriver Selenium on Windows OS 【发布时间】:2021-03-03 18:39:04 【问题描述】:

我在 python 中运行 selenium webdriver 脚本时得到了这个,我还在系统环境中设置了路径,还尝试下载与我的 chrome 版本匹配的 webdriver。还有letest版本。但我仍然收到此错误:

[8552:6856:1120/155118.770:ERROR:device_event_log_impl.cc(211)] [15:51:18.771] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[8552:6856:1120/155118.774:ERROR:device_event_log_impl.cc(211)] [15:51:18.774] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[8552:6856:1120/155118.821:ERROR:device_event_log_impl.cc(211)] [15:51:18.821] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)

我在我的代码中使用了这个:

driver = webdriver.Chrome(resource_path("C:\\webdriver\\chromedriver.exe"))  # to open the chromebrowser
driver.get("https://web.whatsapp.com")

【问题讨论】:

@DebabjanB 你最终解决了这个问题吗?我也有同样的问题。 看到这个***.com/a/65134639/6875391 在 Chrome 中我跟着 chrome://flags 并启用了启用新的 USB 后端选项,之后日志消息就消失了 @klapshin 我在我的 C#-Selenium-VS Code 2019 项目中也收到了“无法读取...”消息。我去了 chrome://flags,但没有“启用新的 USB 后端选项”或任何与 USB 相关的内容。 @AnneBailly 最近他们已经修复了它bugs.chromium.org/p/chromium/issues/detail?id=637404 所以这可能是我们的 chromedriver 版本需要更新到最新版本,或者回滚到以前的 Chrome+chromedriver 版本,他们确实有这样的选项。要检查这是否真的是 USB 问题,请拔下 USB 设备并查看错误是否消失。 【参考方案1】:

错误

[15292:18896:0820/144926.111:ERROR:device_event_log_impl.cc(214)] [14:49:26.110] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)

下载并使用我安装的 chrome 版本所需的网络驱动程序版本后消失。见https://chromedriver.chromium.org/downloads

【讨论】:

注意:我正在使用带有 selenium 库的机器人框架。【参考方案2】:

我找到了解决办法!!先下载this chrome extension然后点击扩展,设置user-agent为“Chrome on Mac”

第二次更改代码中的这一行

driver = webdriver.Chrome(resource_path("C:\\webdriver\\chromedriver.exe"))  # to open the chromebrowser
driver.get("https://web.whatsapp.com")

到:

driver = webdriver.Chrome(executable_path=r'C:\webdriver\chromedriver.exe')  # to open the chromebrowser
driver.get("https://web.whatsapp.com")

同时打开 cmd 并输入:

pip install pywin32

【讨论】:

【参考方案3】:

解决方案:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time

options = Options()

options.add_experimental_option('excludeSwitches', ['enable-logging'])

driver = webdriver.Chrome(executable_path=r"D:\SW\chromedriver90\chromedriver.exe",chrome_options=options)

url = 'https://carlsagan.com/'

driver.get(url)

...

driver.quit()

【讨论】:

嗨@Dennis,你能告诉我如何在这个实验选项中包含无头选项吗?提前致谢!【参考方案4】:

这是一个 chromedriver 问题,他们仍在努力解决。我不完全确定是什么原因造成的,但技术细节似乎在 Debanjan 的回答中有详细说明。

互联网上的通用解决方案似乎只是“忽略它”,但它确实会使日志混乱很多。

我确实找到了让它关闭的方法(以及经常弹出的“DevTools”警告)。

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)

如果您愿意,除了指向您的 chromedriver 可执行文件之外,您还可以添加其他 chromedriver 选项并切换到该选项。

【讨论】:

对于任何想知道Options 应该是什么的人,我找到了options = webdriver.ChromeOptions() 来完成这项工作。 你是对的。不让我审查编辑。取决于您如何设置 chrome 驱动程序,但这在大多数情况下都可以使用。吉! @RueLazzaro 您将此选项代码块放在您的代码或框架中的什么位置?我在我的 C#-Selenium-VS Code 2019 项目中收到此“读取失败...”消息。我将该代码块放在类中的不同位置,但出现编译错误。我是初学者,所以我可能做错了什么。 @AnneBailly 不用担心!这都是蟒蛇。我不确定如何在 C# 中安装它。对不起!我相信有人可以帮助你。在 python 中,您在实际启动驱动程序并做一些事情之前定义这一切(比如启动一个网页并点击周围的东西)。【参考方案5】:

请检查一下规范文件名。我已重命名规范文件,但忘记在配置文件中更新它,因此出现此错误。后来我变了。解决了

【讨论】:

【参考方案6】:

我尝试了很多方法,但没有一个对我有用。

我能做的就是用时间模式延迟 Chrome 浏览器的自动退出。

from selenium import webdriver
import chromedriver_binary  # Adds chromedriver binary to path
import time

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
driver = webdriver.Chrome(options=options)

driver.get('https://www.google.com/')
time.sleep(3600) # let the browser die after 1 hour

【讨论】:

【参考方案7】:

此错误消息...

[14432:11656:1120/161059.539:ERROR:device_event_log_impl.cc(211)] [16:10:59.539] 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 浏览器 会话时引发错误。


分析

此错误是由于连接到windows-10 系统的USB 设备无法正常运行所致。

此错误在usb_device_handle_win.cc 中定义如下:

void UsbDeviceHandleWin::GotDescriptorFromNodeConnection(
    TransferCallback callback,
    scoped_refptr<base::RefCountedBytes> request_buffer,
    scoped_refptr<base::RefCountedBytes> original_buffer,
    Request* request_ptr,
    DWORD win32_result,
    size_t bytes_transferred) 
  std::unique_ptr<Request> request = UnlinkRequest(request_ptr);
  if (win32_result != ERROR_SUCCESS) 
    SetLastError(win32_result);
    USB_PLOG(ERROR) << "Failed to read descriptor from node connection";
    std::move(callback).Run(UsbTransferStatus::TRANSFER_ERROR, nullptr, 0);
    return;
  

解决方案

此错误无害,也不会阻止生成新的浏览上下文,即Chrome 浏览器 会话。因此,您可以放心地忽略该错误。

但是,在您的代码块中,您需要将 关键字 resource_path 替换为 executable_path,您的有效代码块将是:

webdriver.Chrome(executable_path=r'C:\webdriver\chromedriver.exe') # to open the chromebrowser 
driver.get("https://web.whatsapp.com")

参考文献

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

USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection error with ChromeDriver v87 / Chrome v87 using Selenium on Windows10 Failed to read descriptor from node connection: A device attached to the system is not functioning error using ChromeDriver Chrome through Selenium

【讨论】:

我没有连接任何 USB 设备。而且我需要摆脱这个错误,因为我需要把这个脚本变成一个窗口“.exe”文件才能在任何窗口机器上运行。 @UMANGBARAIYA 该错误来自 Chrome/ChromeDriver 的回调,不会影响您的测试和测试结果。结果 exe 文件也可以完美运行。 这对我不起作用。驱动程序确实启动了,但我正在通过 python 提示输入命令,当我给它下一个命令时,错误出现在提示中。我担心如果我制作任何脚本,这个错误不会让脚本工作。【参考方案8】:

检查您的设备列表,看看是否有任何 USB 设备无法正常工作。 在我的笔记本电脑启用了蓝牙和摄像头设备后,我解决了这个问题。

【讨论】:

我在运行此代码时没有附加任何类型的 USB 设备,并且代码不需要任何类型的 USB 设备来运行此代码我完全独立【参考方案9】:

在找到我的错误的答案一周后,我最终得到了一个解决方案,您只需要安装 pywin32 库,它不会给您错误

打开 cmd 并输入

点安装 pywin32

你很高兴......!

【讨论】:

【参考方案10】:

该错误可能是因为您在 resource_path 变量中使用了括号。 代码如下:

driver = webdriver.Chrome(resource_path="C:\webdriver\chromedriver.exe") # to open the chromebrowser 
driver.get("https://web.whatsapp.com")

如果仍然有任何问题,您可以尝试将 web 驱动程序与 python 文件放在同一文件夹中。

【讨论】:

我试过你的方法,但它仍然给我那个错误......!

以上是关于无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误的主要内容,如果未能解决你的问题,请参考以下文章

荣耀v9连接到电脑后无法读取手机盘?为啥?

无法 ping Windows 集群的 IP 并且无法连接侦听器 IP

Windows 服务无法从 App.config 读取参数

服务器X3550 M4上面安装window2012 r2 Windows无法从无人参与应答文件读取ProductKey设置

通过 ODBC 从 C# 读取 Netezza 数据库表在 Windows 7 中不起作用

无法使用 c# 从 xml 读取值/节点