一、iframe切换方式
1、通过iframe的name属性
前提是iframe有name属性
driver.switch_to.frame("login_frame")
2、通过元素定位
iframe = driver.find_element(By.ID, "login_frame")
driver.switch_to.frame(iframe)
driver.find_element(driver.find_element(By.ID, "login_frame"))
3、索引获取
iframes = driver.find_elements_by_tag_name("iframe")
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[1])
其他:
1、切换到父级的iframe :driver.switch_to.parent_frame()
2、切换到最顶层的iframe:driver.switch_to.default_content()
二、代码实现
访问QQ邮箱为例:
from selenium import webdriver
import logging
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
logging.basicConfig(level=logging.DEBUG)
# 启动浏览器驱动服务器
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
# 切iframe,通过name属性切换
driver.switch_to.frame("login_frame")
# 定位到账号输入框
locator2 = (By.XPATH, '//input[@id="u"]')
ele2 = WebDriverWait(driver=driver, timeout=10, poll_frequency=1).until(
EC.visibility_of_element_located(locator=locator2))
ele2.send_keys("1811454825@qq.com")
time.sleep(5)
driver.quit()
运行效果:
打开QQ邮箱,输入QQ账号