iT邦幫忙

1

python執行selenium出現 AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'

  • 分享至 

  • twitterImage

我的code:
import selenium.webdriver.support.ui as ui# 必要每五秒檢元素是否存在
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

PATH = "C:/Users/藥頭/Desktop/爬蟲學習/搶票/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.dcard.tw/f") #選擇網站
time.sleep(5)
search = driver.find_element_by_name("query")#搜尋欄位
search.send_keys("BTC")#搜尋

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
出現這樣子
[9796:12916:0628/004758.023:ERROR:device_event_log_impl.cc(214)] [00:47:58.022] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: 連結到系統的某個裝置失去作用。 (0x1F)
Traceback (most recent call last):
File "c:\Users\藥頭\Desktop\爬蟲學習\搶票\t.py", line 10, in
search = driver.find_element_by_name("query")#搜尋欄位
AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'

會像下面這張圖一樣,可以問一下大家這個要怎麼解嗎,上網爬過很多文了可是弄了三天還是弄不出來

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

https://ithelp.ithome.com.tw/upload/images/20220628/20150169yqtYms7kqR.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
mia
iT邦新手 5 級 ‧ 2022-06-28 19:12:59
最佳解答

先確認 selenium 版號
版號 4.X 開始, find_element_by_XXX / find_elements_by_XXX 已經棄用,
請改用 find_element(By.XXX, 定位字串) / find_elements(By.XXX, 定位字串)

近幾年版號才更新成 4.X, 如果找尋2年前的文章, 照抄可能部分會失敗,
如果急的話, 可以選擇安裝舊版本的selenium暫時解決問題

ex

search = driver.find_element_by_name("query")

版本 4.0 以後需修改成

search = driver.find_element(By.NAME, "query")
# 如果程式碼未寫 from selenium.webdriver.common.by import By
# 請將 By.NAME 改成 "name"
# search = driver.find_element("name", "query")
find_element find_element_by_XXX (4.0+已棄用)
find_element(By.ID, 定位字串) find_element_by_id(定位字串)
find_element(By.NAME, 定位字串) find_element_by_name(定位字串)
find_element(By.XPATH, 定位字串) find_element_by_xpath(定位字串)
find_element(By.LINK_TEXT, 定位字串) find_element_by_link_text(定位字串)
find_element(By.PARTIAL_LINK_TEXT, 定位字串) find_element_by_partial_link_text(定位字串)
find_element(By.TAG_NAME, 定位字串) find_element_by_tag_name(定位字串)
find_element(By.CLASS_NAME, 定位字串) find_element_by_class_name(定位字串)
find_element(By.CSS_SELECTOR, 定位字串) find_element_by_css_selector(定位字串)
0
熊熊工程師
iT邦研究生 2 級 ‧ 2022-06-28 09:09:36

可以下載這個套件

pip install webdriver-manager

然後把你的 code 換成

import selenium.webdriver.support.ui as ui# 必要每五秒檢元素是否存在
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.dcard.tw/f") #選擇網站
time.sleep(5)
search = driver.find_element(By.NAME, "query")#搜尋欄位
search.send_keys("BTC")#搜尋

另外請善用 code block 進行發問

0
bp3324517
iT邦新手 5 級 ‧ 2022-06-28 14:05:13

可以試試這篇
我也遇到類似的問題
或許能幫到你

我要發表回答

立即登入回答