🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 前言    有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以`http://mail.163.com/`为案例,详细介绍switch\_to\_frame使用方法。 <br /> ## 一、frame和iframe区别     Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架     Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。它和Frame标记的最大区别是在网页中嵌入 的所包含的内容与整个页面是一个整体,而所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内 容的代码。 <br /> ## 二、163登录界面 1. 打开`http://mail.163.com/` 2. 用firebug定位登录框 3. 鼠标停留在中间靠下(定位到iframe位置)时,右上角整个登录框显示灰色,说明iframe区域是整个登录框区域 ![Snipaste_2020-08-18_15-27-58.png](https://i.loli.net/2020/08/18/cglGtP8CeHf7u1h.png) <br /> 三、如果iframe没有id怎么办? 1. 这里iframe的切换是默认支持id和name的方法的,当然实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe 2. 定位元素还是之前的八种方法同样适用,这里我可以通过tag先定位到,也能达到同样效果 ``` # coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://mail.163.com") driver.implicitly_wait(30) # 切换iframe # driver.switch_to_frame("x-URS-iframe") iframe = driver.find_element_by_tag_name("iframe") driver.switch_to_frame(iframe) driver.find_element_by_name("email").send_keys("xxxx") driver.find_element_by_name("password").send_keys("xxxx") ```