背景:组内同事最近在写脚本,使用复制的xpath始终定位不到元素,报错内容:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//table[text()='contentTable']/tbody/tr/td[16]/a[2]/i"}
解题思路:
1. 由于提供的html截图信息,发现存在多层body消息体拼接成一个html页面的情况,所以推荐使用模糊查询的xpath定位元素,也就有了这个xpath:"//table[text()='contentTable']/tbody/tr/td[16]/a[2]/i"【如果不清楚模糊查询xpath怎么写,可以在评论区提问】
改了后,不好用,还是报错。
2. 是不是等待没加?
不是,等待了10秒,肯定能够加载
3. 当前元素父节点,是否存在iframe?:存在!!!
如果父节点存在图上这种iframe消息体就需要先跳转到iframe,才能够定位到元素:
跳转方式有很多,这里推荐使用:driver.switch_to.frame(0)
后面的0代表跳转到第一个iframe,如果页面有多个iframe,需要看看这个元素所在iframe是第几个,如果是第二个,就修改成1
问题解决。
问题升级:
就是这个页面,在进行后续操作的时候,又报错了,还是一样的!
也是一番错误的定位,最终定位到了这个html结构
通过这个html结构发现,需要定位的元素,不在iframe窗口下。如果之前已经跳转到了iframe,之后定位的元素也只能够定位到iframe窗口下的元素了。
这时:需要跳出之前进入的iframe页面: driver.switch_to.default_content()
总结:
1. 如果父节点存在iframe,需要先跳转到iframe才能够定位到元素
2. 如果之前跳转过iframe,当需要定位不在同iframe的脚本,需要先跳出之前的iframe窗口,才能够继续定位文章来源:https://www.toymoban.com/news/detail-441260.html
3. 定位不到元素的原因,可以优先考虑iframe~文章来源地址https://www.toymoban.com/news/detail-441260.html
到了这里,关于Python_selenium: 元素定位不到的罪魁祸首之一:iframe的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!