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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python数据结构之图的实现方法
Jul 08 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python生成器以及应用实例解析
Feb 08 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
python切片及sys.argv[]用法详解
May 25 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
python多任务之协程的使用详解
Aug 26 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 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
php流量统计功能的实现代码
2012/09/29 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
关于php循环跳出的问题
2013/07/01 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
做网页的一些技巧
2007/02/01 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
python xml解析实例详解
2016/11/14 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python中map()函数的使用方法示例
2017/09/29 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python绘制规则网络图形实例
2019/12/09 Python
python属于解释语言吗
2020/06/11 Python
django有哪些好处和优点
2020/09/01 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
delegate与普通函数的区别
2014/01/22 面试题
医学专业毕业生推荐信
2013/11/14 职场文书
期终自我鉴定
2014/02/17 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
养成教育经验材料
2014/05/26 职场文书
爱护公共设施的标语
2014/06/24 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
部门2014年度工作总结
2014/11/12 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Redis的字符串是如何实现的
2021/10/24 Redis