0


Python_selenium: 元素定位不到的罪魁祸首之一:iframe

背景:组内同事最近在写脚本,使用复制的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怎么写,可以在评论区提问】

改了后,不好用,还是报错。

  1. 是不是等待没加?

不是,等待了10秒,肯定能够加载

  1. 当前元素父节点,是否存在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窗口,才能够继续定位

3. 定位不到元素的原因,可以优先考虑iframe~


本文转载自: https://blog.csdn.net/Bierante/article/details/125261680
版权归原作者 Bierante 所有, 如有侵权,请联系我们删除。

“Python_selenium: 元素定位不到的罪魁祸首之一:iframe”的评论:

还没有评论