iT邦幫忙

0

python 查詢不到元素

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220425/20144798X5E2CHwsCy.png

如上圖,左邊是未挑選區,右邊是已挑選區
一次只能選擇一個到右邊

我的需求是點選左邊的選項後,點選「轉EXCEL」按鈕下載
但現在下面的任何一個元素都會找不到

以下是我的code

from selenium import webdriver
import time

PATH = "C:/Users/USER/Desktop/chromedriver.exe"


driver = webdriver.Chrome(PATH)


driver.get("http://.........")
 
#登入網站
USERID = driver.find_element_by_name("userid")
USERID.send_keys("XXXXX")
USERPWD = driver.find_element_by_name("passwd")
USERPWD.send_keys("XXXXX")
driver.find_element_by_xpath('//*[@id="logIn"]').click()

#等待網站載入
driver.implicitly_wait(6)


#點選記錄查詢
driver.find_element_by_xpath('/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[1]/table/tbody/tr/td/div/table[2]/tbody/tr[1]/td').click()
#點選行車紀錄
driver.find_element_by_xpath('/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[1]/table/tbody/tr/td/div/table[2]/tbody/tr[2]/td/table/tbody/tr[1]/td/span').click()


time.sleep(5)   


#點選左邊選項
driver.find_element_by_xpath('/html/body/table/tbody[2]/tr/td/table/tbody/tr[2]/td[1]/div/div[1]/a').click()


錯誤訊息如下

no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/table/tbody[2]/tr/td/table/tbody/tr[2]/td[1]/div/div[1]/a"}
  (Session info: chrome=100.0.4896.127)

且div裡每一個選項ID都相同..
未被選到的選項會在lcode底下
https://ithelp.ithome.com.tw/upload/images/20220425/20144798flaic5l0bd.png

選擇後的選項會在rcode底下
https://ithelp.ithome.com.tw/upload/images/20220425/20144798mMyveWoHbf.png

再請大家協助~~謝謝!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
jiatool
iT邦研究生 2 級 ‧ 2022-04-25 22:26:12
最佳解答

(我怎麼感覺在 FB 有回覆過類似的文?

從你第一張截圖可以看到,你想抓取的元素在 iframe 底下,你需要先將 driver 切換到裡面,才能抓到裡面的元素。
語法:driver.switch_to.frame()
例如:driver.switch_to.frame("iframe_action")driver.switch_to.frame(0)

你試試看吧~

看更多先前的回應...收起先前的回應...
oserjeng iT邦新手 5 級 ‧ 2022-04-26 09:41:37 檢舉

太感謝了!終於成功找到元素!
另外我想問如圖
https://ithelp.ithome.com.tw/upload/images/20220426/20144798bBbsc6gd4N.png

我如果想用後方白色那邊的文字當作關鍵字,該用什麼語法去搜尋他呢?

oserjeng iT邦新手 5 級 ‧ 2022-04-26 10:14:05 檢舉

我使用這個語法

left_elements = driver.find_elements_by_link_text('093784 RY-510')
left_elements.click()

得到錯誤訊息

AttributeError: 'list' object has no attribute 'click'
oserjeng iT邦新手 5 級 ‧ 2022-04-26 12:13:45 檢舉

我找到方法了~~謝謝

driver.find_element_by_link_text('關鍵字').click()
jiatool iT邦研究生 2 級 ‧ 2022-04-26 21:05:23 檢舉

恭喜恭喜~解決了

0
camelcheng
iT邦新手 4 級 ‧ 2022-04-25 11:06:22

看錯誤訊息是該Element沒辦法被selenium定位,推測原因:Element的大小為(0,0),因此無法被定位
試試看抓上一層div這樣行不行

#抓出所有左邊選項
left_elements = driver.find_elements_by_xpath('//*[@id='lcode']/div')
#點擊第一個選項
left_elements[0].click()
#抓出所有右邊選項
right_elements = driver.find_elements_by_xpath('//*[@id='rcode']/div')
#點擊第一個選項
right_elements[0].click()
看更多先前的回應...收起先前的回應...
oserjeng iT邦新手 5 級 ‧ 2022-04-25 12:32:53 檢舉

用這個方法還是不行耶
他會跳出錯誤訊息

Traceback (most recent call last):

  File "C:\Users\USER\Desktop\PythonProj\迷你龐德.py", line 40, in <module>
    left_elements[0].click()

IndexError: list index out of range

根據上面的錯誤訊息,看起來當下左邊選項可能是空的,有先設個sleep等待資料出現嗎?

oserjeng iT邦新手 5 級 ‧ 2022-04-25 16:13:49 檢舉

有,time.sleep(60)
但她還是無法查找到..

小魚 iT邦大師 1 級 ‧ 2022-04-25 18:08:52 檢舉

應該不是用sleep吧,
應該是用until之類的.

oserjeng iT邦新手 5 級 ‧ 2022-04-26 09:40:04 檢舉

我用jiatool的方法+您的方法有成功了~但是這邊是用點擊第幾個選項,用辦法直接指定選項嗎?
left_elements[0].click()

https://ithelp.ithome.com.tw/upload/images/20220426/20144798eIWhNQJKxx.png

oserjeng iT邦新手 5 級 ‧ 2022-04-26 12:13:54 檢舉

我找到方法了~~謝謝

driver.find_element_by_link_text('關鍵字').click()
0
熊熊工程師
iT邦研究生 1 級 ‧ 2022-04-25 11:37:48

或許是你等 selenium 的秒數不夠,可以用用看 這個方法 裡面提到的 5-1 去做等待,另外也把秒數拉長一些看看

oserjeng iT邦新手 5 級 ‧ 2022-04-26 09:40:32 檢舉

謝謝您~但測試後好像不是等待的問題

我要發表回答

立即登入回答