一、iframe切换方式
原理:页面会进行一层一层的嵌套,只有切换到嵌套的iframe页面,才可以定位到iframe页面里的标签属性等,一般情况不会超过三层,通常最多一层,可能的话有平行的iframe。
# 1、通过name属性进行定位,前提是iframe有name属性
driver.switch_to.frame("login_frame")
# 2、通过iframe索引去切换,注意iframe层级关系
driver.switch_to.frame(1)
# 3、通过元素去定位,先找到要定位的iframe元素,然后再作为参数传入
iframe = driver.find_element("xpath","//iframe[@id='login_frame']")
driver.switch_to.frame(iframe)
# 扩展:
# 关于进入iframe页面怎么退回到主页面
driver.switch_to.default_content()
# 关于进入iframe页面怎么退回到父级的iframe
driver.switch_to.parent_frame()
二、代码示例
"""
举例:已QQ邮箱为例
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
# 1、通过name属性进行定位,前提是iframe有name属性
# driver.switch_to.frame("login_frame")
# 2、通过iframe索引去切换,注意iframe层级关系
# driver.switch_to.frame(1)
# 3、通过元素去定位,先找到要定位的iframe元素,然后再作为参数传入【常用】
iframe = driver.find_element("xpath","//iframe[@id='login_frame']")
driver.switch_to.frame(iframe)
# 点击账号密码登录
driver.find_element("xpath","//a[text()='帐号密码登录']").click()
# 输入账号
driver.find_element(By.ID,"u").send_keys("username")
# 输入密码
driver.find_element(By.ID,"p").send_keys("password")
# 点击登录
driver.find_element("xpath","//input[@id='login_button']").click()
# 强制等待5s
time.sleep(5)
# 退出浏览器
driver.quit()