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中的rfind()方法使用详解
May 19 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Python异常模块traceback用法实例分析
Oct 22 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
Python读取文件夹下的所有文件实例代码
Apr 02 Python
这样写python注释让代码更加的优雅
Jun 02 Python
Python天气语音播报小助手
Sep 25 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 selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
js常用代码段整理
2011/11/30 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
实例讲解python中的协程
2018/10/08 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
会计试用期自我评价
2015/03/10 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
Python基于百度API识别并提取图片中文字
2021/06/27 Python