008、iframe 操作
一、iframe 操作
switch_to.frame() 切换到指定iframe元素
switch_to.parent_frame() 切到上一层 iframe
switch_to.default_content() 回到主页面 top
iframe 类似于 html 嵌套;
当用 iframe 时,需要先定位到 iframe—>切换到 iframe,再去定位里面嵌套的元素 ;
如果要再操作其他元素,需要 退出 iframe ;
1、如何知道元素在不在 iframe 上 ,如下2中方式:
2、定位到 iframe 之后,还需要切换到 iframe 上才能操作 iframe 里面的元素
示例代码如下:
# -*- coding:utf-8 -*-
# Author: Sky
# Email: 2780619724@qq.com
# Time: 2021/8/16 16:41
# Project: day01
# Module: study_02.py.py
# Environment: Python3.8.6 , Selenium3 环境 ( 3.141.0 版本)
# Environment: Chrome ( 92.0.4515.131, 正式版本) + chromedriver(92.0.4515.107版本)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://49.235.92.12:8200/users/login/")
# 点击 意见反馈 链接 ,用 id 定位元素
time.sleep(3)
driver.find_element_by_id('feedback').click()
# 第一步 :要定位 iframe 里面的元素,需要先定位 iframe
# 定位 iframe,
time.sleep(3)
iframe = driver.find_element_by_id('feedback_iframe')
# 第二步:切换到 iframe 上
driver.switch_to.frame(iframe)
# 定位到反馈内容框
driver.find_element_by_id('mesaage').send_keys('好好学习,天天向上。')
time.sleep(3)
driver.quit()
执行结果如下:
3、有时候 iframe 元素没有 id name 这些属性,可以通过索引定位(不推荐)
如果 iframe 没有 id 、name 属性,其他属性又不是唯一的,这时可以用 索引定位 ;
示例代码如下:
# -*- coding:utf-8 -*-
# Author: Sky
# Email: 2780619724@qq.com
# Time: 2021/8/16 16:41
# Project: day01
# Module: study_02.py.py
# Environment: Python3.8.6 , Selenium3 环境 ( 3.141.0 版本)
# Environment: Chrome ( 92.0.4515.131, 正式版本) + chromedriver(92.0.4515.107版本)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://49.235.92.12:8200/users/login/")
# 点击 意见反馈 链接 ,用 id 定位元素
time.sleep(3)
driver.find_element_by_id('feedback').click()
# 通过 索引 定位 iframe
time.sleep(3)
driver.switch_to.frame(0)
# 定位到反馈内容框
time.sleep(3)
driver.find_element_by_id('mesaage').send_keys('好好学习,天天向上。')
time.sleep(3)
driver.quit()
执行结果如下:
4、退出 iframe
切回到首页操作首页上元素
# -*- coding:utf-8 -*-
# Author: Sky
# Email: 2780619724@qq.com
# Time: 2021/8/16 16:41
# Project: day01
# Module: study_02.py.py
# Environment: Python3.8.6 , Selenium3 环境 ( 3.141.0 版本)
# Environment: Chrome ( 92.0.4515.131, 正式版本) + chromedriver(92.0.4515.107版本)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://49.235.92.12:8200/users/login/")
driver.maximize_window()
# 点击 意见反馈 链接 ,用 id 定位元素
time.sleep(3)
driver.find_element_by_id('feedback').click()
# 通过 索引 定位 iframe
time.sleep(3)
driver.switch_to.frame(0)
# 定位到反馈内容框
time.sleep(3)
driver.find_element_by_id('mesaage').send_keys('好好学习,天天向上。')
# 退出 iframe
# 方法一: 切换到上一层
# driver.switch_to.parent_frame()
# 方法二:切换到top层
driver.switch_to.default_content()
driver.find_element_by_partial_link_text('登录').click()
time.sleep(3)
driver.quit()