当前位置: 首页 > news >正文

自动化测试中6种常见验证码的处理方式

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

01 去掉验证码

  • 从自动化的本质上来讲,主要是提升测试效率等,但是为了去研究验证码以及提升验证码的识别效率,是需要投入比较大的时间的;

  • 去掉验证码无疑是最简单的方式,而且对于开发而言这样做,工作量也不是很大;

  • 但是建议在测试环境使用,生产环境禁用,因为存在安全问题。

02 设置万能码

  • 这个是笔者刚开始做自动化时首选的一个处理方法;

  • 因为既测试到了验证码的功能,而且也不用投入太大的精力去研究如何进行验证码识别;

  • 另外对于开发来说,内置一个万能验证码也是非常简单的事情;

  • 对于写自动化脚本的人来说也是非常的方便,效率也高;

  • 但这个万能验证码仅限相关人员知道,避免存在安全隐患。

03 保留一个资源

  • 有点验证码实则就是图片资源;

  • 其实就是在制定的文件夹资源库中随机抽取一张,那么只需要将服务器上的所有图片删除,仅保留一张即可;

  • 说白了就相当于固定验证码。

04 光学字符识别

  • 其实就是通过Python-tesseract模块来只能识别图片中的验证码;

  • Python-tesseract是光学字符识别Tesseract OCR的python封装类;

  • 其能够读取大部分常规图片文件,比如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官网

https://github.com/UB-Mannheim/tesseract/wiki

  • 选择对应的版本下载即可:

  • 按照提示安装完成:

  • 配置环境变量,将其根目录添加到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分量:

  1. # 彩色转灰度

  2. img_01 = image.convert("L")

  3. img_01.show()

以上完整代码为(使用image01.jpg):

  1. # -*- coding:utf-8 -*-

  2. # 作者:虫无涯

  3. # 日期:2023/11/14

  4. # 文件名称:test_tesseract.py

  5. # 作用:OCR验证码识别

  6. # 联系:VX

  7. # 博客:https://blog.csdn.net/NoamaNelson

  8. # 导入Image包

  9. from PIL import Image

  10. # 打开图像

  11. image = Image.open("./image01.jpg")

  12. # 彩色转灰度

  13. img_01 = image.convert("L")

  14. img_01.show()

  • 转灰度后图像如下:

4.6.2 二值化处理

  • 图像分割常用的方法就是二值化处理;

  • 二值化处理就是二值化图像时,将大于某个临界灰度值的像素灰度设置为灰度的极大值,把小于这个值的像素灰度设为灰度的极小值,取值范围一般为0-1;

  • 二值化算法不同,可分固定阈值和自适应阈值,比如这个固定阈值如下(使用image02.jpg):

  1. # -*- coding:utf-8 -*-

  2. # 作者:虫无涯

  3. # 日期:2023/11/14

  4. # 文件名称:test_tesseract.py

  5. # 作用:OCR验证码识别

  6. # 联系:VX

  7. # 博客:https://blog.csdn.net/NoamaNelson

  8. # 导入Image包

  9. from PIL import Image

  10. # 打开图像

  11. image = Image.open("./image02.jpg")

  12. # 二值化处理

  13. img_02 = image.point(lambda x:0 if x<143 else 255)

  14. img_02.show()

二值化后的效果:

  • 我们结合前两种方法,把image03.jpg先灰度再二值化处理后输出对应的文字:

  1. # -*- coding:utf-8 -*-

  2. # 作者:虫无涯

  3. # 日期:2023/11/14

  4. # 文件名称:test_tesseract.py

  5. # 作用:OCR验证码识别

  6. # 联系:VX

  7. # 博客:https://blog.csdn.net/NoamaNelson

  8. # 导入Image包

  9. from PIL import Image

  10. from pytesseract import pytesseract

  11. # 打开图像

  12. image = Image.open("./image03.jpg")

  13. # 灰度处理

  14. img_new = image.convert("L")

  15. # 二值化处理

  16. img_03 = img_new.point(lambda x:0 if x<143 else 255)

  17. img_03.show()

  18. out_img = pytesseract.image_to_string(img_03)

  19. print(out_img)

image03.jpg原图和处理后效果:

  • 结果输出:

4.6.3 图像增强

  • 为了排除更多的干扰,我们可以使用将图片增强显示,或者将图片转成黑白;

  • 我们在以上代码继续添加:

  1. from PIL import ImageEnhance

  2. img_enh = ImageEnhance.Contrast(img_03)

  3. img_enh01 = img_enh.enhance(4)

  4. img_enh01 .show()

  5. out_img = pytesseract.image_to_string(img_enh01)

