iT邦幫忙

0

python執行selenium出現 : 連結到系統的某個裝置失去作用

我的code:
from selenium import webdriver

PATH = "D:/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.dcard.tw/f")
search = driver.find_element_by_name("query")
search.send_keys("比特幣")
driver.quit()

出現的問題:
USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: 連結到系統的某個裝置失去作用。

使用 : VScode + Python3.10.5 + ChromeDriver103.0.5060.53
作業系統 : Win10 64 位元

備註:執行時可以把網頁打開,但是無法自動輸入關鍵字

自學程式開發,已經把python基本的概念看過一遍,開始實作selenium遇到問題,故此上來詢問各位前輩。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
jasper0047
iT邦新手 5 級 ‧ 2022-06-27 17:38:31

試試看加入以下

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(PATH,options=options)
看更多先前的回應...收起先前的回應...
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 10:27:11 檢舉
from selenium import webdriver
import time


PATH = "D:/chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(PATH,options=options)


driver.get("https://www.dcard.tw/f")
search = driver.find_element_by_id("query")
search.send_keys("比特幣")

time.sleep(10)
driver.quit()
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 10:29:23 檢舉

我把您給的方法改成這樣↑
網頁還是可以打開
但還是無法出現搜尋的字

AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
(終端機出現這樣的訊息)

bp3324517 iT邦新手 5 級 ‧ 2022-06-28 13:20:38 檢舉
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path=r"D:/chromedriver.exe") 


driver.get("https://www.dcard.tw/f")
search = driver.find_element("name", "query")
search.send_keys("比特幣")
search.send_keys(Keys.RETURN)

time.sleep(10)
driver.quit()
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 13:25:54 檢舉

上面↑的程式碼可以正常運行了

謝謝您的幫忙,剛剛找到答案了
原來是Selenium 4.3.0更改了方法

原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")

這就是程式人生啊.......
遇到問題找答案很苦,找到後滿有成就感

0
熊熊工程師
iT邦研究生 3 級 ‧ 2022-06-27 17:43:40

看看 這個網址 selenium 好像在某一次改版後有調整一些參數的名稱跟用途

看更多先前的回應...收起先前的回應...
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 10:30:24 檢舉
from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:/chromedriver.exe") 


driver.get("https://www.dcard.tw/f")
search = driver.find_element_by_name("query")
search.send_keys("比特幣")


driver.quit()
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 10:30:58 檢舉

我把您給的方法改成這樣↑
網頁還是可以打開
但還是無法出現搜尋的字

USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection:
連結到系統的某個裝置失去作用。
(終端機出現這樣的訊息)

試試看我在 這篇文章 的回答

bp3324517 iT邦新手 5 級 ‧ 2022-06-28 13:26:34 檢舉
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path=r"D:/chromedriver.exe") 


driver.get("https://www.dcard.tw/f")
search = driver.find_element("name", "query")
search.send_keys("比特幣")
search.send_keys(Keys.RETURN)

time.sleep(10)
driver.quit()
bp3324517 iT邦新手 5 級 ‧ 2022-06-28 13:26:46 檢舉

上面↑的程式碼可以正常運行了

謝謝您的幫忙,剛剛找到答案了
原來是Selenium 4.3.0更改了方法

原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")

這就是程式人生啊.......
遇到問題找答案很苦,找到後滿有成就感

0
mia
iT邦新手 5 級 ‧ 2022-06-30 11:16:54

當你在執行這段程式碼的時候, 會出現兩個錯誤

  1. 日誌顯示連結到系統的某個裝置失去作用。
    此問題不管 selenium3.X 還是 4.X 都會出現, 取決於 chrome 版本
  2. 找不到 find_element_by_name 這個用法。
    此問題為 selenium 4.X 已棄用此方式了 (其他用法我列在這邊 連結)

原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")

  • 假設你的selenium版本為3.X,
  • 假設網頁內容為 <input type="search" id="query" name="query">
    以下方式是可成功的
    search = driver.find_element_by_id("query")
    
    or
    search = driver.find_element("id", "query")
    

  • 因為你的網頁內容為 <input type="search" name="query">
    使用 id 定位就會失敗
    寫法要改為
    search = driver.find_element_by_name("query")
    
    or
    search = driver.find_element("name", "query")
    

  • 搭上你的 selenium 版本為 4.X, 使用的方式就選擇
    search = driver.find_element("name", "query")
    

日誌顯示"連結到系統的某個裝置失去作用", 可以查看這篇文章
裡面的意思大概是指 chrome 有偵測裝置的功能, 但 windows 的 chrome 似乎有些問題, 會顯示錯誤(就只有 windows的, linux 是正常的)

因為它算是友善的提醒, 建議的做法就是日誌顯示的等級設高, 或者設成關閉日誌
在解法上就會常常看到程式碼加上這行, 將 enable logging 關閉

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

或者將日誌等級設高 (Error, Info...不顯示, 更嚴重的才顯示)

options.add_argument('--log-level=3')
bp3324517 iT邦新手 5 級 ‧ 2022-07-14 16:47:04 檢舉

謝謝您的指導

我要發表回答

立即登入回答