1. 程式人生 > >Selenium+python,切換frame,定位元素出現NoSuchElementException異常

Selenium+python,切換frame,定位元素出現NoSuchElementException異常

加了等待時間,沒有層級frame,沒有新開啟標籤,情況單一,程式碼簡單,還是定位不到元素!

這個時候你就要考慮定位的元素的屬性是動態的了!

 

(初學selenium,有些解釋不明確的地方,多包涵~)

 

動態屬性,就是每次開啟頁面,元素的id、class等屬性是不一樣的(動態生成)。執行程式碼定位元素時,重新開啟頁面,屬性值變化,而你定位元素使用的是上一次訪問頁面生成的屬性值,這樣自然是定位不到元素的,會拋NoSuchElementException異常

以下程式碼是訪問126郵箱網站,在輸入框中輸入使用者名稱

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.126.com")
time.sleep(1)
driver.switch_to.frame("x-URS-iframe1544011763190.8416")
driver.find_element_by_name("email").send_keys("email-name")
time.sleep(3)
driver.quit()

執行程式碼的時候一直報NoSuchElementException。後來瞭解到定位frame的ID是動態的。

以下是解決問題後的程式碼:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.126.com")
time.sleep(1)
frame = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")
driver.switch_to.frame(frame)
driver.find_element_by_name("email").send_keys("email-name")
time.sleep(3)
driver.quit()

這個只是其中一種解決方法,定位動態元素還有其他方法,如果哪位帥氣/漂亮的人兒用其他方法解決了該問題,歡迎指教~