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

 

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

1 去掉验证码

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

2 设置万能码

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

3 保留一个资源

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

4 光学字符识别

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

4.1 识别对象

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

    在这里插入图片描述

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

4.2 pytesseract安装

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

在这里插入图片描述

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):
# 导入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):
# 导入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先灰度再二值化处理后输出对应的文字:
# 导入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输出完整代码:
# 导入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即可。
  • 此处代码省略后续添加。

END今天的分享就到此结束了!点赞关注不迷路~

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

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

相关文章

【点云surface】 修剪B样条曲线拟合

1 介绍 Fitting trimmed B-splines&#xff08;修剪B样条曲线拟合&#xff09;是一种用于对给定的点云数据进行曲线拟合的算法。该算法使用B样条曲线模型来逼近给定的点云数据&#xff0c;并通过对模型进行修剪来提高拟合的精度和准确性。 B样条曲线是一种常用的曲线表示方法…

【element优化经验】el-dialog修改title样式

目录 前言 解决之路 1.把默认的这个图标隐藏&#xff0c;官方的api有这个属性&#xff1a;showClose值设置false. 2.title插槽定制&#xff1a;左边定制标题&#xff0c;右边定制按钮区域。 3.背景颜色修改&#xff1a;默认title是有padding的需要把它重写调&#xff0c;然…

基于 STM32Cube.AI 的嵌入式人脸识别算法实现

本文介绍了如何使用 STM32Cube.AI 工具开发嵌入式人脸识别算法。首先&#xff0c;我们将简要介绍 STM32Cube.AI 工具和 STM32F系列单片机的特点。接下来&#xff0c;我们将详细讨论如何使用 STM32Cube.AI 工具链和相关库来进行人脸识别算法的开发和优化。最后&#xff0c;我们提…

Netty实现websocket且实现url传参的两种方式(源码分析)

1、先构建基本的netty框架 再下面的代码中我构建了一个最基本的netty实现websocket的框架&#xff0c;其他个性化部分再自行添加。 Slf4j public class TeacherServer {public void teacherStart(int port) throws InterruptedException {NioEventLoopGroup boss new NioEve…

Day40力扣打卡

打卡记录 包子凑数&#xff08;裴蜀定理 DP&#xff09; 根据裴蜀定理&#xff0c;存在 c gcd(a, b) 使不定方程ax by c满足条件&#xff0c;如果gcd(a, b) 1即a与b互素的情况下&#xff0c;就会 ax by 1&#xff0c;由于为1可以构造后面的无穷数字&#xff0c;故得到结…

Centos7 离线安装 CDH7.1.7

1. 安装CDH的准备工作&#xff08;所有节点都要执行&#xff09; 1.1 准备环境 角色 IP k8s-master 192.168.181.129 k8s-node1 192.168.181.130 k8s-node2 192.168.181.131 1.2 安装JDK # https://www.oracle.com/java/technologies/downloads/#java11 wget rpm -ivh…

亚马逊Listing怎么写!亲身经验分享

亚马逊运营的重要环节之一&#xff0c;listing的攥写&#xff0c;可以决定了产品的搜索排名&#xff0c;用户的点击率和转化率&#xff0c;那么如果你的产品排名或者转化不理想的情况&#xff0c;可以考虑对listing进行优化&#xff0c;在关键词过多和语句流程通顺的情况下&…

js获取时间日期

目录 Date 对象 1. 获取当前时间 2. 获取特定日期时间 Date 对象的方法 1. 获取各种日期时间组件 2. 获取星期几 3. 获取时间戳 格式化日期时间 1. 使用 toLocaleString() 方法 2. 使用第三方库 UNIX 时间戳 内部表示 时区 Date 对象 JavaScript中内置的 Date 对象…

数据挖掘之PCA-主成分分析

