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获取apk文件URL地址实例
Nov 01 Python
python和pyqt实现360的CLable控件
Feb 21 Python
Python字符串切片操作知识详解
Mar 28 Python
python版本五子棋的实现代码
Dec 11 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
详解python中eval函数的作用
Oct 22 Python
Python调用Windows命令打印文件
Feb 07 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
详解Flask前后端分离项目案例
Jul 24 Python
Python requests用法和django后台处理详解
Mar 19 Python
python中数组和列表的简单实例
Mar 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
超级简单的发送邮件程序
2006/10/09 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Python中的引用和拷贝浅析
2014/11/22 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
医药营销个人求职信范文
2014/02/07 职场文书
工作鉴定评语
2014/05/04 职场文书
改革共识倡议书
2014/08/29 职场文书
五好家庭申报材料
2014/12/20 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
特此通知格式
2015/04/27 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
校长新学期寄语2016
2015/12/04 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL