自动化测试中几种常见验证码的处理方式及如何实现?

自动化测试中几种常见验证码的处理方式及如何实现?

  • 1 去掉验证码
  • 2 设置万能码
  • 3 保留一个资源
  • 4 光学字符识别
    • 4.1 识别对象
    • 4.2 pytesseract安装
    • 4.3 Pillow安装
    • 4.4 OCR安装
    • 4.5 识别原理
    • 4.6 处理过程
      • 4.6.1 转灰度处理
      • 4.6.2 二值化处理
      • 4.6.3 图像增强
      • 4.6.4 完整代码
  • 5 打码平台
  • 6 记录cookie

UI自动化测试时,需要对验证码进行识别处理,有很多方式,每种方式都有自己的特点,以下是一些常用处理方法,仅供参考。

1 去掉验证码

  • 从自动化的本质上来讲,主要是提升测试效率等,但是为了去研究验证码以及提升验证码的识别效率,是需要投入比较大的时间的;
  • 去掉验证码无疑是最简单的方式,而且对于开发而言这样做,工作量也不是很大;
  • 但是建议在测试环境使用,生产环境禁用,因为存在安全问题。

2 设置万能码

  • 这个是笔者刚开始做自动化时首选的一个处理方法;
  • 因为既测试到了验证码的功能,而且也不用投入太大的精力去研究如何进行验证码识别;
  • 另外对于开发来说,内置一个万能验证码也是非常简单的事情;
  • 对于写自动化脚本的人来说也是非常的方便,效率也高;
  • 但这个万能验证码仅限相关人员知道,避免存在安全隐患。

3 保留一个资源

  • 有点验证码实则就是图片资源;
  • 其实就是在制定的文件夹资源库中随机抽取一张,那么只需要将服务器上的所有图片删除,仅保留一张即可;
  • 说白了就相当于固定验证码。

4 光学字符识别

  • 其实就是通过Python-tesseract模块来只能识别图片中的验证码;
  • Python-tesseract是光学字符识别Tesseract OCRpython封装类;
  • 其能够读取大部分常规图片文件,比如JPG、GIF、PNG、TIFF等;
  • 这个笔者也尝试过,因为现在的图片验证码越来越复杂,其实有时候识别率并不高;
  • 下边我们尝试着使用一下。

4.1 识别对象

  • 我们收集了几个图片验证码(来源于网络,仅供参考):从左到右依次是image01.jpg-image04.jpg:
    在这里插入图片描述

4.2 pytesseract安装

  • 直接使用命令安装即可:
pip install pytesseract

在这里插入图片描述

4.3 Pillow安装

  • 直接使用命令:
pip install Pillow

在这里插入图片描述

4.4 OCR安装

  • 直接在下载即可:OCR官网;
  • 选择对应的版本下载即可:
    在这里插入图片描述
  • 按照提示安装完成:
    在这里插入图片描述
  • 配置环境变量,将其根目录添加到path环境变量中:
    在这里插入图片描述

4.5 识别原理

  • 基本思路是通过图片降噪、图片切割等,输出图像文本;
  • 图片降噪就是将图片中一些不需要的信息去除,比如背景、干扰像素、干扰线等。
  • 如果验证码是彩色的背景,其实就是把每个像素放在五维空间,即X、Y、R、G、B
  • X、Y是像素的二维平面坐标,RGB代表像素所对应的颜色。

4.6 处理过程

4.6.1 转灰度处理

  • 导入需要的包:
from PIL import Image
  • 打开需要分析的图像:
image = Image.open("./image01.jpg")
  • 将彩色图像转化为灰度图像(RGB转为HSI色彩空间),采用L分量:
# 彩色转灰度
img_01 = image.convert("L")
img_01.show()
  • 以上完整代码为(使用image01.jpg):
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson# 导入Image包
from PIL import Image# 打开图像
image = Image.open("./image01.jpg")
# 彩色转灰度
img_01 = image.convert("L")
img_01.show()
  • 转灰度后图像如下:
    在这里插入图片描述

4.6.2 二值化处理

  • 图像分割常用的方法就是二值化处理;
  • 二值化处理就是二值化图像时,将大于某个临界灰度值的像素灰度设置为灰度的极大值,把小于这个值的像素灰度设为灰度的极小值,取值范围一般为0-1
  • 二值化算法不同,可分固定阈值和自适应阈值,比如这个固定阈值如下(使用image02.jpg):
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson# 导入Image包
from PIL import Image# 打开图像
image = Image.open("./image02.jpg")
# 二值化处理
img_02 = image.point(lambda x:0 if x<143 else 255)
img_02.show()
  • 二值化后的效果:

在这里插入图片描述

  • 我们结合前两种方法,把image03.jpg先灰度再二值化处理后输出对应的文字:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson# 导入Image包
from PIL import Image
from pytesseract import pytesseract# 打开图像
image = Image.open("./image03.jpg")# 灰度处理
img_new = image.convert("L")
# 二值化处理
img_03 = img_new.point(lambda x:0 if x<143 else 255)
img_03.show()
out_img = pytesseract.image_to_string(img_03)
print(out_img)
  • image03.jpg原图和处理后效果:

在这里插入图片描述

  • 结果输出:
    在这里插入图片描述

