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怎么写,可以在评论区提问】

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

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窗口,才能够继续定位

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值