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

news2024/11/14 2:10:52

 

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 ImageEnhance

img_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.coloradmin.cn/o/1248984.html

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

相关文章

新手如何买卖可转债,可转债投资基础入门

一、教程描述 什么是可转债&#xff1f;可转债是可转换债券的二次简称&#xff0c;原始全称是可转换公司债券&#xff0c;这是一种可以在特定时间、按特定条件&#xff0c;转换为普通股票的特殊企业债券&#xff0c;可转换债券兼具债权和股权的特征&#xff0c;其英文为conver…

AMESim|Make failed:Unable to create an excutable for the system

最近在AMESIM与MATLAB进行联合仿真的时候遇到如下问题&#xff1a; Make failed:Unable to create an excutable for the system. 看了网上的解决办法如下 配置环境变量重装AMESIM&#xff0c;有顺序要求&#xff0c;首先是VS&#xff0c;然后是AMESIM与MATLAB。在AMESIM安装…

PDF 批量处理软件BatchOutput PDF mac中文版介绍

BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自…

5-11一个球从100米自由落下

#include<stdio.h> int main(){double down100;double back down/2;int n;//次数for(n2;n<10;n){downdownback*2;backback/2; }printf("第10次落地经过%f米\n",down);printf("第10次反弹%f米\n",back);return 0;}

视频直播美颜SDK对比测评,技术深度剖析

美颜滤镜作为直播体验的关键一环&#xff0c;成为直播平台竞争的焦点。在美颜滤镜的背后&#xff0c;不同的视频直播美颜SDK各有千秋&#xff0c;下文&#xff0c;小编将对几个主要的视频直播美颜SDK进行对比测评&#xff0c;并深度剖析其技术特点。 一、美颜SDK简介 首先&a…

做嵌入式(/单片机/ARM)底层开发普遍待遇是怎样的?

做嵌入式&#xff08;/单片机/ARM&#xff09;底层开发普遍待遇是怎样的&#xff1f;北京&#xff0c;成都待遇分别怎样&#xff1f; 嵌入式系统方向的工作就是设计嵌入式设备的集成和配套&#xff0c;包括硬件设备和运行其上的控制软件&#xff0c;硬件设备就包括如单片机、MC…

IIC驱动OLED(SSD1306) HAL库+CubeMX

一.IIC传输数据的格式 1.写操作 2.读操作 3.IIC信号 二. IIC底层驱动 1.重新初始化配置延时单元 //软件延时 void I2C_Delay(uint32_t t) {volatile uint32_t tmp t;while(tmp--); }void I2C_GPIO_ReInit(void) {/* 1. 使用结构体定义硬件GPIO对象 */GPIO_InitTypeDef GPIO…

python+pytest接口自动化-requests发送post请求

简介 在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务…

Linux的基本指令(3)

16.cal指令 cal命令可以用来显示公历&#xff08;阳历&#xff09;日历。公历是现在国际通用的历法&#xff0c;又称格列历&#xff0c;通称阳历。“阳历”又名“太阳历”&#xff0c;系以地球绕行太阳一周为一年&#xff0c;为西方各国所通用&#xff0c;故又名“西历”。 命…

手动创建映像及在OpenStack云计算平台的镜像应用

目录 一、下载 rhel7.6 安装ISO 二、在VMware 的虚拟机内创建虚拟机 三、更改一些设置 1、使用httpd暴露&#xff08;在外部虚拟机&#xff09; 2、添加软件仓库 3、 安装 ACPI 服务 4、使用 cloud-init 获取公钥 5、安装 cloud-utils-growpart 以允许调整分区大小 6、…

H5游戏和小程序游戏的区别是什么,分别有什么优势?

H5游戏和小程序游戏都是基于互联网的游戏形式&#xff0c;但它们在技术实现、发布平台和用户体验等方面存在一些区别。 技术实现&#xff1a; H5游戏&#xff1a; 使用HTML5、CSS3、JavaScript等Web技术进行开发。这意味着玩家可以通过任何支持Web浏览器的设备访问游戏&#…

CAD随机多面体_圆柱试件3D插件

插件介绍 CAD随机多面体_圆柱试件3D插件可用于在AutoCAD软件内生成随机三维多面体及外侧圆柱体试件。插件可确保多面体之间不发生干涉&#xff0c;且多面体与外侧圆柱体试件之间保持适配关系&#xff0c;确保生成的模型导入有限元软件后几何合理有效。本插件主要可应用于三维混…

对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思

一&#xff1a;背景 1. 讲故事 最近接连遇到了几起 2G 虚拟地址紧张 导致的程序崩溃&#xff0c;基本上 90% 都集中在医疗行业&#xff0c;真的很无语&#xff0c;他们用的都是一些上古的 XP&#xff0c;Windows7 x86&#xff0c;我也知道技术人很难也基本无法推动硬件系统和…

XG916Ⅱ轮式装载机后驱动桥设计机械设计CAD

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;装载机 获取完整论文报告工程源文件 本次设计内容为XG916Ⅱ装载机后驱动桥设计&#xff0c;大致上分为主传动的设计&#xff0c;差速器的设计&#xff0c;半轴的设计&#xff0c;最终传动的设计四大部分。其中主传动锥齿轮…

读懂搜狐财报里的“生长密码”

自然界中各种植物的生长&#xff0c;在某些方面都合乎一定的数学规律。比如&#xff0c;斐波那契数列&#xff1a;树木各个年份对应的枝丫数、不同花朵的花瓣数量都对应着“1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5……”的数字。 科学家们认为&#xff0c;斐波…

最近iphone手机的交管12123闪退,打不开的解决办法?

苹果手机系统和新版软件不配&#xff0c;终极决绝办法&#xff1a;升级IOS系统就好 可能是手机的内存不足了&#xff0c;因为在使用APP时&#xff0c;需要占用手机的内存&#xff0c;如果手机内存不足以支持软件允许&#xff0c;软件就会闪退。车主可以清理一下手机的内存&…

高压配电室无人值守

高压配电室无人值守是指高压配电室在没有现场人员持续值守的情况下进行运行和管理。这种模式的实现依赖于先进的智能化技术和自动化系统&#xff0c;以确保配电室的安全、稳定和高效运行。 无人值守智能高压配电室的优势包括&#xff1a; 成本降低&#xff1a;无需常驻人员值守…

堆的实现(C语言版)

文章目录 概述堆的实现初始化销毁插入删除取堆顶元素求堆的长度判断堆是否为空 完整代码 概述 如果有一个关键码的集合K {k0,k1,k2…kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a;Ki <K2*i1 且 Ki<K2…

Fiddler 无法抓包手机 https 报文的解决方案来啦!!

解决手机https无法抓包的问题 当你测试App的时候&#xff0c;想要通过Fiddler/Charles等工具抓包看下https请求的数据情况&#xff0c;发现大部分的App都提示网络异常/无数据等等信息 这时候怎么解决呢&#xff1f; 以软件测试面试提刷题APP为例&#xff1a; Fiddler上的显示…

excel自己记录

1、清除换行符号 2、添加特殊符号&并清除换行符号 7日&15日&30日&60日 3、判断单元格最后一个字符是不是数字&#xff0c;不是就删掉 IF(ISNUMBER(--RIGHT(B2,1)),B2,SUBSTITUTE(B2,RIGHT(B2,1),"")) ISNUMBER(--RIGHT(B2,1))判断最右边的一个数是否…