51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 24615|回复: 31
打印 上一主题 下一主题

[原创] 如何用QTP解决图片验证码(解析QuickTest文本识别机制)?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-10-10 19:24:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家在使用QTP进行自动化测试的过程中经常会遇到图片验证码的问题——大家所关心的就是如何解决此类问题。
这里我们首先要去了解为什么会有图片验证码。其实验证码的本质作用就是防止有人利用工具(灌水机、注册机,当然也不小心包括了我们的自动化测试工具)恶意猜解登陆或者不停的注册和灌水的。因此如果我们完全寄希望于通过GUI识别来获取内容是不切实际的——先打好预防针,免得读者希望太大,失望更大,呵呵!
下面说说验证码的解决思路:
其实解决图片验证码的思路有很多,我这里主要结合QTP9.5的新特性给大家介绍其中一种解决方案,就是利用它的OCR机制抓取文本内容。
在QTP9.5中,对象识别能力有了进一步改善,其中针对文本识别方面进行了优化,引入了ABBYY公司的OCR解决方案——这个相关的功能体现在QTP菜单的“Tools-->Options-->General--Use text recognition mechanisms in this order”里,详细内容后面会有具体介绍。
先来看看ABBYY是何许公司,登录他们的官方网站可以看到一段相关介绍:“ABBYY是世界OCR(光学字符识别)、ICR(手写体识别)和语言软件的领航者。ABBYY 致力于人工智能(AI)和语言软件开发。提供全套文档识别,转换和数据捕获技术的产品解决方案。”如果你使用过图像文档转换的软件,一定会听说过FineReader OCR Professional ,其实它就是ABBYY公司的产品,用官方的说法就是“将通过扫描仪、MFP 或数码相机生成的图像快速转换为可编辑和可搜索的电子格式,而且识别率很高”,说白了就是可以借助它先进的OCR机制“读”出图片里的文本内容,并转换为PDF之类的文档。
有了ABBYY这么强大的背后支持,QTP自然底气十足,那么QTP到底如何以OCR机制识别文本呢?我们首先先了解一下什么是OCR。
打开“百度百科_OCR”,它的说明:“OCR(Optical Character Recognition,光学字符识别),是属于图型识别(Pattern Recognition,PR)的一门学问。其目的就是要让计算机知道它到底看到了什么,尤其是文字资料。 由于OCR是一门与识别率拔河的技术,因此如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。而根据文字资料存在的媒体介质不同,及取得这些资料的方式不同,就衍生出各式各样、各种不同的应用。”这里有个关键词:“正确率”,也就是“识别率”——既然不能够总是100%,我们自然不可能完全寄希望于通过QTP能够每次100%正确的去识别图片里的文本。尤其是“道高一尺魔高一丈”的今天,验证码加入了大量的干扰素,如扭曲、变形、错位、随机背景花纹,给OCR识别增加了很多难度——本来就不希望被软件识别到嘛。

了解了OCR之后,我们再来看看QTP对应的这个设置。如前面所说,通过QTP菜单的“Tools-->Options”选中到“General--Use text recognition mechanisms in this order”,这里的四个选项就是对应的不同设置。我们看看帮助的描述(我做了翻译):
=================================
使用文本识别机制

指定QTP在采用 “文本”或者“文本区域” 的 检查点或输出值 的步骤时,捕获文本内容所使用的文本识别机制。
以下有三种识别方式:
1、先使用Windows API,再使用OCR(默认)。
    指示QTP首先尝试以基于Windows API的机制从对象上直接获取文本内容。如果未获取到文本(比如,文本属于图片的一部分),QTP就会使用OCR的机制尝试获取这段文本。
    强烈建议在使用中日韩(象形文字)、英的语言环境下采用这个设置。

2、先使用OCR,再使用Windows API。
    指示QTP首先尝试使用OCR机制从对象上去获取文本。如果未获取到文本,QTP就会以Windows API的机制去获取文本内容。

