python selenium 弹出框处理的实现


Posted in Python onFebruary 26, 2019

弹出框有两种:页面弹出框(可定位元素能操作)、Windows弹出框(不能直接定位)

一、页面弹出框

等待弹出框出现之后,定位弹出框,操作其中元素

如: 

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
#点击百度登录按钮
driver.find_element_by_xpath('//*[@id="u1"]//a[@name="tj_login"]').click()

#等待百度登录弹出框中 要出现的元素可见
ele_id = "TANGRAM__PSP_10__footerULoginBtn"
param = (By.ID,ele_id)
#元素可见时,再进行后续操作
WebDriverWait(driver,10).until(EC.visibility_of_element_located(param))

driver.find_element_by_id(ele_id).click()
time.sleep(5)
driver.quit()

二、Windows弹出框

使用 driver.switch_to.alert  切换到Windows弹出框

Alert类提供了一系列操作方法:

  • accept() 确定
  • dismiss() 取消
  • text() 获取弹出框里面的内容
  • send_keys(keysToSend) 输入字符串

如: 

#1:定位alert弹出框
#点击页面元素,触发alert弹出框
driver.find_element_by_xpath('//*[@id="alert"]').click()
time.sleep(3)
#等待alert弹出框可见
WebDriverWait(driver,20).until(EC.alert_is_present())

#从html页面切换到alert弹框 
alert = driver.switch_to.alert
#获取alert的文本内容
print(alert.text)
#接受--选择“确定”
alert.accept()

#2:定位confirm弹出框
driver.find_element_by_xpath('//*[@id="confirm"]').click()
time.sleep(3)
WebDriverWait(driver,20).until(EC.alert_is_present())
alert =driver.switch_to.alert
print(alert.text)
# 接受--选择“取消”
alert.dismiss()


#3:定位prompt弹出框
driver.find_element_by_id("prompt").click()
time.sleep(3)
WebDriverWait(driver,20).until(EC.alert_is_present())
alert =driver.switch_to.alert
alert.send_keys("jaja")
time.sleep(5)
print(alert.text)
# alert.dismiss()
alert.accept()

实例

首先复制下列的html代码,保存为test.html到与脚本相同的文件夹下。这个html文件包含三个按钮,点击后会弹出三种不同的弹出框,另外还有一个文字区域,显示刚才的动作。

<!doctype html>
<head>
  <title>alert,confirm and prompt</title>
  <script type='text/javascript'>
    function myFunctionAlert(){
      window.alert('this is an alert, it has a confirm button')
      document.getElementById('action').value = 'you just clicked confirm button of alert()'
    }

    function myFunctionConfirm(){
      var result = window.confirm('this is a confirm,it has a confirm button and a cancel button')
      if(result == true){
        document.getElementById('action').value = 'you just clicked confirm button of confirm()'
      }else if(result == false){
        document.getElementById('action').value = 'you just clicked cancel button of confirm()'
      }else{
        document.getElementsById('action').value = 'you did nothing'
      }
    }

    function myFunctionPrompt(){
      var result = window.prompt('this is a prompt,it has an input and two buttons')
      if(result == null){
        document.getElementById('action').value = 'you just clicked cancel button of prompt()'
      }else if(result == ''){
        document.getElementById('action').value = 'you just input nothing and clicked confirm button of prompt()'
      }else{
        document.getElementById('action').value = 'you just input \'' + result + '\' and clicked confirm button of promt()'
      }
    }
  </script>
  <body>
    <br>
    <button type='button' onclick='myFunctionAlert()'>show alert</button>
    <br>
    <button type='button' onclick='myFunctionConfirm()'>show confirm</button>
    <br>
    <button type='button' onclick='myFunctionPrompt()'>show prompt</button>
    <br>
    <textarea id='action' style="width:200px;height:100px;font-family: Microsoft YaHei"></textarea>
  </body>
</head>

首先我们先实现:

1.点击第一个按钮‘show alert',然后在弹出的对话框中点击【确认】按钮,并且打印你的动作。
2.点击第二个按钮‘show confirm',然后在弹出的对话框中点击【取消】按钮,并且打印你的动作。

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep
import os

driver = webdriver.Chrome()
driver.implicitly_wait(10)
file = 'file:///' + os.path.abspath('test.html')
driver.get(file)

driver.find_element_by_css_selector('body>button:nth-child(2)').click() #使用css选择器定位,show alert按钮为body下的第二个子元素
sleep(2)
alert = driver.switch_to.alert #切换到alert
print('alert text : ' + alert.text) #打印alert的文本
alert.accept() #点击alert的【确认】按钮
print('what you have done is : ' + driver.find_element_by_id('action').get_attribute('value')) #打印刚才的操作(获取页面最下方的textarea中文本)
sleep(2)
driver.find_element_by_css_selector('body>button:nth-child(4)').click()
sleep(2)
confirm = driver.switch_to.alert
print('confirm text : ' + confirm.text) #打印confirm的文本
confirm.dismiss() #点击confirm的取消按钮
print('what you have done is : ' + driver.find_element_by_id('action').get_attribute('value'))
sleep(2)
driver.quit()

接着我们来操作:点击第三个按钮‘show prompt',输入文字后点击【确认】按钮。

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.alert import Alert #导入Alert包
from time import sleep
import os

driver = webdriver.Chrome()
driver.implicitly_wait(10)
file = 'file:///' + os.path.abspath('test.html')
driver.get(file)

driver.find_element_by_css_selector('body>button:nth-child(6)').click()
sleep(2)
prompt = Alert(driver) #实例Alert对象,但使用时前面一定要导入Alert包
print('prompt text : ' + prompt.text) #打印promt的文言
prompt.send_keys('test prompt') #发送信息到输入框中
sleep(2)
prompt.accept() #点击【确认】按钮
print('what you have done is : ' + driver.find_element_by_id('action').get_attribute('value')) #打印刚才的操作
sleep(2)
driver.quit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python Django框架实现自定义表单提交
Mar 25 Python
Python 通过URL打开图片实例详解
Jun 01 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Python反射用法实例简析
Dec 22 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
python实现微信自动回复功能
Apr 11 Python
python实现汉诺塔算法
Mar 01 Python
使用python接入微信聊天机器人
Mar 31 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
python实现学员管理系统
Feb 26 #Python
python实现电子产品商店
Feb 26 #Python
Python selenium根据class定位页面元素的方法
Feb 26 #Python
python实现诗歌游戏(类继承)
Feb 26 #Python
Python实现简单查找最长子串功能示例
Feb 26 #Python
基于Python实现用户管理系统
Feb 26 #Python
python selenium firefox使用详解
Feb 26 #Python
You might like
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP Cookie学习笔记
2016/08/23 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
jQuery实现简单日历效果
2020/07/05 jQuery
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python计算最大优先级队列实例
2013/12/18 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
总经理工作职责范文
2014/03/14 职场文书
美术教师岗位职责
2014/03/18 职场文书
公证书样本
2014/04/10 职场文书
学术诚信承诺书
2014/05/26 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL