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.项目效果

相关推荐
for_ever_love__3 分钟前
python基础语法学习: 正则表达式
python·学习·正则表达式
aiqianji5 分钟前
功能全面的教AI短篇小说写作的软件都有哪些?
人工智能·python
聪明蛋子哟7 分钟前
浏览器自动化的“持久身份”:多会话认证与Agent技能的无缝集成实践
运维·自动化
轮到我狗叫了23 分钟前
Slurm如何使用
人工智能·python·深度学习·机器学习
代码方舟36 分钟前
零信任架构实战:基于天远手机携号转网V即时版构建自动化营销风控网关
人工智能·智能手机·架构·自动化
志栋智能1 小时前
大模型驱动运维:重构故障根因分析的“思考”逻辑
运维·服务器·重构·自动化
Ali885201 小时前
Python列表增删改查速查表和详细演示
python
新时代牛马1 小时前
softirq 与tasklet:从irq_exit 到__do_softirq 的下半部路径
python
tqs_123451 小时前
值传递与引用传递
java·开发语言·python
YsyaaabB1 小时前
Deep Agents 实战课程
python·langchain