Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)


Posted in Python onJune 28, 2019

从最简单的Web浏览器的登录界面开始,登录界面如下:

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

进行Web页面自动化测试,对页面上的元素进行定位和操作是核心。而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础。

页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等。webdriver就是利用元素的这些属性来进行定位的。

可以用于定位的常用的元素属性:

id

name

class name

tag name

link text

partial link text

xpath

css selector

对应于webdriver中的定位方法分别是:

driver.find_element_by_name()——最常用,简单

driver.find_element_by_id()——最常用,简单

driver.find_element_by_class_name()

driver.find_element_by_tag_name()——最不靠谱

driver.find_element_by_link_text()——定位文字连接好用

driver.find_element_by_partial_link_text()——定位文字连接好用

driver.find_element_by_xpath()——最灵活,万能

driver.find_element_by_css_selector()

上面是定位一个元素的方法,相应的webdriver也有定位一组元素的方法:

driver.find_elements_by_name() 
driver.find_elements_by_id() 
driver.find_elements_by_class_name() 
driver.find_elements_by_tag_name() 
driver.find_elements_by_link_text() 
driver.find_elements_by_partial_link_text() 
driver.find_elements_by_xpath() 
driver.find_elements_by_css_selector()

由界面可以看出,主要需要三个输入数据,首先我们要掌握F12查看页面元素。

右键文本框查看元素(以用户名文本框为例)

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

在该文本框中输入用户名“XXX”,代码如下:

driver.find_element_by_id("os_username").send_keys("XXX")

密码同理。

验证码操作较为复杂,需要用到PIL+tesseract+image代码库,需提前准备。我的思路是首先采用driver.save_screenshot(“test.png”)截取该完整登录界面并保存,而后选取验证码区域进行截取保存,区域选取采用region = (left.x, left.y, right.x, right.y),其中(left.x,left.y)为左上角像素坐标,(right.x,right.y)为右下角像素坐标,采用nimg = img.crop(region)来截取验证码区域并用nimg.save(“new_test.png”)来保存。最后采用pytesseract.image_to_string(image)方法将图片验证码转换成字符串。具体代码实现详见附后代码。

三个输入完成后,即是登录按钮的点击,F12查看元素如图:

代码如下:

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

driver.find_element_by_class_name("btnSub").click()

此时即可完成登录,注意,该识别验证码的方法只能识别简单验证码,过于复杂的识别会有错误。

注:若登陆名为汉字需要使用

G = u”登录名” 
driver.find_element_by_id(“os_username”).send_keys(G)

详细代码

# -*- coding: utf-8 -*-
 #coding=UTF-8

 from selenium import webdriver
 from PIL import Image
 import pytesseract
 driver = webdriver.Chrome() 
 driver.get('http://XXX') #该处为具体网址
 driver.refresh()   #刷新页面
 driver.maximize_window() #浏览器最大化
 driver.save_screenshot("test.png")

 img = Image.open("test.png")
 region = (940, 355, 1030, 385)#根据具体情况修改
 nimg = img.crop(region)
 nimg.save("new_test.png")

 image = Image.open("new_test.png")
 vcode = pytesseract.image_to_string(image)
 driver.find_element_by_id("os_username").send_keys("XX
X")
 driver.find_element_by_id("password").send_keys("XXX")
 driver.find_element_by_id("RandomCode").send_keys(vc
ode)
 driver.find_element_by_class_name("btnSub").click()

以上这篇Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Python中zip函数如何使用
Jun 04 Python
python让函数不返回结果的方法
Jun 22 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
Python可视化神器pyecharts绘制水球图
Jul 07 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 #Python
Pyqt QImage 与 np array 转换方法
Jun 27 #Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 #Python
对python中GUI,Label和Button的实例详解
Jun 27 #Python
python 整数越界问题详解
Jun 27 #Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 #Python
python 反编译exe文件为py文件的实例代码
Jun 27 #Python
You might like
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
JS实现图片切换效果
2018/11/17 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
Python写的Socks5协议代理服务器
2014/08/06 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
Django实现文件上传下载功能
2019/10/06 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python devel安装失败问题解决方案
2020/06/09 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
高校毕业生登记表自我鉴定
2013/11/03 职场文书
行政管理人员精品工作推荐信
2013/11/04 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
离婚财产分配协议书
2014/10/21 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
学习党章心得体会2016
2016/01/15 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript