无法从节点连接读取描述符:在 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 连接到系统的设备无法运行错误的主要内容,如果未能解决你的问题,请参考以下文章
无法 ping Windows 集群的 IP 并且无法连接侦听器 IP
服务器X3550 M4上面安装window2012 r2 Windows无法从无人参与应答文件读取ProductKey设置