3、仅使用Windows API方式。
    指示QTP仅采用基于Windows API的机制从对象上获取文本内容。

4、仅使用OCR的方式。
    指示QTP仅采用基于OCR的机制从对象上获取文本内容。
    在使用Windows Vista要使用这种方式。

=================================
上面的内容已经解释的很明确了,接下来我们通过TextArea Output Value看看效果。

如下图所示,QTP针对几张图片的识别效果:
(一)、内容是51Testing的,QTP获取正确;内容是51Testing的G风格彩字,QTP获取错误(显示为IC_CHECK_PATTERN)



(二)、内容是songfun的普通文本,QTP获取正确;内容是songfun的G风格彩字,QTP获取错误(也显示为IC_CHECK_PATTERN)




有兴趣大家可以自己做一些图片,甚至可以用QQ的验证码图片来试验一下,看看OCR效果。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

32#
发表于 2015-10-26 15:46:25 | 只看该作者
可以用QTP解决QQ加好友时的验证码吗?
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2015-8-15 14:40:09 | 只看该作者
为什么我的文本识别中按次顺序使用文本识别机制下拉列表是灰显的呀?默认为“仅使用OCR",我录制过程中插入文本检查点将1识别为Q,在录制之后插入文本检查点可以正确识别,是为什么呢?能告诉我吗?
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2011-7-12 11:02:16 | 只看该作者
  好贴! 又学习了,我获取的验证码值也是为 null! 怎么处理好呢?
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2011-5-19 11:34:29 | 只看该作者
为什么我Text Area Output 获取到的值都是null呢?
Details
Output the text into output DataTable output value.
Captured text is: (null)
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2009-4-15 16:21:23 | 只看该作者
果然能识别
不过目前如此简单的验证码太少了。。。
不过还是可以运用于别的地方
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2009-3-30 22:25:37 | 只看该作者
可以用来试一下
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2009-3-30 17:07:52 | 只看该作者
强贴,学习了,谢谢~! :)
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2017-10-15 14:52
  • 签到天数: 770 天

    连续签到: 1 天

    [LV.10]测试总司令

    25#
    发表于 2009-2-4 13:51:39 | 只看该作者

    楼主好人

    文章非常实用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2008-11-9 19:30:56 | 只看该作者
    用过了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2008-10-31 17:25:17 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2008-10-31 15:39:57 | 只看该作者

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2008-10-20 17:28:27 | 只看该作者

    回复 20# 的帖子

    那再请问一下,9.0的怎么识别验证码?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
     楼主| 发表于 2008-10-20 12:06:45 | 只看该作者
    9.0没有这个支持,只有9.5才有,呵呵
    原帖由 angelia_liu 于 2008-10-20 11:21 发表
    是不是这个方法对9.0不管用呀
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2008-10-20 11:21:13 | 只看该作者
    是不是这个方法对9.0不管用呀
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2008-10-20 11:01:07 | 只看该作者
    强悍啊~看来9.5还是很值得一用的~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2008-10-19 23:13:36 | 只看该作者
    已经写了第二篇文章,做了具体的操作讲解。链接:http://bbs.51testing.com/thread-129864-1-1.html


    原帖由 tiger_86 于 2008-10-17 14:41 发表
    建议 楼主 能给一个 具体的操作 看着可能要好一点的 哈哈
    谢谢 现在需要这样的技术 哈哈
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2008-10-17 16:09:18 | 只看该作者
    越来越强了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-25 10:16
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2008-10-17 14:41:37 | 只看该作者
    建议 楼主 能给一个 具体的操作 看着可能要好一点的 哈哈
    谢谢 现在需要这样的技术 哈哈
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2008-10-17 11:36:56 | 只看该作者
    我的Test output Value为什么是灰色的。并且
    Window("Windows 图片和传真查看器").WinObject("ShImgVw:CZoomWnd")
    没有output属性呀。
    新手。请教一下。谢谢了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-9 02:52 , Processed in 0.087103 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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