iframe没有id和name时如何定位¶
一、iframe简单介绍¶
什么是iframe?¶
iframe 标签也叫浮动框架标签(Inline Frame),是一种特殊的框架标签:
- 可以放在浏览器中的小窗口
- 可以出现在页面的任何一个位置
- 整个页面不一定在框架页面上
- 高度和宽度完全由开发者定义
- 在网页中嵌套另一个网页
常见场景¶
网站登录页面处常见 iframe 的使用。
重要提示¶
在定位 iframe 内的元素时,需要切换到对应的 iframe 中,否则会报错。
二、定位iframe的四大方式¶
方式一:有id和name时¶
当 iframe 中有唯一的 id 或 name 时,可以直接传入属性值:
driver.switch_to.frame('属性值')
注意:当 id 带有时间戳时不可以用在脚本中,因为那段 id 是实时变化的,无法定位。
方式二:用索引切入¶
当没有 id 和 name 时,可以使用索引定位。
基础语法:
driver.switch_to.frame(1) # 下标从0开始
定位步骤:
1. 如果页面内 iframe 较少,可以直接用下标定位
2. 使用 Ctrl + F 搜索 //iframe
3. 右侧会显示共有几个 iframe
4. 点击下键找到自己需要切入的 iframe
5. 确定下标写入脚本中
方式三:用tagname¶
使用 iframe 的 tagname 配合下标定位:
driver.switch_to.frame(driver.find_element('tag_name', 'iframe')[0])
说明:逻辑和索引方式一样,利用下标定位。
方式四:用父级或子级定位¶
通过父子层级关系定位到 iframe。
方法:先定位父级或子级中能定位到的元素,然后利用层级关系定位到 iframe。
示例:
# 从父级中的特殊元素定位到iframe
iframe = driver.find_element('css selector', 'div[id="loginDiv"]>iframe')
driver.switch_to.frame(iframe)
三、注意事项¶
-
必须切换上下文:定位 iframe 内部元素前,必须先切换到对应的 iframe
-
下标从0开始:iframe 的下标从 0 开始计数
-
id变化问题:避免使用带有时间戳的动态 id
-
层级定位:可以使用父级元素的 CSS 选择器来定位 iframe