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简单网络编程示例【客户端与服务端】
May 26 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
django和vue实现数据交互的方法
Aug 21 Python
在django模板中实现超链接配置
Aug 21 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
为什么python比较流行
Jun 19 Python
基于Python的EasyGUI学习实践
May 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
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
自立自强的名人事例
2014/02/10 职场文书
大学校务公开实施方案
2014/03/31 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
岗位工作说明书
2014/07/29 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年护理部工作总结
2014/11/14 职场文书
2014年文员工作总结
2014/11/18 职场文书
财务统计员岗位职责
2015/04/14 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技