selenium 框架切换iframe报错NoSuchFrameException的解决方法

最近在使用selenium框架做网页机器人,记录一些挺重要但是网上没有说的很清晰的细节。

使用find_element_by_xpath()的时候遇到报错,有比较大概率是因为页面有iframe 导致找不到这个节点,因此就需要用 _switch_to.frame()方法来切换到具体的iframe中,再寻找目标节点。

比如豆瓣的登陆验证,就有3个iframe在中间,如图这是第一个iframe

与find_element_by_xpath() 方法不同,_switch_to.frame() 的参数并不支持xpath,

如果使用

driver._switch_to.frame('//*[@id="anony-reg-new"]/div/div[1]/iframe') 是会报错NoSuchFrameException的

_switch_to.frame()  要输入一个对象。

因此,我们切换到第二个iframe,可以采用

iframe = driver.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')

driver._switch_to.frame(iframe)

也可以采用 driver._switch_to.frame(1) 的方式。

但是显然,driver._switch_to.frame(iframe) 的方式更加的准确,也容易在网页的xpath 变化后(豆瓣等验证码经常会周期性修改一些参数),更好的修改锁定对象,可阅读性也更强。

你可能感兴趣的:(selenium 框架切换iframe报错NoSuchFrameException的解决方法)