1、操作浏览器自带弹窗

(1)说明:

webdriver中处理JavaScript所生成的alert、confirm 以及prompt 弹窗是很简单的。具体思路是使用switch_to.alert()方法定位到alert/confirm/prompt弹窗。然后使用text/accept/dismiss/send_keys 方法按需进行操做。

(2)常用操作:

操作 说明
text 返回alert/confirm/prompt中的文字信息。
accept() 点击弹窗中的确认按钮。(接收警告)
dismiss() 点击弹窗中的取消按钮,如果有的话。(弹窗中的)
send_keys() 输入文本到警告框,alert/confirm没有对话框就不能用了,不然会报错。

(3)示例:

页面代码片段:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<style type="text/css">
button {
padding: 8px;
background: #f8f8f8;
border-radius: 5px
}
</style>
</head>
<body>
<button type="button_alert" value="alert" id="alert" onclick="al()">button_alert</button>
<br>
<button type="button_confirm" value="confirm" id="confirm" onclick="con()">button_confirm</button>
<br>
<button type="button_prompt" value="prompt" id="prompt" onclick="pro()">button_prompt</button>
<br> <script>
function al() {
alert('你是一个懂得爱自己的人!')
} function con() {
confirm('你是一个懂得爱自己的人?')
} function pro() {
prompt('请对自己说一句话!')
}
</script>
</body>
</html>

脚本代码:

"""
1.学习目标:
掌握浏览器自带弹窗的处理方法
2.语法(操作步骤):
2.1 操作触发弹窗的元素
2.2 获取弹窗(进入弹窗)
alert = driver.switch_to.alert
2.3 操作弹窗
alert.text 获取弹窗文本
alert.accept() 点击弹窗确定按钮
alert.dismiss() 点击弹窗取消按钮
alert.send_keys("输入内容") 在弹窗中输入文字
3.需求
在页面中,操作浏览器自带弹窗
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os # 2.打开浏览器
driver = webdriver.Firefox() # 3.打开页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2) # 4.处理浏览器自带弹窗
# 4.1 触发弹窗的元素button_alert,完成text和accept()方法
# 4.1.1 定位alert按钮,触发弹窗
el = driver.find_element_by_id("alert")
el.click()
sleep(2) # 4.1.2 获取弹窗(进入弹窗)
alert = driver.switch_to.alert # 4.1.3 获取弹窗文本值
print("弹窗文本值:", alert.text) # 4.1.4 点击弹窗确定按钮
alert.accept()
sleep(2) # 4.2 触发弹窗的元素button_confirm,完成dismiss()方法
# 4.2.1 定位confirm按钮,触发弹窗
el = driver.find_element_by_id("confirm")
el.click()
sleep(2) # 4.2.2 获取弹窗(进入弹窗)
confirm = driver.switch_to.alert # 4.2.3 获取弹窗文本值
print("弹窗文本值:", confirm.text) # 4.2.4 点击弹窗取消按钮
confirm.dismiss()
sleep(2) # 4.3 触发弹窗的元素button_prompt,完成send_keys("输入内容")方法
# 4.3.1 定位prompt按钮,触发弹窗
el = driver.find_element_by_id("prompt")
el.click()
sleep(2) # 4.3.2 获取弹窗(进入弹窗)
prompt = driver.switch_to.alert # 4.3.3 获取弹窗文本值
print("弹窗文本值:", prompt.text) # 4.3.4 点击弹窗确定按钮
prompt.send_keys("怎么显示不了")
sleep(2) # 4.3.5 点击弹窗确定按钮
prompt.accept()
sleep(2) # 5.关闭浏览器
driver.quit()

注意:prompt弹窗输入框,Chrome不显示输入文本。

Python版本 3.7.7

  • Edge版本:18.18362,没有问题。
  • Firefox版本:76.0.1 (64 位),没有问题。
  • Chrome版本:74.0.3729.131(正式版本)32位,有问题。

2、操作浏览器页面自定义弹窗

由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS方法来进行处理。

(1)需求:

需求:去掉淘宝首页的自定义弹窗

淘宝首页的自定义弹窗如下:

提示:网页中弹出的对话框,也属于页面自定义弹窗,都可以用下面方式处理。

(2)实现方式:

大家能看到,上图中的这种弹窗就是自定义弹窗的表现形式,处理这种弹窗可以利用HTML、DOM、Style对象中的一个display属性来处理,可以设置元素如何被显示。

详细解释可以参考:http://www.w3school.com.cn/jsref/prop_style_display.asp。

将display的值设置成none:此元素不会被显示,就可以去除这个弹窗了。

注意:手动页面刷新之后还会出现弹窗。

步骤如下:

# JavaScript语法
js = 'document.getElementById("div_company_mini").style.display="none";' # 使用Python执行JS语句
driver.execute_script(js1)

提示:

document.getElementById()是JS获取元素的方式,在JS获取元素方式中,就只有ById()获取的是一个元素。

其他获取元素的方式,都获取的是结果集,需要获取具体元素的时候,注意要使用索引。

简单举例:

  1. 通过ID获取(getElementById)
  2. 通过name属性(getElementsByName)
  3. 通过标签名(getElementsByTagName)
  4. 通过类名(getElementsByClassName)

(3)示例:

"""
1.学习目标:
了解关闭web页面自定义弹窗
2.语法(操作步骤)
2.1 找到自定义弹窗的元素,
修改样式:tyle.display='none'
display='none'表示不显示样式,目的是将弹窗隐藏
2.2 操作步骤
js = document.getElementById("id属性值").style.display="none"
或者其他的JS获取元素方式
driver.execute_script(js)
3.需求
隐藏页面自定义弹窗
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep # 2.打开浏览器
driver = webdriver.Chrome() # 3.打开页面
url = "https://www.taobao.com/"
driver.get(url)
sleep(5) # 4.关闭自定义弹窗
js = 'document.querySelector("body > div.tbh-fixedtool.J_Module > div").style.display="none"'
driver.execute_script(js)
sleep(2) # 5.关闭浏览器
driver.quit()

