技术分享 | 网页 frame 与多窗口处理

简介: 技术分享 | 网页 frame 与多窗口处理

知识点

iframe解析


如图可以看到iframe的标签

iframe 的多种切换方式

HTML 代码示例

<iframe src="1.html" id="hogwarts_id" name="hogwarts_name"></iframe>

那么通过传入 id、name、index 以及 Selenium 的 WebElement 对象来切换 frame

  • Python 版本
# index:传入整型的参数,从 0 开始,这里的 0 就是第一个 frame
driver.switch_to.frame(0)
#id:iframe 的 id
driver.switch_to.frame("hogwarts_id")
#name: iframe 的 name
driver.switch_to.frame("hogwarts_name")
#WebElement: 传入 `selenium.webelement` 对象
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
  • Java 版本
// index:传入整型的参数,从 0 开始,这里的 0 就是第一个 frame
driver.switchTo().frame(0);
// id:iframe 的 id
driver.switchTo().frame("hogwarts_id");
// name: iframe 的 name
driver.switchTo().frame("hogwarts_name");
// WebElement: 传入 `selenium.webelement` 对象
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));

iframe 切换回默认页面

在切换页面之后,如果还想操作原页面,则可以使用

  • Python 版本
driver.switch_to.default_content()
  • Java 版本
driver.switchTo().defaultContent();

iframe 多层切换

如图所示多层嵌套的 iframe 从最外部 iframe 切换到 iframe2 则需要层层切换

  • Python 版本
driver.switch_to.frame("iframe1")
driver.switch_to.frame("iframe2")
  • Java 版本
driver.switchTo().frame("iframe1");
driver.switchTo().frame("iframe2");

从 iframe2 切换回 iframe1 可以使用父子切换

  • Python 版本
# 从 iframe2 切换到上一级 iframe1 
driver.switch_to.parent_frame()
# 从 iframe1 切换到上一级 iframe,如果 iframe 已经是最上级,则保持不变
driver.switch_to.parent_frame()
  • Java 版本
// 从 iframe2 切换到上一级 iframe1
driver.switchTo().parentFrame();
// 从 iframe1 切换到上一级 iframe,如果 iframe 已经是最上级,则保持不变
driver.switchTo().parentFrame();

这个方法是 Selenium 提供的直接从子 frame 切换到父 frame,可以使用在嵌套的 frame 框架中。

多窗口处理

元素有属性,浏览器的窗口其实也有属性的,浏览器窗口的属性用句柄(handle)来识别。

句柄的获取

当浏览器打开一个窗口时,如果要在新的窗口操作就需要句柄切换。

当有多个窗口时,可以用 window_handles 打印句柄:

  • Python 版本
driver = webdriver.Chrome()
handles = driver.window_handles
print(handles)
  • Java 版本
driver = new ChromeDriver();
Set<String> handles = driver.getWindowHandles();
System.out.println(handles);

打印出的 window_handles:

['CDwindow-8012E9EF4DC788A58DC1588E7B8A7C44', 'CDwindow-11D52927C71E7C2B9984F2D1E2856049']

句柄的切换

通过打印 handles 可以看出,它是一个列表。

  • Python版本可以通过 switch_to.window() 来切换句柄
  • Java版本可以通过 switchTo().window() 来切换句柄
  • Python 版本


从上面源代码中的说明可以看出,switch_to.window()需要提供一个 windows_name,可以是 name 也可以是 windows handle。

from selenium import webdriver
driver = webdriver.Chrome()
handles = driver.window_handles
print(handles)
driver.switch_to.window(handles[-1])

这里唯一要注意的是 handles 是一个列表,这里的 -1 表示浏览器窗口的倒数第一个。

  • Java 版本
...
Set<String> windowHandles = driver.getWindowHandles();
Iterator<String> it = windowHandles.iterator();   //迭代allhandle里面的句柄
while(it.hasNext()) {                            //用it.hasNext()判断时候有下一个窗口,如果有就切换到下一个窗口
    driver.switchTo().window(it.next());        //切换到新窗口
}
...
}

