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 相关文章推荐
python中pygame模块用法实例
Oct 09 Python
Python itertools模块详解
May 09 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
python3去掉string中的标点符号方法
Jan 22 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
python中必要的名词解释
Nov 20 Python
python函数中将变量名转换成字符串实例
May 11 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
php 缩略图实现函数代码
2011/06/23 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
js自定义回调函数
2015/12/13 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python中给List添加元素的4种方法分享
2014/11/28 Python
python实现备份目录的方法
2015/08/03 Python
Python分治法定义与应用实例详解
2017/07/28 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
电脑教师的教学自我评价
2013/11/26 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
先进事迹演讲稿
2014/09/01 职场文书
岗位聘任报告
2015/03/02 职场文书
工作年限证明模板
2015/06/15 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python