selenium多表单切换(frameiframe)

本文介绍如何使用Selenium WebDriver进行iframe表单切换,并通过示例演示如何在126邮箱登录并发送邮件的具体操作流程。

selenium多表单切换(frame/iframe)

webdriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。

这时就需要通过switch_to_frame()方法将当前定位的主体切换为内嵌表单。

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

web页面的前端代码如下:

<!DOCTYPE html>
<html>
  <body>
    ...
    <iframe id="x-URS-iframe" ...>
      <html>
         <body>
           ...
           <input name="email" >
网页表单中嵌套另一个表单

126邮箱登录,想要操作登录框必须要先切换到iframe表单

`

#导入浏览器驱动,时间模块
from selenium import webdriver
import time
#实例化web网页使用chrome驱动
driver = webdriver.Chrome()
#设置隐示等待20s
driver.implicitly_wait(20)
#将窗口最大化
driver.maximize_window()
#使用get方法获取网页内容,此时获取到的网页在外面的表单中
driver.get('https://www.126.com/')

#切换到登录表单
#获取表单有两种方式:
#frameobj= driver.switch_to.frame("login-frame")
#frameobj= driver.find.element_by_xpath("//*[@id='']")
#括号内参数可以是frame的序号(第一个为0)
driver.switch_to.frame(0)

#输入邮箱
driver.find_element_by_css_selector('input[name="email"]').send_keys("skin5332")

#输入密码
driver.find_element_by_css_selector('input[name="password"]').send_keys("qwe653")

#点击 登录 按钮
driver.find_element_by_id('dologin').click()

#退出到默认打开的页面
driver.switch_to.default_content()

#点击 写信
driver.find_element_by_id('_mail_component_132_132').click()

#输入收件人
#input标签实现的输入框,直接使用send_keys输入内容即可
driver.find_element_by_css_selector(".nui-editableAddr-ipt").send_keys("lrr15058287369@126.com")

#输入 主题
driver.find_element_by_css_selector('div[aria-label="邮件主题输入框,请输入邮件主题"]>input').send_keys("hello 明天周六")

#表单切换,定位到子表单
iframe_element = driver.find_element_by_css_selector('.APP-editor-iframe')
#使用switch_to.frame将表单进行切换
driver.switch_to.frame(iframe_element)

#定位到邮箱正文输入框 输入内容
driver.find_element_by_css_selector('body').send_keys("hello 你好 明天可以休息了 是骗人的")

#从frame中切回主文档(driver.switchTo().defaultContent())
driver.switch_to.default_content()

#点击 发送 按钮
driver.find_element_by_xpath(
    '//footer/div[@class="js-component-button nui-mainBtn nui-btn nui-btn-hasIcon nui-mainBtn-hasIcon  "]/span[2]').click()

定位以及切换frame(iframe)

1、切换iframe
driver.switchTo().frame(“index”); //括号内参数可以是frame的序号(第一个为0)

driver.switchTo().defaultContent()
3、嵌套frame的操作

(driver.switchTo().parentFrame())相当于后退


driver.switch_to.frame(0)                                                                 # 通过iframe的索引切入 iframe表单

driver.switch_to.frame('id value')                                                     
# 通过iframe的id切换入frame表单

driver.switch_to.frame('name')                                                        
# 通过iframe的name切入iframe表单

driver.switch_to.parent_comtent()                                                 
# 跳出当前一级表单

driver.switch_to.default_content()                                                  
# 跳回最外层页面
在使用 Selenium 进行自动化测试,处理多个表单(iframe)的切换和操作是常见的需求,尤其是在处理嵌套页面结构Selenium 提供了专门的方法来切换到不同的表单并进行操作。 ### 切换到指定表单切换到某个表单,可以通过 `switch_to.frame()` 方法实现。该方法支持通过元素、索引或表单名称进行切换。例如,可以通过定位表单元素并将其作为参数传入: ```python login_frame = driver.find_element(By.ID, "login_frame") driver.switch_to.frame(login_frame) ``` 通过这种方式,可以进入指定的 iframe,从而对其中的元素进行操作[^2]。 ### 在表单中进行操作 进入表单后,可以像在页面中一样定位和操作元素。例如,可以点击按钮、输入文本等: ```python driver.find_element(By.ID, "switcher_plogin").click() driver.find_element(By.ID, "u").send_keys("123") driver.find_element(By.ID, "p").send_keys("456") ``` 这些操作在表单内部进行,用于模拟用户在嵌套页面中的行为[^2]。 ### 切换页面 完成对表单的操作后,需要切换页面,以便继续对页面上的元素进行操作。可以通过 `switch_to.default_content()` 方法实现: ```python driver.switch_to.default_content() ``` 该方法将焦点切换文档,确保后续操作不会受到影响[^3]。 ### 多个表单之间的切换 如果页面中包含多个嵌套表单,可以通过多次调用 `switch_to.frame()` 方法在不同表单之间切换。需要注意的是,每次切换都应确保定位到正确的表单元素,并且在切换之前确保该表单是可操作的。例如: ```python # 切换到第一个表单 frame1 = driver.find_element(By.ID, "frame1") driver.switch_to.frame(frame1) # 对第一个表单进行操作 driver.find_element(By.ID, "element1").click() # 切换页面 driver.switch_to.default_content() # 切换到第二个表单 frame2 = driver.find_element(By.ID, "frame2") driver.switch_to.frame(frame2) # 对第二个表单进行操作 driver.find_element(By.ID, "element2").send_keys("text") ``` 通过这种方式,可以在多个表单之间灵活切换并执行所需操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

patmos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值