selenium3 + python - iframe
一、frame和iframe区别
Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架
Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。它和Frame标记的最大区别是在网页中嵌入 的<Iframe></Iframe>所包含的内容与整个页面是一个整体,而<Frame>< /Frame>所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内 容的代码。
二、切换iframe
1.由于登录按钮是在iframe上,所以第一步需要把定位器切换到iframe上
2.用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换

三、如果iframe没有id怎么办?
1.这里iframe的切换是默认支持id和name的方法的,当然实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe
2.定位元素八种方法同样适用,这里我可以通过tag先定位到,也能达到同样效果
四、释放iframe
1.当iframe上的操作完后,想重新回到主页面上操作元素,这时候,就可以用switch_to_default_content()方法返回到主页面
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://mail.163.com/")
driver.implicitly_wait(10)
#点击密码登录在这里
driver.find_element_by_id("lbNormal").click() #切换iframe
# driver.switch_to_frame("x-URS-iframe1559570723916.8506")
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to_frame(iframe)
#输入Email账号
driver.find_element_by_name("email").send_keys("123")
#输入passwd
driver.find_element_by_name("password").send_keys("111")
# 没点击操作前,判断选项框状态
s = driver.find_element_by_id("un-login").is_selected()
print(s)
#点击十天免登录--- 复选框单选
driver.find_element_by_id("un-login").click()
# 点击后,判断元素是否为选中状态
r = driver.find_element_by_id("un-login").is_selected()
print(r)
#点击登录
driver.find_element_by_id("dologin").click() # 释放iframe,重新回到主页面上
driver.switch_to_default_content()
#点击登录
driver.find_element_by_id("dologin").click()
#退出浏览器
driver.quit()
selenium3 + python - iframe的更多相关文章
- selenium3 + python - table定位
前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table ...
- Selenium3+python自动化-iframe
一.frame和iframe区别 Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. frame是整个页面的框架,iframe是内嵌的网页元素,也可以说 ...
- selenium3+python自动化50-环境搭建(firefox)
前言 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的. 安装环境过程中主要会遇到三个坑: 1.'geckodri ...
- selenium3+python自动化50-环境搭建(firefox)【转载】
前言 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的. 安装环境过程中主要会遇到三个坑: 1.'geckodri ...
- web端自动化——Selenium3+python自动化(3.7版本)-火狐62版本环境搭建
前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium3为基础. 一.selenium简介 Sel ...
- web端自动化——Selenium3+python自动化(3.7版本)-chrome67环境搭建
前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium3为基础. 一.selenium简介 Sel ...
- Selenium3+python自动化006-环境搭建
一.selenium简介 1.Selenium历史 (1)Selenium 1.0: Selenium IDE Selenium Grid Selenium RC(核心功能) Sele ...
- selenium3 + python - autoit上传文件
一.环境准备: 1.可以autoit官网上下载,安装 http://www.autoitscript.com/site/ 2.AutoIt里面几个菜单功能介绍: SciTE Script Editor ...
- selenium3 + python - xpath定位
什么是xpath呢? 官方介绍:XPath即为XML路径语言,它是一种用来确定XML1(标准通用标记语言3的子集)文档中某部分位置的语言.反正小编看这个介绍是云里雾里的,通俗一点讲就是通过元素的路径来 ...
随机推荐
- numpy.random模块常用函数解析
numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...
- <MySQL>入门四 事务控制语言 TCL
-- TCL /* Transcation Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 案例:转账 name ...
- Flask项目中整合各组件
一.介绍 主要介绍flask_sqlalchemy.flask_script.flask_migrate这三个组件该如何整合到flask项目中,以及如何使用. # 安装组件 pip3 install ...
- Python学习:ModuleNotFoundError: No module named 'pygal.i18n' 的解决方法
最近在学<Python编程:从入门到实践>,16.2小结中 from pygal.i18n import COUNTRIES 获取两个字母的国别码,我用的pygal的版本是2.4.0(终端 ...
- [bzoj3671][Noi2014][随机数生成器] (贪心+位运算+卡空间)
Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M ...
- 通过代码学习python之@property,@staticmethod,@classmethod
URL: https://www.the5fire.com/python-property-staticmethod-classmethod.html #coding=utf-8 class MyCl ...
- $scope的生命周期
model mutation 模型改变 model observation 模型观察 scope destruction scope结束 神奇的scope,一个angular应用只有一个scope,一 ...
- ZOJ——3609 Modular Inverse
Modular Inverse Time Limit: 2 Seconds Memory Limit: 65536 KB The modular modular multiplicative ...
- Diagnose High-Latency I/O Operations Using SystemTap
Luca Canali on 28 Jul 2015 Topic: this post is about some simple tools and techniques that can be us ...
- SQLalchemy 查询总结
#简单查询 print(session.query(User).all()) print(session.query(User.name, User.fullname).all()) print(se ...