一般情况下,我们可以直接通过id或者name切换到frame。
driver.switch_to.frame()
小括号里面填iframe标签的id,或name值
如果没有id,或者name,我们可以先定位到iframe标签,再切换到frame
# 根据标签名切换
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
当然我们也可以通过其他页面元素定位的方式。
页面元素定位的8种方式:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
接下来通过两个具体的实例了解下driver.switch_to.frame()
1、模拟登陆163邮箱
# coding:utf-8 from selenium import webdriver # 实例化 driver = webdriver.Chrome() # 发起请求 driver.get("http://mail.163.com/") # 隐式等待10s driver.implicitly_wait(10) # 切换iframe # 根据标签名切换 iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) # 定位元素并向input标签里输入值 driver.find_element_by_name("email").send_keys("***") # 输入账号 driver.find_element_by_name("password").send_keys("***") # 输入密码 # 点击登陆 # driver.find_element_by_id("dologin").click() # 释放iframe,重新回到主页面 driver.switch_to.default_content()
2、模拟登陆豆瓣
from selenium import webdriver # 实例化 driver = webdriver.Chrome() # 发起请求 driver.get("https://www.douban.com") # 切换frame iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) # 定位元素 driver.find_element_by_class_name("account-tab-account").click() driver.find_element_by_id("username").send_keys("***") # 输入用户名 driver.find_element_by_id("password").send_keys("***") # 输入密码 # 点击登陆豆瓣 # driver.find_element_by_link_text('登陆豆瓣') driver.find_element_by_class_name("btn").click() # driver.quit()