selenium問題之定位不到元素(NoSuchElementException)


在使用selenium+爬蟲的時候,經常會遇到一個問題,就是NoSuchElementException,定位不到元素的問題

一,打開了新頁面,一般selenium點擊新鏈接跳轉打開了一個新頁面,那么定位不到元素就很正常了,這種情況一般我們使用driver.get(url)來代替click(),dirver.get(url)就不會打開信的界面,而是在原來的瀏覽器上刷新了頁面

二,frame,如果說一個頁面里有frame或者iframe的話,也會定位不到元素,這種我們要switch_to.frame(),先跳轉到要定位的元素所在的frame上,才能進一步定位

三,動態的id或者xpath,這種很隱蔽,我之前使用driver.find_element_by_xpath()一直定位不到元素,后來發現xpath是動態的,最后使用了find_element_by_css_selector定位到了,還有的情況是xpath絕對定位不到,可以使用xpah的相對定位。/html/body/div[2]/div[1]/div/div[3]/a[7]這是絕對定位,如果中間的元素有變動或者隱藏了,那么它就沒法定位到。r'//*[@id ='ul' ]/a[7]'這個是相對定位,結合了id定位,這種定位就比較精准。

四,對話框的話,分為兩大類,第一類就是一個隱藏的div綁定的click點擊事件,這種情況直接用id或者name定位就可以了。第二類是alert或者confirm這種windows對話框,這種對話框,要通過switch_to_alert.accept()或者swicth_to_alert.dismiss()這種處理。

五,等待時間不夠,頁面還沒加載出來。

下面舉個例子,selenium模擬登陸百度登陸對話框

# coding=utf-8
from selenium import webdriver
import time


obj = webdriver.Firefox()
obj.get('https://www.baidu.com/')
obj.find_element_by_xpath(r'//*[@id="u1"]/a[7]').click()
time.sleep(1)
obj.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()
# obj.find_element_by_class_name('tang-content').find_element_by_name('userName').send_keys('1712256304')
obj.find_element_by_id('TANGRAM__PSP_10__userName').send_keys('12341241')
obj.find_element_by_id('TANGRAM__PSP_10__password').send_keys('123423')
obj.find_element_by_id('TANGRAM__PSP_10__submit').click()

  


免責聲明!

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



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