51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1060|回复: 1
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-12-18 11:15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    UI自动化测试时,需要对验证码进行识别处理,有很多方式,每种方式都有自己的特点,以下是一些常用处理方法,仅供参考。
    1、去掉验证码

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

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

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

      2、设置万能码


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

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

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

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

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


    03保留一个资源

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

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

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


    04光学字符识别

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

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

      其能够读取大部分常规图片文件,比如JPG、GIF、PNG、TIFF等;

      这个笔者也尝试过,因为现在的图片验证码越来越复杂,其实有时候识别率并不高;

      下边我们尝试着使用一下。




    4.1 识别对象

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


    4.2 pytesseract安装



      直接使用命令安装即可:
      1. <font size="3">pip install pytesseract</font>
      复制代码



    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 转灰度处理


        导入需要的包:

        1. <font size="3">from PIL import Image</font>
        复制代码





      打开需要分析的图像:

      1. <font size="3">image = Image.open("./image01.jpg")</font>
      复制代码


        将彩色图像转化为灰度图像(RGB转为HSI色彩空间),采用L分量:

        1. <font size="3"># 彩色转灰度
        2. img_01 = image.convert("L")
        3. img_01.show()</font>
        复制代码
        以上完整代码为(使用image01.jpg):
        1. <font size="3"># -*- 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()</font>
        复制代码



          转灰度后图像如下:



      • 4.6.2 二值化处理



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

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

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

          1. <font size="3"># -*- 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()</font>
          复制代码


            二值化后的效果:


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

            1. <font size="3"># -*- 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)</font>
            复制代码



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


              结果输出:



            4.6.3 图像增强




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

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

              1. <font size="3">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)</font>
              复制代码


            4.6.4 完整代码




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

              1. <font size="3">
              2. # -*- coding:utf-8 -*-
              3. # 作者:虫无涯
              4. # 日期:2023/11/14
              5. # 文件名称:test_tesseract.py
              6. # 作用:OCR验证码识别
              7. # 联系:VX
              8. # 博客:https://blog.csdn.net/NoamaNelson

              9. # 导入Image包
              10. from PIL import Image
              11. from pytesseract import pytesseract
              12. from PIL import ImageEnhance

              13. # 打开图像
              14. image = Image.open("./image04.jpg")

              15. # 灰度处理
              16. img_new = image.convert("L")

              17. # 二值化处理
              18. img_04 = img_new.point(lambda x:0 if x<143 else 255)

              19. # 图像增强
              20. img_enh = ImageEnhance.Contrast(img_04)
              21. img_enh01 = img_enh.enhance(4)

              22. # 处理后图片
              23. img_enh01.show()

              24. # 提取图片文字
              25. out_img = pytesseract.image_to_string(img_enh01)
              26. print(out_img)</font>
              复制代码


                处理前后的效果:


                05打码平台


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


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


                  06记录cookie


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

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



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 15:23 , Processed in 0.069354 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表