selenium.common.exceptions.NoSuchFrameException: Message:xxx

首先描述一下问题:
自动化QQ邮箱登录,账户密码输入后跳转到验证界面,此时需要定位元素却怎么也定位不到:
账户密码输入有问题的请参考:无法定位元素的问题
代码如下:


browser = webdriver.Firefox()
browser.get("https://mail.qq.com/")
browser.switch_to.frame("login_frame")
browser.find_element_by_class_name("inputstyle").clear()
browser.find_element_by_class_name("inputstyle").send_keys("xxxx")
browser.find_element_by_class_name("inputstyle.password").clear()
browser.find_element_by_class_name("inputstyle.password").send_keys("xxxx")
browser.find_element_by_id("login_button").click()
browser.find_element_by_class_name("login_button").click()
# browser.switch_to.default_content()  # 回到默认的iframe

 # 等待资源加载
time.sleep(3)
# 等待图片加载出来
browser.find_element_by_id('tcaptcha_drag_button').click()

页面元素如下:
在这里插入图片描述但是报错:NoSuchElementException

再仔细查找一下,发现最靠近该元素的iframe是另一个
在这里插入图片描述
修改代码,先回到默认iframe,再到新的iframe:

browser = webdriver.Firefox()
browser.get("https://mail.qq.com/")
browser.switch_to.frame("login_frame")
browser.find_element_by_class_name("inputstyle").clear()
browser.find_element_by_class_name("inputstyle").send_keys("xxxx")
browser.find_element_by_class_name("inputstyle.password").clear()
browser.find_element_by_class_name("inputstyle.password").send_keys("xxxx")
browser.find_element_by_id("login_button").click()
browser.find_element_by_class_name("login_button").click()
browser.switch_to.default_content()  # 回到默认的iframe

 # 等待资源加载
time.sleep(3)
browser.switch_to.frame("tcaptcha_iframe")

browser.find_element_by_id('tcaptcha_drag_button').click()

就会报错:NoSuchFrameException

这会都要炸掉了!歇一会硬着头皮查一下iframe:

首先看一下iframe:
iframe 标签规定了一个内联框架。
一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

平行嵌套
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210325171205985.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWxhbmJh,size_16,color_FFFFFF,t_

层级嵌套
在这里插入图片描述
这一看就明白了:tcaptcha_iframe嵌套在login_frame中,因此上面的代码不用回到默认iframe,直接再进一层就好了:

browser = webdriver.Firefox()
browser.get("https://mail.qq.com/")
browser.switch_to.frame("login_frame")
browser.find_element_by_class_name("inputstyle").clear()
browser.find_element_by_class_name("inputstyle").send_keys("xxxx")
browser.find_element_by_class_name("inputstyle.password").clear()
browser.find_element_by_class_name("inputstyle.password").send_keys("xxxx")
browser.find_element_by_id("login_button").click()
browser.find_element_by_class_name("login_button").click()
#browser.switch_to.default_content()  # 回到默认的iframe

 # 等待资源加载
time.sleep(3)
browser.switch_to.frame("tcaptcha_iframe")

browser.find_element_by_id('tcaptcha_drag_button').click()

在这里插入图片描述运行成功!开始下一步!

猜你喜欢

转载自blog.csdn.net/liulanba/article/details/115213578