web自动化系列-selenium的frame窗口切换(十四)

1.ifram和frameset介绍

frame :HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素 。它通常包含两种形式 ,iframe和frameset .

<iframe>标签规定一个内联框架,一个内联框架被用来在当前 HTML 文档中嵌入另一个文档,通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。

表现形式为:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试网页</title>
</head>
<body>
<iframe src="/statics/demosource/demo_iframe.htm" name="iframe"></iframe>
<p><a href="https://www.baidu.com" target="iframe_a">测试网页</a></p>
<p><b>注意:</b> 因为 a 标签的 target 属性是名为 iframe_a 的 iframe 框架,所以在点击链接时页面会显示在 iframe框架中。</p>
</body>
</html>

其中HTML页面中有个以iframe开头的标签 ,它的属性name='iframe_a' ,这个就是一个内嵌的框架 。

<frameset>标签 在一个页面中设置一个或多个框架,用<frameset></frameset>代替了<body></body>,不能出现在body标签里。它的表现形式为:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Frameset Example</title>
</head>
<frameset cols="50%,50%">
    <frame src="page1.html" name="frame1">
    <frame src="page2.html" name="frame2">
</frameset>
</html>

需要注意的是,由于 framesets 和 frames 已经被视为过时技术,并且在现代 web 开发中很少使用,因此许多现代浏览器可能不再支持 framesets,或者对其支持有限。此外,framesets 在无障碍性和可维护性方面存在许多问题,因此通常不建议在新的 web 项目中使用。

2.具体案例

出现以上形式的页面,通过以前介绍的方法是无法定位的 ,需要用到如下的方法才能操作 。

以下为selenium提供的方法 :

python 复制代码
# 方法
1. driver.switch_to.frame(frame_reference) : 其中frame_reference的值就是frame标签中的id或name的值 。
2. driver.switch_to.default_content() :恢复默认页面方法

具体代码 :

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置 WebDriver 路径(根据你的实际路径进行调整)
chrome_driver_path = '/path/to/chromedriver'

# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=chrome_driver_path)

# 打开 frameset 页面
driver.get('file:///path/to/your/frameset_page.html')

# 切换到name为 'frame1' 的 框架上
driver.switch_to.frame('frame1')


# 定位 page1.html 中的元素
# 假设你要定位一个 id 为 'myElement' 的元素
driver.until(EC.presence_of_element_located((By.ID, 'myElement'))).click()

# 如果需要切换回主页面或其他 frame,可以使用
# driver.switch_to.default_content()
# 或者
# driver.switch_to.frame('otherFrameName')

# 关闭浏览器
driver.quit()

再比如qq空间就是iframe布局 ,登录qq空间主页 ,点击登录 ,就必须使用这个切换 。代码示例:

python 复制代码
url = "http://i.qq.com"
driver.switch_to.frame('login_frame') # 切换到login_frame框架
driver.find_element_by_id("switcher_plogin").click()

3.项目效果

相关推荐
yvestine17 分钟前
自然语言处理——文本表示
人工智能·python·算法·自然语言处理·文本表示
zzc92125 分钟前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
编程有点难40 分钟前
Python训练打卡Day43
开发语言·python·深度学习
2301_805054561 小时前
Python训练营打卡Day48(2025.6.8)
pytorch·python·深度学习
LjQ20401 小时前
网络爬虫一课一得
开发语言·数据库·python·网络爬虫
哆啦A梦的口袋呀1 小时前
基于Python学习《Head First设计模式》第九章 迭代器和组合模式
python·学习·设计模式
sponge'2 小时前
opencv学习笔记2:卷积、均值滤波、中值滤波
笔记·python·opencv·学习
databook2 小时前
概率图模型:机器学习的结构化概率之道
python·机器学习·scikit-learn
拾回程序猿的圈圈∞2 小时前
实战二:开发网页端界面完成黑白视频转为彩色视频
python·ai编程
亚林瓜子2 小时前
AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
python·ci/cd·flask·web·aws·beanstalk·codepipeline