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每次处理固定个数的字符的方法总结
Jan 29 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
对python中执行DOS命令的3种方法总结
May 12 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
python em算法的实现
Oct 03 Python
Python析构函数__del__定义原理解析
Nov 20 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
python函数指定默认值的实例讲解
Mar 29 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 多行多列显示
2009/08/15 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php操作redis缓存方法分享
2015/06/03 PHP
php微信开发之关注事件
2018/06/14 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
python开发之list操作实例分析
2016/02/22 Python
Python做简单的字符串匹配详解
2017/03/21 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
PyQt5响应回车事件的方法
2019/06/25 Python
keras topN显示,自编写代码案例
2020/07/03 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
有多年工作经验的自我评价
2014/03/02 职场文书
开学典礼策划方案
2014/05/28 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书