4.6.3 图像增强

  • 为了排除更多的干扰,我们可以使用将图片增强显示,或者将图片转成黑白;
  • 我们在以上代码继续添加:
from PIL import ImageEnhanceimg_enh = ImageEnhance.Contrast(img_03)
img_enh01 = img_enh.enhance(4)
img_enh01 .show()out_img = pytesseract.image_to_string(img_enh01)

在这里插入图片描述

4.6.4 完整代码

  • 我们使用image04.jpg输出完整代码:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson# 导入Image包
from PIL import Image
from pytesseract import pytesseract
from PIL import ImageEnhance# 打开图像
image = Image.open("./image04.jpg")# 灰度处理
img_new = image.convert("L")# 二值化处理
img_04 = img_new.point(lambda x:0 if x<143 else 255)# 图像增强
img_enh = ImageEnhance.Contrast(img_04)
img_enh01 = img_enh.enhance(4)# 处理后图片
img_enh01.show()# 提取图片文字
out_img = pytesseract.image_to_string(img_enh01)
print(out_img)
  • 处理前后的效果:
    在这里插入图片描述

5 打码平台

  • 另外我们可以通过打码平台来实现图片文字提取,比如超人、图鉴、斐斐等等;
  • 比如图鉴平台,可以参考它的开发文档;
    在这里插入图片描述

6 记录cookie

  • 通过添加登录成功时所携带的cookie来跳过登录;
  • selenium中使用add_cookie()方法将用户名和密码等登录信息写入浏览器的cookie中,再次登录时直接读取浏览器cookie即可。
  • 此处代码省略后续添加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/180368.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@Builder注解

Builder //用来生成对象&#xff0c;并可以为对象链式赋值 Builder注解的属性介绍 1、to Builder 设置为true可以对这个对象进行拷贝生成新的对象&#xff0c;可以再修改&#xff0c;默认为fasle Builder(toBuildertrue) Getter public class UserInfo {} userInfo …

Mysql MMM

MMM概述 MMM(Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09; 是一套支持双主故障切换和双主日常管理的脚本程序。 MMM 使用 Perl 语言开发&#xff0c;主要用来监控和管理MySQL Master-Master&#xff08;双主&#xff09;复制&…

PyTorch技术和深度学习——四、神经网络训练与优化

文章目录 1.神经网络迭代概念1&#xff09;训练误差与泛化误差2&#xff09;训练集、验证集和测试集划分3&#xff09;偏差与方差 2.正则化方法1&#xff09;提前终止2&#xff09;L2正则化3&#xff09;Dropout 3.优化算法1&#xff09;梯度下降2&#xff09;Momentum算法3)RM…

STM32 LL库 TIM3定时器多通道捕获输入采集

为什么不用HAL库&#xff0c;使用HAL库捕获输入一个通道还尚可&#xff0c;多通道捕获由于HAL的回调函数不符合我的要求&#xff0c;干脆直接切换到LL库。网上找了许多&#xff0c;代码处理写的不符合我的要求&#xff0c;这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…

<MySQL> 查询数据进阶操作 -- 联合查询

目录 一、什么是笛卡尔积&#xff1f; 二、什么是联合查询&#xff1f; 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…

计算机毕业设计选题推荐-二手交易跳蚤市场微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

机器人导航+OPENCV透视变换示例代码

透视变换又称四点变换&#xff0c;所以不能用于5边形这样的图形变换&#xff0c;不是真正的透视变换&#xff0c;但是这个方法可以把机器人看到的图像转换为俯视图&#xff0c;这样就可以建立地图&#xff0c;要不然怎么建立地图呢。 void CrelaxMyFriendDlg::OnBnClickedOk()…

力扣刷题篇之数与位2

系列文章目录 目录 系列文章目录 前言 数值计算 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 数值计算 415. 字符串相加 - 力扣&#xff08;…

WordPress 媒体库文件夹管理插件 FileBird v5.5.4和谐版下载

FileBird是一款WordPress 按照文件夹管理方式的插件。 拖放界面 拖放功能现已成为现代软件和网站的标配。本机拖动事件&#xff08;包括仅在刀片中将文件移动到文件夹以及将文件夹移动到文件夹&#xff09;极大地减少了完成任务所需的点击次数。 一流设计的文件夹树展示 我们…

物联网主机E6000:动环监控的新革命

多协议、多接口的全能主机 在物联网时代&#xff0c;数据的采集和处理已经成为了企业运营的重要环节。而物联网主机E6000&#xff0c;就是这个时代的全能选手。它支持多种协议和接口&#xff0c;无论是视频、设备还是DCS系统的数据&#xff0c;都能轻松接入并进行采集处理。这种…

如何克服微服务测试的挑战并最大化收益?

多年来&#xff0c;微服务一直是行业趋势&#xff0c;但组织却未能从该方法中获益&#xff0c;并因发布失败而苦苦挣扎。这些失败通常归结为测试服务之间的接口以获得预期的质量、安全性和性能的困难。 最终&#xff0c;未能以足够稳健的方式测试这些 API。一线希望是遗留 SOA…

51单片机应用从零开始(三)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序-CSDN博客 目录 1. 用单片机控制第一个灯亮 2. 认识单片…