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()

这个只是其中一种解决方法,定位动态元素还有其他方法,如果哪位帅气/漂亮的人儿用其他方法解决了该问题,欢迎指教~

猜你喜欢

转载自blog.csdn.net/mhw_bmd/article/details/84880831
今日推荐