python+selenium自动化(六)__切换/处理弹窗与iframe

在web自动化执行过程中,可能需要对页面中的弹窗/iframe进行处理/切换,本节介绍如何利用selenium处理此类操作

一、切换浏览器标签页

使用switch_to_window(window),搭配句柄window_handles、current_window_handle使用

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()
driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
#获取当前窗口所有句柄
all_windows = driver.window_handles
#获取当前标签页窗口句柄
current_window = driver.current_window_handle
#切换标签页窗口
for window in all_windows:
    if window !=current_window:
        print("切换前的窗口名称是:",driver.title)
        driver.switch_to_window(window)
        time.sleep(2)
        print("切换后的窗口名称是:",driver.title)
        break

二、切换iframe页面

使用switch_to_frame()、switch_to_default_content(),一般成套使用更好,以防止未切回导致定位失败

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://ke.qq.com/")
driver.implicitly_wait(10)
#点击登录
driver.find_element_by_class_name("btn-default").click()
time.sleep(0.5)
driver.find_element_by_xpath("//*[@class='js-btns-enter btns-enter btns-enter-qq']").click()
time.sleep(2)
#点击账号密码登录
#这里直接定位会失败,需要切换到登录弹窗页面后再进行定位,习惯使用的是2种切换方式
#1.iframe有唯一名称
driver.switch_to_frame("login_frame_qq")
driver.find_element_by_id("switcher_plogin").click()
driver.find_element_by_id("u").send_keys("123456789")
#回切到主页面
driver.switch_to_default_content()
time.sleep(2)
#2.iframe无名字,使用下标进行切换,且下标从0开始
#在页面中查到到当前需要定位的iframe在第3个,所以下标是2
#再次切换到弹窗页面
driver.switch_to_frame(2)
driver.find_element_by_id("p").send_keys("123456789")
driver.find_element_by_id("login_button").click()
driver.switch_to_default_content()
time.sleep(5)
driver.quit()

三、处理弹窗

使用switch_to_alert()中的accept()、dismiss()、send_keys、text进行操作,弹窗一般有三种类型,①.只有确认按钮的;②.有确认/取消按钮的;③.需要输入文字的

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
#创建一个测试弹窗
driver.execute_script("window.alert('这是一个测试弹窗')")
time.sleep(2)
#1.弹窗中只有确认按钮的
driver.switch_to_alert().accept()
time.sleep(1)
#2.弹窗中有确认/取消按钮的
driver.execute_script("window.alert('这是一个测试弹窗')")
time.sleep(3)
#点击取消
driver.switch_to_alert().dismiss()
time.sleep(1)
#弹窗中需要输入文字的
# driver.switch_to_alert().send_keys("测试测试测试")
#获取弹窗中的内容
driver.execute_script("window.alert('这是一个测试弹窗')")
res = driver.switch_to_alert().text
print(res)

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值