selenium 多表单切换

frame/iframe表单嵌套页面的应用。WebDrivr只能在一个页面上对元素识别与定位,对于在frame/iframe表单内嵌页面上的元素无法直接定位。这时需要使用 switch_to.frame()方法将当前定位的主题切换为frame/iframe表单内嵌页面中。

1
2
3
4
5
6
7
8
<html>
  <body>
    ...
    <iframe id="x-URS-iframe" ...>
      <html>
         <body>
           ...
           <input name="email" >

 对于一些登录框的操作,必须先切换到iframe表单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from selenium import webdriver
 
driver = webdriver.Chrome()
driver.get("http://www.126.com")
 
driver.switch_to.frame('x-URS-iframe')
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()
 
driver.quit()

 

switch_to.frame() 默认可直接取表单的id或 name 属性。如果没有可用的id或name属性,则可以通过下面的方式进行定位:

1
2
3
4
5
6
7
#先通过xpath定位到frame
 
i=driver.find_element_by_tag_name("iframe") driver.switch_to_frame(i)
 
#再将定位对象传给switch_to.frame()方法
 
driver.switch_to.parent_frame()

 

跳回最外层页面:switch_to.default_content()

 

posted @   局长  阅读(1251)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示