Python利用Selenium实现弹出框的处理
作者:渴望力量的哈士奇 发布时间:2021-11-12 23:21:50
现如今经常出现在网页上的基于 JavaScript 实现的弹出框有三种,分别是 alert、confirm、prompt
。该章节主要是学习如何利用 selenium 处理这三种弹出框。奥利给,冲!
JavaScript三种弹出对话框的简单介绍
JavaScript的三种对话框是通过调用 "window对象" 的三个方法 "alert()"、"confirm()" 、"prompt()" 来获得,我们可以利用这些对话框来完成 "js" 的输入和输出,实现与用户进行交互的js代码。
下面就来简单的了解一下这三种对话框吧。
alert() - 警告框
alert
是一个警告框,表现为直接弹出一个提示窗,该提示窗只有一个按钮确定按钮,点击 确定 按钮后无返回值;alert
警告框经常被用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。语法:alert("文本")
。
alert
警告框代码示例如下:
<html>
<head>
<title>html页面 - alert</title>
<a id="tooltip" href="#" data-toggle="tooltip" title="This is alert" onclick="alert(this.title);">点击我,弹出 alert</a>
</head>
</html>
confirm() - 确认框
confirm
是确认框,它有两个按钮,确定 与 取消 ,返回 true
或 false
。确认框用于让用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。 语法:confirm("文本")
confirm
确认框代码示例如下:
<html>
<head>
<title>confirm</title>
</head>
<body>
执行 "选择" 后显示的结果
<script language="JavaScript">
if(confirm("准备好了么?")){
alert("Go!");
}
else{
alert("Hold on!");
}
</script>
</body>
</html>
cprompt() - 提示框
prompt
是提示框,它会返回输入框输入的消息,或者其默认值;提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。语法:prompt("文本","默认值")
prompt
提示框代码示例如下:
<html>
<head>
</head>
<body>
<script language='JavaScript' type="text/javascript" >
var aa= prompt("What's your name?","Husky");document.write("Welcome to my world, "+aa+"<br>")
</script>
</body>
</html>
selenium 处理弹出对话框的常用方法
常用方法如下:
text:返回
alert、confirm、prompt
里面的文字信息accept:接受
dismiss:取消
send_keys:向
prompt
里面输入文字
selenium 处理 alert() 弹窗
本地 alert.html
弹窗页面如下:
代码示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver
driver.maximize_window() # Chrome 浏览器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/alert.html') # 打开本地的 "alert.html" 文件
sleep(1)
driver.find_element_by_id('tooltip').click() # 点击页面 id='tooltip' 的元素(会弹出alert)
sleep(1)
alert = driver.switch_to.alert # 选择 alert
print(alert.text) # 打印输出 alert 的内容
alert.accept() # 针对 alert 执行 accept(接受)方法
sleep(2)
driver.quit()
运行结果如下:
selenium 处理 confirm() 弹窗
本地 confirm.html
弹窗页面如下:
代码示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver
driver.maximize_window() # Chrome 浏览器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打开本地的 "alert.html" 文件
sleep(1)
confirm = driver.switch_to.alert # 不管是 alert 还是 confirm、cprompt ,"switch_to" 的方式是一样的。
print(confirm.text) # 打印输出 "confirm" 的内容
sleep(1)
confirm.dismiss() # 针对 confirm 执行 dismiss(取消)方法
sleep(1)
alert = driver.switch_to.alert # 选择 confirm 执行 accept(接受)方法后的 alert
print(alert.text) # 打印输出 alert 的内容
sleep(1)
alert.accept() # 针对 alert 执行 accept(接受)方法
sleep(1)
driver.quit()
运行结果如下:
上文的脚本中,我们通过 switch_to
的方法选择 alert
略显得麻烦一些,能不能直接通过 confirm
把它当成一个来处理呢?尝试一下看看…
代码示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver
driver.maximize_window() # Chrome 浏览器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打开本地的 "alert.html" 文件
sleep(1)
confirm = driver.switch_to.alert # 不管是 alert 还是 confirm、cprompt ,"switch_to" 的方式是一样的。
print(confirm.text) # 打印输出 "confirm" 的内容
sleep(1)
confirm.dismiss() # 针对 confirm 执行 dismiss(取消)方法
sleep(1)
print(confirm.text) # 打印输出 alert 的内容
sleep(1)
confirm.accept() # 针对 confirm 执行 accept(接受)方法
sleep(1)
driver.quit()
运行结果如下:
从这里我们可以发现,不管弹出多少个 alert
,都可以使用同一个 switch_to
的结果一起来做后续的操作,不需要不断的去 switch_to
。因为它是一个系统组件,不管它是什么形态,都可以这样去支持。
selenium 处理 prompt() 弹窗
OK,接下来还剩下左后一个 弹窗组件 - prompt()
,页面如下,有一个输入框,两个按钮,可以选择确定或取消。
代码示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver
driver.maximize_window() # Chrome 浏览器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/prompt.html') # 打开本地的 "alert.html" 文件
sleep(1)
prompt = driver.switch_to.alert
print(prompt.text)
sleep(1)
prompt.send_keys('Husky I love U') # "prompt.html" 文件默认输入框里传入的是 "Husky" ,这里我们传入 "Husky I love U"
prompt.accept()
sleep(1)
driver.quit()
运行结果如下:
从上面的动图中我们可以看到打印输出的内容并没有我们输入的内容,与之前文章的 send_keys
不一样,这是因为它是 JavaScript 原生的东西。既然是原生的组件,我们是看不到它的输入过程的,只能是通过 webdriver 来控制它的底层来改变输入的元素内容。所以虽然输入正确,返回也正确,但是在过程中是看不出来的。
来源:https://blog.csdn.net/weixin_42250835/article/details/125189972
猜你喜欢
- 0. 学习目标栈和队列是在程序设计中常见的数据类型,从数据结构的角度来讲,栈和队列也是线性表,是操作受限的线性表,它们的基本操作是线性表操作
- 很多序列的方法字符串同样适用,但是,字符串是不可变的,所以一些试图改变字符串的方法是不可用的1 字符串格式化1)用元组或者字典格式化字符串f
- 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。基本思想某类产品的构建由很多复杂组件组成;这些组件中的
- UI设计图Echarts示例效果前言对于UI给出的设计图,各个气象网站都有类似的效果,实现方式大可归为两种:网格布局+图表框架绘制温度曲线;
- 今天生产上项目启动访问 一个数据库的时候,出现了ORA-12505, TNS:listener does not currently kno
- 在安装SQL Server 2000 ,安装进程自动地为“BUILTIN\Administrators&rdqu
- 写爬虫是一项复杂、枯噪、反复的工作,考虑的问题包括采集效率、链路异常处理、数据质量(与站点编码规范关系很大)等。整理自己写一个爬虫程序,单台
- 对于简单的网络例如全连接层Linear可以使用以下方法打印linear层:fc = nn.Linear(3, 5)params = list
- python连接clickhouse数据库在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。顾名思义,psutil
- 本文实例讲述了python实现上传样本到virustotal并查询扫描信息的方法。分享给大家供大家参考。具体方法如下:import simp
- Pytorch提取模型特征向量# -*- coding: utf-8 -*-"""dj""
- javascript曾一度被认为是玩具型的语言,因为它太容易上手,而且,javascript曾一度担任为web站点“打杂”的职责。直到Aja
- Python 跟 Python3 完全就是两种语言1、 import caffe FAILED环境为 Ubuntu 16 cuda
- 本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下直接上代码,没有注释!from email.m
- 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是 尝试使用CS
- 目的:让在vuex中管理的状态数据同时存储在本地。可免去自己存储的环节。在开发的过程中,像用户信息(名字,头像,token)需要vuex中存
- 在Python中定义一个数据便在内存中开辟一片空间来存储这个变量的值,这块已经被分配的内存空间便会有一个内存地址。访问这块内存需要用到变量名
- 本文实例讲述了C#操作SQLite数据库方法。分享给大家供大家参考,具体如下:SQLite介绍SQLite is a software li
- 大家都知道Vue.js是中国人创造出来的,简单易用,所以必须要支持一下Vue采用的MVVM设计模式也就是说model和view绑定 mode
- 通常我们写tab选项卡的时候,一般都是用jq等去操作dom,给同级元素移除active类,然后,给被点击元素添加active类,但是在vue