PCA的用处&#xff1a;找出反应数据中最大变差的投影&#xff08;就是拉的最开&#xff09;。 在减少需要分析的指标同时&#xff0c;尽量减少原指标包含信息的损失&#xff0c;以达到对所收集数据进行全面分析的目的 但是什么时候信息保留的最多呢&#xff1f;具体一点&#…

​飞凌嵌入式FCU2601网关,为工商业储能EMS注入智慧的力量

一、火热的储能行业&#xff0c;寻求新的市场机会 最近一段时间以来&#xff0c;世界储能大会、上海储能展、能源电子产业发展大会等多个储能相关论坛和展览密集登场&#xff0c;即使“内卷”已成为了业内讨论的热词&#xff0c;但寻求新的市场机会仍然是行业共识&#xff0c;…

Qt C++中调用python,并将软件打包发布,python含第三方依赖

工作中遇到qt c调用我的python 代码&#xff0c;并且想要一键打包&#xff0c;这里我根据参考的以及个人实践的结果来简单实现一下。 环境&#xff1a;windows系统&#xff0c;QT Creater 4.5&#xff0c; python 3.8&#xff08;anaconda虚拟环境&#xff09; 1. 简单QT调用…

electron windows robotjs 安装教程

Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘&#xff0c;获取屏幕内容&#xff0c;配合electron可做很多自动化操作。windows下配置环境有很多坑&#xff0c;很多文章都太旧了。试了很多次发现了…

ky10 server x86 auditd安装(日志审计系统)

概述 Auditd工具可以帮助运维人员审计Linux&#xff0c;分析发生在系统中的发生的事情。Linux 内核有用日志记录事件的能力&#xff0c;包括记录系统调用和文件访问。管理员可以检查这些日志&#xff0c;确定是否存在安全漏洞&#xff08;如多次失败的登录尝试&#xff0c;或者…

golang学习笔记——接口和继承比较2

接口和继承 现在有一个需要要求大学生和足球运动员掌握英语技能&#xff0c;请问怎么实现? 给运动员和学生结构体添加studyEnglish方法显示是可以的&#xff0c;但是篮球动员和中学生也学习了英语&#xff0c;显示不行。这时&#xff0c;我们可以直接给足球运动员和大学生添加…

跳转应用市场详情页market

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、跳转到各大厂商应…

播放器开发(四):多线程解复用与解码模块实现

学习课题&#xff1a;逐步构建开发播放器【QT5 FFmpeg6 SDL2】 前言 根据第一章内容&#xff0c;我们首先可以先把解复用和解码模块完成&#xff0c;其中需要使用到多线程以及队列&#xff0c;还需要使用FFmpeg进行解复用和解码动作的实现。 创建BaseQueue基类 BaseQueue.h…

亚马逊两步验证有哪些验证方法?

亚马逊通常提供多种两步验证的方式&#xff0c;包括短信&#xff08;通过手机接收验证码&#xff09;和认证器应用程序&#xff08;如Google Authenticator、Authy等&#xff09;。选择你偏好的方式。 短信验证&#xff1a; 如果选择短信验证&#xff0c;需要将你的手机号码关联…

YOLOv8改进 | 2023 | LSKAttention大核注意力机制助力极限涨点

论文地址&#xff1a;官方论文地址 代码地址&#xff1a;官方代码地址 一、本文介绍 在这篇文章中&#xff0c;我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv8&#xff0c;以实现显著的性能提升。首先&#xff0c;我们介绍LSKAttention机制的基本原理&#xff0c;…

定制手机套餐---python序列

if __name__ __main__:print("定制手机套餐")print("")#定义电话时长&#xff1a;字典callTimeOptions{1:0分钟,2:50分钟,3:100分钟,4:300分钟,5:不限量}keyinput("请输入电话时长的选择编号&#xff1a;")valuecallTimeOptions.get(key)if val…

代码随想录算法训练营第五十四天|392.判断子序列 115.不同的子序列

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 392.判断子序列 class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp [[0] * (len(t)1) for _ in range(len(s)1)]for i in ra…