4.6.4 完整代码

  • 我们使用image04.jpg输出完整代码:

  1. # 导入Image包

  2. from PIL import Image

  3. from pytesseract import pytesseract

  4. from PIL import ImageEnhance

  5. # 打开图像

  6. image = Image.open("./image04.jpg")

  7. # 灰度处理

  8. img_new = image.convert("L")

  9. # 二值化处理

  10. img_04 = img_new.point(lambda x:0 if x<143 else 255)

  11. # 图像增强

  12. img_enh = ImageEnhance.Contrast(img_04)

  13. img_enh01 = img_enh.enhance(4)

  14. # 处理后图片

  15. img_enh01.show()

  16. # 提取图片文字

  17. out_img = pytesseract.image_to_string(img_enh01)

  18. print(out_img)

处理前后的效果:

05 打码平台

  • 另外我们可以通过打码平台来实现图片文字提取,比如超人、图鉴、斐斐等等;

  • 比如图鉴平台,可以参考它的 开发文档

    (http://www.ttshitu.com/docs/index.html?spm=null);

06 记录cookie

  • 通过添加登录成功时所携带的cookie来跳过登录;

  • 在selenium中使用add_cookie()方法将用户名和密码等登录信息写入浏览器的cookie中,再次登录时直接读取浏览器cookie即可。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

http://www.gsyq.cn/news/152892.html

相关文章:

  • 这套DX平台,让新同事10分钟就跑起了祖传代码。
  • 超声波分散机采购攻略 源头厂家 / 制造商 / 供应商全解析、附带联系方式 - 品牌推荐大师1
  • Day50_ 图论1.md
  • 还在用 Figma 画饼?我用这个平台,把原型上线从 3 天压到 3 分钟
  • 2025湖南生物质能源设备企业TOP5权威推荐:深度测评湖南淘发源 - myqiye
  • pytest-rerunfailures:优化测试稳定性的失败重试工具
  • 2025年12月云南一体化污水处理设备/净水设备厂家竞争深度分析 - 2025年品牌推荐榜
  • 2025年12月屋顶/隧道/边墙/混流风机厂家TOP10推荐:多区域实力企业务实之选 - 深度智识库
  • 《投资-398》股票的生命周期的特征与产品的生命周期的竞争是相似的
  • 基于SpringBoot+VUE的美食交流平台的设计与实现毕业设计源码
  • linux服务器磁盘挂载
  • 小红书不投流免费获客:私信组件的核心玩法 - Redbook_CD
  • 2025年无菌车间工程公司排名:比较好的无菌车间建设品牌企业全解析 - 工业品牌热点
  • 获取公网上ollama的地址与端口号
  • selenium 做 Web 自动化,鼠标当然也要自动化!
  • 打包流程
  • 九头蛇 Hydra 工具使用详解:登录爆破神器指南,从新手到精通,看这篇就够!
  • Open-AutoGLM即将闭源?现在不学就真的晚了(限时教程公开)
  • 2025最新屋顶/排烟/离心/轴流风机厂家十大品牌推荐:多家优质企业解决通风方案标杆 - 深度智识库
  • 2025年终调研:影像仪哪家质量好/售后服务好?影像仪哪个品牌好? - 品牌推荐大师1
  • 【网络安全】零日漏洞(0day)到底是什么?零日攻击该如何防范?
  • 2025 GEO优化工具甄选指南:以全域适配与精准效能决胜流量新战场 - 品牌推荐排行榜
  • 2025年调蓄池真空冲洗设备厂家实力推荐:真空冲洗隔膜阀/调蓄池冲洗设备/调蓄池冲洗装置源头厂家精选 - 品牌推荐官
  • 进名企?揭秘内推入职的5大成功关键
  • 内核技术问答:sysctl_sched_wakeup_granularity与sysctl_sched_min_granularity冲突吗?
  • mysql-高性能高可用-3-mha漂移脚本
  • 软件工程学期回顾 - applepie
  • 【专业测评】无人机高光谱/便携式高光谱/机载高光谱相机国内外品牌哪家好? - 品牌推荐大师
  • 全网最全!NUS、人大、复旦、北大联手打造 Agent 记忆综述,深度解析全在这里,建议收藏!
  • std::thread::join() 和 std::future::get()的调用顺序分析