Java 中切换句柄需要使用迭代器,如果有下一个句柄,则切换,没有则不切换,上面代码表示切换到最后一个窗口。更多技术文章

相关文章
|
4月前
|
人工智能 弹性计算 监控
从会用到精通!OpenClaw 全平台部署+Anthropic工程师9条实战心法+Skill设计黄金法则+大模型配置完全实战分享
2026年,AI智能体的核心竞争力已经从“模型强弱”转向**Skill工程能力**。Anthropic内部工程师经过数百个Skill实战验证,总结出一套真正落地、避坑、可复用的Skill设计心法——Skill不是单个Markdown文件,而是完整文件夹体系;不是简单指令,而是可进化、可验证、可自动化、可记忆的生产级单元。这套经验直接适用于OpenClaw(Clawdbot),能让你的智能体从“能用”瞬间升级为“生产级稳定运行”。
685 1
当前JBide插件使用体会
新插件启用智能体处理任务,结果尚可但耗时长:思考超10分钟,执行中两分钟反复访问无效语句。单任务即消耗50%配额,用量惊人。虽收费合理,但当前比例对个人用户负担较重。
|
2月前
|
人工智能 安全 测试技术
测试圈正在淘汰不懂“智能体插件”的人
2026年,大厂测试岗位正经历范式革命:JD普遍硬性要求AI Agent、MCP协议、Skill封装等能力。测试已从“验证功能”转向“验证智能体能力”,核心不再是写脚本,而是设计可复用的Skill、构建安全可控的Agent测试体系。新能力栈(Agent理解+Skill开发+MCP工程+质量架构)正在定型。
|
5月前
|
人工智能 自然语言处理 安全
阿里云保姆级OpenClaw(原Clawdbot)部署飞书对接教程 手把手教你搭建AI助手
OpenClaw(前身为Clawdbot、Moltbot)是一款具备自然语言理解、任务自动化执行与多工具集成能力的AI代理工具,无需专业编程技能,即可实现文档处理、日程管理、信息查询、开发辅助、轻量团队协同等多元实操功能,适配个人办公与团队协作等多种场景。2026年,OpenClaw在版本迭代中进一步优化了与飞书的集成适配,阿里云则针对新手用户推出专属一键部署方案,通过预置标准化专属镜像,提前完成运行环境、核心依赖的安装配置,彻底简化了传统部署中复杂的参数调试、依赖冲突解决等流程,真正实现“零技术门槛、秒级落地”,无需额外开发即可完成与飞书的无缝联动。
4013 4
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
902 103
|
11月前
|
Web App开发 安全 分布式数据库
推荐一款多功能下载工具XDown,支持Torrent/磁力链/百度云等(附下载)
XDown官方版是一款功能强大的下载工具,支持HTTP/HTTPS/HTTP2协议下载,完全免费、无广告,支持128线程,原生支持BT种子和磁力链接,可浏览器自动接管下载,具备断线重连、自定义并发数、代理设置等特性,操作简便,适用于高效下载与做种分享。
4041 0
|
人工智能 自然语言处理 监控
蓝耘智算:开启智能算力新时代
蓝耘智算作为智能算力领域的新兴平台,为AI应用提供强大计算支持。它通过异构算力重构、丰富模型库与低代码工具,降低使用门槛,助力中小企业发展。其应用场景涵盖内容创作、金融、医疗、教育、制造及智慧城市等领域,以高效算力与军工级安全体系推动行业创新。未来,蓝耘智算将融合更多前沿技术,持续拓展应用边界,为数字化时代注入新动力。
|
机器学习/深度学习 编解码 计算机视觉
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
3937 0
【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
|
人工智能 算法 自动驾驶
新视角设计下一代时序基础模型,Salesforce推出Moirai-MoE
**Moirai-MoE:时间序列预测的新突破** Salesforce Research团队提出了Moirai-MoE模型,通过稀疏混合专家(MoE)技术,解决了传统时间序列预测方法中存在的频率不可靠和非平稳性问题。该模型在39个数据集上的实验结果表明,其性能优于现有基础模型,具有更高的创新性和泛化能力。论文地址:https://arxiv.org/abs/2410.10469
629 4

热门文章

最新文章