『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条

    目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...

  2. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  3. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...

  4. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  5. 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作

    目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...

  6. 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍

    目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...

  7. 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作

    目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...

  8. 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)

    目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...

  9. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

随机推荐

  1. SystemVerilog 编写FSM

    SystemVerilog 编写FSM 题目 SystemVerilog实现 仿真 SystemVerilog 编写FSM 好书: https://github.com/yllinux/blogPic ...

  2. shell初学之nginx(负载均衡)

    创建三个以域名区分的网站a.com,b.com,c.com:访问a.b时,分别显示a.b两个网站的内容:访问c时,会出现依次显示两次a网站的内容,一次b网站的内容. 1 #!/bin/bash 2 s ...

  3. mysql基础之帮助信息

    在mysql中获取帮助 1.当连接到mysql数据库以后,使用help命令或者\?表示获取帮助信息: MariaDB [ren]> help General information about ...

  4. C++ short/int/long/long long 等数据类型大小

    表 1 整型数据类型 数据类型 字节大小 数值范围 short int (短整型) 2 字节 -32 768 〜+32 767 unsigned short int(无符号短整型) 2 字节 0 〜+ ...

  5. python 交换变量值为何不需要中间变量

    python 元组解包unpacking,同一语句中多重赋值 cpython 认为几种变量的交换是比较常见的,提供了专门的优化指令,像[-5,256]预先放到了整数池中一样,

  6. MyBatisPlus详细总结记录

    本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com 小 Hub 领读: 一篇写得非常详细的文章,增删改查,各种插件,让你测底熟悉 mybatis plus. 作者:yo ...

  7. opencv——PCA(主要成分分析)数学原理推导

    引言: 最近一直在学习主成分分析(PCA),所以想把最近学的一点知识整理一下,如果有不对的还请大家帮忙指正,共同学习. 首先我们知道当数据维度太大时,我们通常需要进行降维处理,降维处理的方式有很多种, ...

  8. https 真的安全吗,可以抓包吗,如何防止抓包吗

    Android_interview github 地址 大家好,我是程序员徐公,加上实习,有五年中大厂经验.自荐一下,可以关注我的微信公众号程序员徐公 公众号程序员徐公回复黑马,获取 Android ...

  9. TensorRT 基于Yolov3的开发

    TensorRT 基于Yolov3的开发 Models Desc tensorRT for Yolov3 https://github.com/lewes6369/TensorRT-Yolov3 Te ...

  10. 剑指 Offer 04. 二维数组中的查找

    链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 标签:数组.双指针.二分 题目 在一个 n * m ...