前言
有时候明明我们有正确定位元素,但是执行时还会报错说元素不存在,这时候就要去看看是不是页面有iframe或者frame标签了。iframe标签正常用在表单提交的地方,如登录页面等
qq空间登录为例
地址:https://qzone.qq.com/
查看页面元素,都含有id,可以直接使用id来定位

代码如下(此处还没有去处理iframe标签的问题)
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get("https://qzone.qq.com/")
driver.find_element_by_id("switcher_plogin").click() # 点击账号、密码登录
driver.maximize_window()
time.sleep(2)
driver.find_element_by_id("u").send_keys("9071xxxx")
driver.find_element_by_id("p").send_keys("123456")
driver.find_element_by_id("login_button").click()
执行时报错,账号密码这个id不存在

iframe
查看登录页面,可以按节点依次往上查找,看到了iframe标签,正是因为登录页面是嵌入在iframe里,所以才定位不到

代码修改
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get("https://qzone.qq.com/")# 切换到iframe页面,这里可以直接使用id或者name来定位到
driver.switch_to.frame("login_frame")
driver.find_element_by_id("switcher_plogin").click() # 点击账号、密码登录
driver.maximize_window()
time.sleep(2)
driver.find_element_by_id("u").send_keys("907xxxxxx@qq.com")
driver.find_element_by_id("p").send_keys("xxxxxxx")
driver.find_element_by_id("login_button").click()# 退出iframe页面返回主页面
driver.switch_to.default_content()
执行后,qq空间登录成功
