iframe是HTML里面嵌套HTML的一种框架

1.查看iframe

1.Top Window:可直接定位

2.iframe#i:说明此元素在iframe上

3.iframe显示为空:(id或name为空)

4.右边这个看到是空的(2层iframe)

以126邮箱为例

from selenium import webdriver
driver = webdriver.Firefox()
url = "http://mail.126.com/"
driver.get(url)

# 此时使用class定位会报错,因为此时class并不是唯一的,可以用name
driver.find_element_by_name("email").send_keys("adb")

# 这里用到implicitly_wait(),它的作用是全局的,也就是只用一次就可以了,只在find_element时候起作用
driver.implicitly_wait(10)

# 切换iframe,此处id="x-URS-iframe"
driver.switch_to_frame("x-URS-iframe")
# driver.switch_to.frame("x-URS-iframe") # 与上一行代码一样

# 切换到iframe后再定位到此iframe下的name元素
driver.find_element_by_name("email").send_keys("adb")
driver.find_element_by_name("password").send_keys("123")
driver.find_element_by_id("dologin").click()

2、定位iframe

# 1.有id,并且唯一,直接写id
driver.switch_to_frame("x-URS-iframe")
driver.switch_to.frame("x-URS-iframe")

# 2.有name,并且唯一,直接写name
driver.switch_to_frame("xxxx")
driver.switch_to.frame("xxxx")

# 3.无id,无name,先定位iframe元素
iframe = driver.find_elements_by_tag_name("iframe")[0]
driver.switch_to_frame(iframe)
driver.switch_to.frame(iframe)

# 4.通过index索引定位,(从0开始)
driver.switch_to_frame(1) # 第二个

# 使用iframe定位后需退出iframe
# 退出iframe,再操作
driver.switch_to_default_content() # 回到主页面
driver.switch_to.default_content()

3、多个iframe的切换问题

# 如:有两个iframe:f1、f2
# 1.定位到f1
driver.switch_to_frame("f1")
# 2.操作元素
# ······
# 3.退出iframe
driver.switch_to_default_content()
# 4.定位到f2
driver.switch_to_frame("f2")
# ······

嵌套:f1中嵌套着f2
driver.switch_to_frame("f1")
driver.switch_to_frame("f2")
# 操作元素

退出iframe:

# 第一种方式:跳出所有iframe,回到主界面
driver.switch_to_default_content()

# 第二种方式:回到f1(返回上一级)
driver.switch_to.parent_frame()


python+selenium四:iframe查看、定位、切换的更多相关文章

  1. Python selenium PO By.XPATH定位元素报错

    Python selenium PO  By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...

  2. python selenium中iframe切换、window切换方法

    一.selenium中iframe切换方法: 方法一:switch_to.frame frame函数中提供了三种定位方法:by index, name, or webelement. driver.s ...

  3. 【Python + Selenium】之JS定位总结

    感谢:小琰子 Python+Selenium 脚本中的一些js的用法汇总: 1.滚动条 driver.set_window_size(500,500) js = "window.scroll ...

  4. python+selenium基础之XPATH定位(第一篇)

    世界上最远的距离大概就是明明看到一个页面元素矗在那里,但是我却定位不到!! selenium定位元素的方法有很多种,像是通过id.name.class_name.tag_name.link_text等 ...

  5. python selenium下拉框定位

    一.前言 总结一下python+selenium select下拉选择框定位处理的两种方式,以备后续使用时查询: 二.直接定位(XPath) 使用Firebug找到需要定位到的元素,直接右键复制XPa ...

  6. python+selenium:iframe框架中多种定位

    方法一:通过索引,id,name,WebElement定位 from selenium import webdriverdriver = webdriver.Firefox()driver.switc ...

  7. python+selenium的frame表单切换

    switch_to.frame()                               切换frame switch_to.default_content()                切 ...

  8. win+python+selenium实现窗口和tab切换

    这篇总结主要是关于两方面的需求:其一,在浏览器不同tab标签页之间按时间切换(同事用来不停刷新grid crontol 监控页面):其二,实现开启多个窗口,并将窗口缩放到一定范围,并齐占满整个桌面,按 ...

  9. python+selenium五:多窗口切换与获取句柄

    from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdri ...

随机推荐

  1. Swagger介绍-一套流行的API框架

    简介 号称:世界最流行的API框架 官网:http://swagger.io/ 解决什么问题:在前后台分离的开发模式中,减小接口定义沟通成本,方便开发过程中测试,自动生成接口文档. 实例代码位置:ht ...

  2. 为什么要用redis

    服务端的程序如何去识别客户端的状态: http是没有状态的,比如说用户A访问了服务器程序,那服务器如何知道下一次访问的时候还是A呢,这里就要用到session, 这个session是服务器的sessi ...

  3. JS 求一组数中所有数的和以及平均值

    var arr = [10,20,30]; //计数器思想 var sum = 0; for(var i=0;i<arr.length;i++){ sum += arr[i]; } consol ...

  4. 版本管理——git

    一.git简介 git是一个 分布式版本控制系统 ,学习git之前首先要了解什么是分布式版本控制系统. 集中式版本控制:版本库集中存放在中央服务器,我们工作的时候先从中央服务器获取最新版本,干完活后把 ...

  5. CodeChef Arithmetic Progressions

    https://www.codechef.com/status/COUNTARI 题意: 给出n个数,求满足i<j<k且a[j]-a[i]==a[j]-a[k] 的三元组(i,j,k)的个 ...

  6. Codeforces 954 G. Castle Defense

    http://codeforces.com/problemset/problem/954/G 二分答案 检验的时候,从前往后枚举,如果发现某个位置的防御力<二分的值,那么新加的位置肯定是越靠后越 ...

  7. modbus-vcr介绍

    相关链接:modbus-vcr modbus-vcr是一个Ettercap的插件,被使用在缺少数据完整性的工业控制系统协议方面. 这个Ettercap插件执行一个MITM攻击在使用Modbus协议的系 ...

  8. leetcode --binary tree

    1. 求深度: recursive 遍历左右子树,递归跳出时每次加一. int maxDepth(node * root) { if(roor==NULL) return 0; int leftdep ...

  9. <hr />改变颜色

    其实,<hr />是有默认的border的,改变border颜色即可改变hr颜色. 例如: <hr style="position: relative;top: 2.3re ...

  10. ado.net 访问excel

    1 类:OleDbConnection ... 2 connection string : Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelPa ...