selenium多表单切换(frameiframe)

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()                                                  
# 跳回最外层页面
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

patmos

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

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

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

打赏作者

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

抵扣说明:

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

余额充值