iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件中显示。

最典型的案例就是163邮箱登录:http://mail.163.com/,被绿色覆盖的部分即为iframe。

对iframe进行操作,需要用到一下种方法:

  • switch_to_iframe()                       切换到iframe上
  • switch_to.frame()                         切换到iframe上
  • switch_to.default_content()         切换回原主页面

1.确定要操作的元素是否在iframe上。

firebug给我们提供了一个很简易的操作。

以“网易邮箱登录为例”,打开网页http://mail.163.com/,启动firebug

随便选中一个元素,若左上角显示的是TopWindow,则该元素不在iframe上,如“邮箱账号登录”

若左上角现实的是iframe#XXX,则该元素在iframe上,操作该元素需要先切换到该iframe上,XXX为这个iframe的id。

2.切换

#定位到iframe
iframe=driver.find_element_by_id("x-URS-iframe")
#切换到iframe
driver.switch_to_frame(iframe)

切换之后,就可以对iframe上的元素进行操作。

#登录,自行填写账号密码
driver.find_element_by_css_selector("input[name='email']").send_keys("XXX")
driver.find_element_by_css_selector("input[name='password']").send_keys("XXX")
time.sleep(3)
driver.find_element_by_id("dologin").click()

如果不切换直接操作iframe上的元素,编译器会报错

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: input[name='email']

3.switch_to_iframe方法上的横线

当我们调用switch_to_iframe时,编译器会在方法上划一条线

说明,这个方法虽然能用,但是已经过时,不推荐用。查阅文档可以发现,有一种方法将其替换

4.返回主页面

我们切换到iframe上之后,就无法对iframe以外的元素进行操作,如果需要,我们需要退出iframe

#退出iframe
driver.switch_to.default_content()

附源码:

from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("http://mail.163.com/")
time.sleep(3) #定位到iframe
iframe=driver.find_element_by_id("x-URS-iframe")
#切换到iframe
driver.switch_to.frame(iframe) #登录
driver.find_element_by_css_selector("input[name='email']").send_keys("xxx")
driver.find_element_by_css_selector("input[name='password']").send_keys("xxx")
time.sleep(3)
driver.find_element_by_id("dologin").click() #退出iframe
driver.switch_to.default_content()

源码

selenium-iframe操作的更多相关文章

  1. selenium自动化操作

    在前面爬虫的相关介绍中,我们介绍了如何抓取静态页面信息.但是,在实际的网页浏览过程中,我们可能会经常碰到各种需要进行交互的操作,典型的如输入信息.点击按钮之类. 对于这种场景,之前的静态页面操作方式已 ...

  2. selenium怎么操作web页面常见的元素

    总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...

  3. selenium在操作隐藏元素时会报错,怎么判断元素是隐藏的?

    首先页面元素隐藏有五种方法: 1. opacity: 0; opacity 属性的意思是设置一个元素的透明度.它不是为改变元素的边界框(bounding box)而设计的.这意味着将 opacity ...

  4. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 ...

  5. javascript iframe 操作(一)

    [兼容所有浏览器 包括IE7/8/9] 1.父页面中获取IFRAME的WINDOW对象 获得了window对象后,就可以调用iframe页面中定义的方法等. IE:可以通过iframeId.windo ...

  6. selenium iframe 定位 qq空间说说

    selenium iframe 定位  qq空间说说

  7. python selenium 相关操作

    selenium : 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Fi ...

  8. selenium如何操作页面树状列表

    selenium如何操作页面树状列表??举个例子:我要怎么操作如下图所示的树状结构列表?我要对这个树状结构列表做什么操作? 一.思路 1.根据driver.find_element_by_xpath( ...

  9. Selenium常用操作汇总二——iframe的处理

    有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题.这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一.如果你在一 ...

  10. Selenium+python操作id为动态变化的frame(iframe)

    先定位到一组frame:ele = dr.find_elements_by_tag_name('iframe')此时获得一组frame 再通过index取需要切进去的frame并取到该frame的id ...

随机推荐

  1. 简单又炫酷的two.js 二维动画教程

      前  言 S     N 今天呢给大家介绍一个小js框架,Two.JS.其实在自己学习的过程中并没有找到合适的教程,所以我这种学习延迟的同学是有一定难度的,然后准备给大家整理一份,简单易懂的小教程 ...

  2. jquery系列教程6-ajax的应用全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  3. java之基础数据类型学习————(一)

    JAVA数据类型: 总结来说,java的基本数据类型分为 四类八种 • 第一类:整数类型:byte.short.int.long • 第二类:浮点型:float.double • 第三类:字符类型:c ...

  4. IDEA Maven 三层架构 1、基本的Archetype 搭建

    JDK:1.8 Maven:3.3.9 三层架构:基于 SpringMVC 的 UI 层.业务逻辑层以及数据访问层 从对 Maven 的了解可以看出,三层架构的创建在于对文件夹的合理安排,他们通常是主 ...

  5. ajax请求service报405错误 - 【服务器不允许的方法】

    产生原因:web服务器找不到service方法处理请求. 检查方向: ① service方法名称写错 ② service方法参数类型与标准不一致 ③ service方法异常,返回值类型和标准不一致 ④ ...

  6. python 中的enumerate()函数的用法

    enumerate函数说明: 函数语法:enumerate(可遍历的对象,索引号开始的值).enumerate(sequence, [start=0]) 功能:将可循环序列sequence以start ...

  7. eclipse远程调试Linux环境下的web项目

    前提: 远程服务器上的代码和本地的代码同步 第一步 : 配置远程服务器下的startup.sh文件 在第一行添加 : declare -x CATALINA_OPTS="-server -X ...

  8. MySql技术内幕之MySQL入门(2)

    MySql技术内幕之MySQL入门(2) 接上一篇. mysql> source create_member.sql; # 创建member表 Query OK, 0 rows affected ...

  9. Linux下如何高效删除一个几十G的文本文件的最后一行或几行

    当我们在服务器端记录日志或文本数据时,有时候会有需要删除一个大文件的最后几行,这时如何才能高效实现. 上网浏览终于找到dd命令,亲测如下,删除一个32GB的日志文件最后100行仅需要4分钟 [root ...

  10. python 文件相关知识

    字符编码相关 什么是字符编码 字符编码的类型 字符编码的使用 python2和python里字符编码的区别 文件的相关 文件的基础操作 打开文件的模式 字符编码 什么是字符编码在计算机里只识别二进制, ...