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

1.ifram和frameset介绍

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

<iframe>标签规定一个内联框架,一个内联框架被用来在当前 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标签里。它的表现形式为:

 

<!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提供的方法 :

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

具体代码 :

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空间主页 ,点击登录 ,就必须使用这个切换 。代码示例:

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

3.项目效果

 

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值