web自动化之iframe 页面的操作

前言:iframe是啥?ifrname是嵌套到html里的另一个页面,点击对应的功能就会跳转到新的html里。
一般遇到这种,我们代码不对iframe页面进行操作的话,那我们定位是对它不起作用的。

那我们怎么知道我们所在的元素在iframe里呢?我们以QQ官网登录来做示范
在这里插入图片描述
我们点击登录。然后定位一下登录里的“账号密码登录”,发现下面有iframe。就足以证明它在iframe页面里。

或者搜索iframe,就可以发现QQ的登录页面是iframe
在这里插入图片描述

针对iframe的特征,我们有两种方式可对待
第一种:
 .switch_to.frame() – 可以是下标,也可以是iframe的name属性 ,也可以是iframe的webelement对象

driver = webdriver.Chrome()
driver.get("https://im.qq.com/")
#等待操作。这里可以用三大等待其中一个去等待(咱们不写哈)

# 下面3中用其中一种
#1.1下标。从1开始
driver.switch_to.frame(1)
#1.2 ifrname的name属性
driver.switch_to.frame("login_frame")
#1.3 iframe的webelement对象
driver.switch_to.frame('//iframe[@name="login_frame"]')

#接下来就是对ifrname的里的元素操作。大家自己个玩吧

第二种方法expected_conditions里面有个frame_to_be_available_and_switch_to_it()方法。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://im.qq.com/")

WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//li[@id="loginInfo"]//a[@id="login" and text()="登录"]')))
driver.find_element_by_xpath('//li[@id="loginInfo"]//a[@id="login" and text()="登录"]').click()

#这样就OK了,这里支持下标,name属性和webelement对象
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it("login_frame"))

#点击账号或密码登录
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//div[@class="bottom hide"]//a[@class="link" and text()="帐号密码登录"]')))
driver.find_element_by_xpath('//div[@class="bottom hide"]//a[@class="link" and text()="帐号密码登录"]').click()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值