我的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遇到問題,故此上來詢問各位前輩。
試試看加入以下
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(PATH,options=options)
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()
我把您給的方法改成這樣↑
網頁還是可以打開
但還是無法出現搜尋的字
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
(終端機出現這樣的訊息)
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()
上面↑的程式碼可以正常運行了
謝謝您的幫忙,剛剛找到答案了
原來是Selenium 4.3.0更改了方法
原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")
這就是程式人生啊.......
遇到問題找答案很苦,找到後滿有成就感
看看 這個網址 selenium 好像在某一次改版後有調整一些參數的名稱跟用途
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()
我把您給的方法改成這樣↑
網頁還是可以打開
但還是無法出現搜尋的字
USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection:
連結到系統的某個裝置失去作用。
(終端機出現這樣的訊息)
試試看我在 這篇文章 的回答
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()
上面↑的程式碼可以正常運行了
謝謝您的幫忙,剛剛找到答案了
原來是Selenium 4.3.0更改了方法
原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")
這就是程式人生啊.......
遇到問題找答案很苦,找到後滿有成就感
當你在執行這段程式碼的時候, 會出現兩個錯誤
原本的寫法:
search = driver.find_element_by_id("query")
更改後的寫法:
search = driver.find_element("name", "query")
<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">
search = driver.find_element_by_name("query")
or
search = driver.find_element("name", "query")
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')