UI自动化学习笔记- Selenium一些特殊操作的处理
一、特殊操作处理
1. 下拉选择框操作
1.1 如何操作下拉选择框
实现方式一
思路:先定位到要操作的option元素,然后执行点击操作
driver.find_element_by_css_selector("[value='xxx']").click()
1.2 Select类
说明:Select类是Selenium为操作select标签特殊封装的
实例化对象:
select = Select(element)
element: <select>标签对应的元素,通过元素定位方式获取
例如:driver.find_element_by_id("selectA")
方法:
1. select_by_index(index) --> 根据option索引来定位,从0开始
2. select_by_value(value) -->根据option属性 value值来定位
3. select_by_visible_text(text) -->根据option显示文本来定位
操作:
1. 导包:from selenium.webdriver.support.select import Select
2. 实例化:s = Select(element)
3. 调用方法:s.select_by_index()
注意:
- 实例化select时,需要的参数为select标签元素
- 调用Select类小面的方法,是通过索引、value属性值、显示文本去控制,不需要click事件
2.弹出框
网页中常用的弹出框:
- alert 警告框
- confirm 确认框
- prompt 提示框
2.1 弹出框处理方法
说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样
获取弹出框对象
alert = driver.switch_to.alert
调用
alert..text --> 返回alert/confirm/prompt中的文字信息
alert.accept() --> 接收对话框选项(同意)
alert.dismiss() --> 取消对话框选项(取消)
3.滚动条
滚动条:一种可控制页面显示范围的组件
3.1 实现方式
说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScrip脚本的方法,所以我们可以通过JavaScrip脚本来达到操作滚动条的目的
1. 设置JavaScrip脚本控制滚动条
js = "window.scrollTo(0,1000)"
(0:左边距;1000:上边距;单位像素) 2. selenium调用执行JavaScrip脚本的方法
driver.execute_script(js)
4. frame切换
frame:HTML页面中的一种框架,主要作用是在页面中指定区域显示另一页面元素
4.1 frame切换方法
说明:在selenium中封装了如何切换frame框架的方法
方法:
1. driver.seitch_to.frame(frame_reference) -->切换到指定frame的方法
frame_reference: 可以为frame框架的name、id或者定位到的frame元素
2. driver.switch_to.default_content() --> 恢复默认页面方法
5. 多窗口切换
说明:在HTML页面中,当点击超链接或者按钮时,有的会在新的窗口打开页面
5.1 实现方法
说明:在Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;
句柄:英文handle, 窗口的唯一识别码
方法:
1. driver.current_window_handle --> 获取当前窗口句柄
2. driver.window_handles --> 获取所有窗口句柄
3.driver.switch_to.window(handle) --> 切换指定句柄窗口
6.窗口截图
说明:把当前操作的页面,截图保存到指定位置
6.1 截图方法
说明:在Selenium中,提供了截图的方法,我们只需要调用即可
方法:
driver.get_screenshot_as_file(imgpath)
imgpath:图片保存路径
当前目录:./test.png
上一级目录:../test.png
7.验证码
说明:一种随机生成的信息(数字、字母、汉字、图片)等为了防止恶意的请求行为,增加应用的安全性
7.1 验证码的处理方式
说明:Selenium中并没有对验证码处理的方法,这里介绍针对验证码的几种常用处理方式
方式:
- 去掉验证码(测试环境下-采用)
- 设置万能验证码(生产环境和测试环境下-采用)
- 验证码识别技术(通过 python-tesseract来识别图片类型验证码:识别率很难达到100%)
- 记录cookie(通过记录cookie进行跳过登录)
提示:
- 去掉验证码、设置万能验证码:都是开发来完成
- 验证码识别技术:成功率不高,验证码种类繁多,不太合适
7.2 Selenium操作cookie
方法:
1. get_cookie(name) --> 获取指定cookie
name:为cookie的名称
2. get_cookies --> 获取本网站所有本地cookies
3. add_cookie(cookie_dict) --> 添加cookie
cookie_dict:一个字典对象,必选的键包括:"name" and "value"
7.2.1案例
需求:使用cookie实现跳过登录
- 手动登录百度,获取cookie
- 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作
分析:
BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到账号的控制权,通行贴吧、知道、百科、文库、空间、百度云等百度主要产品
- 登录baidu,登录成功后抓取(BDUSS)
- 使用add_cookie()方法,添加(BDUSS)键和值
- 使用刷新方法 driver.refresh
示例代码
from selenium import webdriver
from time import sleep driver = webdriver.Chrome()
# 打开URL
url = 'https://www.baidu.com/'
driver.get(url)
# 将浏览器 最大化
driver.maximize_window()
# 设置cookie
driver.add_cookie({"name": "BDUSS", "value": "根据实际情况填写"})
# 暂停2秒
sleep(2)
# 刷新
driver.refresh()
# 退出浏览器驱动
driver.quit()
注意:必须要刷新才能看到效果
最新文章
- java json数据的处理
- target-densitydpi
- qq快速聊天
- 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
- TextView——setCompoundDrawables说明
- JavaScript 跨域方法总结
- java nio(一)buffer
- 团队作业八——第二次团队冲刺(Beta版本)第5天
- Prometheus : 入门
- 前端基于react,后端基于.net core2.0的开发之路(1) 介绍
- Echarts 中国地图(包括china.js文件)
- SQL Server Management Studio 执行超大脚本文件
- JS 实现版本号比较功能
- Ubuntu16.04之Solr7.7.1环境搭建
- iDigital2019数字营销广告主峰会
- 在ASP.NET MVC中实现本地化和全球化
- Keil C 中全局变量 extern 的使用
- 层层递进Struts1(三)之Struts组成
- ZT 用gdb调试core dump文件
- 「要买车网」免费获取汽车电商要买车网购车优惠券 - 持续更新(2016-03-12)www.fortunelab.cn