出现selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with xpath的解决方案

问题:

浏览器中能定位到元素,但是代码中提示找不到元素selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with xpath

问题重现:

1.访问126邮箱 https://www.126.com/

2.使用xpath定位邮箱输入框 //input[@data-type="email"]

3.在chrome浏览器中上面的xpath可以定位到邮箱输入框

在这里插入图片描述
4.在代码中使用该xpath定位

from selenium import webdriver

driver = webdriver.Ie(executable_path="g:\\IEDriverServer.exe")
driver.get("https://www.126.com")
mail = driver.find_element_by_xpath("//input[@data-type='email']")
mail.send_keys('chen050706')

5.运行结果:
在这里插入图片描述

原因分析:
在chrome中xpath定位表达式能定位到元素,说明这个定位表达式没问题。
那么问题出在哪里呢?
很大的可能性是因为元素放在frame或者iframe中,导致定位不到
分析定位元素的层级,可以看到,邮箱输入框果然是在iframe中
出现selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with xpath的解决方案_第1张图片
这时候代码中要怎样才能定位到元素呢?
首先要切到iframe中,再进行定位

from selenium import webdriver

driver = webdriver.Ie(executable_path="g:\\IEDriverServer.exe")
driver.get("https://www.126.com")
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]"))
mail = driver.find_element_by_xpath("//input[@data-type='email']")
mail.send_keys('chen050706')

这样就定位到了
出现selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with xpath的解决方案_第2张图片
如果定位iframe中的元素之后,又要定位iframe外面的元素,需要先切出来,再进行定位

driver.switch_to.default_content()

如果切到iframe里,还是定位不到元素,那么可能的原因是:这是一个嵌套的iframe,可以再往上面层级找,看看是不是还被嵌套在另一个iframe里了。

举个栗子:


    
		
	

因为代码里有很多层级,可能一眼看不出来,可能看到的是元素在iframe2层级中,实际iframe2又嵌在iframe1中
这时候要先切到iframe1中,再切到iframe2中,最后再进行元素定位。

你可能感兴趣的:(自动化,python)