selenium02-元素無法定位解決辦法(簡單)


有時會出現元素定位失敗的情況,以百度首頁為例,定位輸入框,報錯如下:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id='wd']

報錯提示沒有該元素,無法定位!

此處列舉幾個常見的,元素無法定位的情況,簡單級。

 

1.屬性名稱與屬性填寫錯誤

因為操作時,為了提高效率或者說偷懶,經常將已寫好同類命令的代碼,復制粘貼,用於新的命令,有時就忘了修改,比如上一個元素定位是用 id ,這一次定位是用 name('wd'),復制粘貼后,find_element_by_id('wd'),於是定位失敗。

 

2.點擊速度過快,頁面還沒加載出來就點擊頁面上元素

打開一個新的頁面時,可能頁面還沒加載出來,此時已經進行下一步操作,元素定位,於是報錯。

此時需要設置等待時間

import time

time.sleep(2)  #強制固定等待2秒

 

3.動態 id 無法定位元素

比如淘寶web端登錄,賬號輸入框,id就是動態的,每次打開都不同。

此時可以使用 css 定位或 xpath 定位

 

4.元素在 iframe 里導致元素定位失敗

當元素在 frame 里,此時打開網頁直接使用 id/name/xpath 是無法定位元素的。

以qq郵箱web端登錄的賬號輸入框為例,查看元素顯示是這樣的……

……

  <iframe id="login_frame" name="login_frame" ……>

    ……

      <input type="text" class="inputstyle" id="u" name="u" value="" tabindex="1">

因為這個輸入框在 iframe id="login_frame" 這個frame 里,此時直接 ele = browser.find_element_by_name('u') 會顯示定位失敗。

需要先定位frame,再定位里面的元素。

browser.switch_to.frame('login_frame')

browser.find_element_by_name('u')

切記,在 frame 操作完成后,要切換出去

driver.switch_to.default_content()

 

5.不在同一個 frame 里

有時,一個頁面內有多個 frame,於是,比如左邊有一欄left_frame,右邊還有一欄right_frame,當你在某個frame里,就無法直接定位其他frame里的元素。

比如,打開頁面后,需要定位左欄的元素:

browser.switch_to.frame('left_frame')  #切換進入左欄

browser.find_element_by_name('u')  #此時只能定位左欄的元素

 

但是之后又需要定位右欄的元素:

driver.switch_to.default_content()  #回到默認的content,此時只能定位頁面上非frame內的元素

driver.switch_to.frame('right_frame')  #切換進入右欄

browser.find_element_by_name('u')  #此時只能定位右欄的元素

 

最后回到默認content,就可以回到頁面默認內容,繼續操作了:

driver.switch_to.default_content()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM