心念旧安,夙夜忧叹。

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

上一篇 / 下一篇  2008-10-10 19:24:18 / 个人分类:原创文章

查看( 16582 ) / 评论( 29 )
本文出自songfun的51Testing软件测试博客,转载请保留出处及链接:http://www.51testing.com/?songfun51Testing软件测试网l] },vr.Ao'L
51Testing软件测试网$O\Y/g,s)])vC K4q
大家在使用QTP进行自动化测试的过程中经常会遇到图片验证码的问题——大家所关心的就是如何解决此类问题。
t:d9jezcE*ZI0这里我们首先要去了解为什么会有图片验证码。其实验证码的本质作用就是防止有人利用工具(灌水机、注册机,当然也不小心包括了我们的自动化测试工具)恶意猜解登陆或者不停的注册和灌水的。因此如果我们完全寄希望于通过GUI识别来获取内容是不切实际的——先打好预防针,免得读者希望太大,失望更大,呵呵!51Testing软件测试网!H2R0T c j e:? aVI
下面说说验证码的解决思路:
XS@8y8G9Z a0其实解决图片验证码的思路有很多,我这里主要结合QTP9.5的新特性给大家介绍其中一种解决方案,就是利用它的OCR机制抓取文本内容。
$O F4B+\2p3mMH0在QTP9.5中,对象识别能力有了进一步改善,其中针对文本识别方面进行了优化,引入了ABBYY公司的OCR解决方案——这个相关的功能体现在QTP菜单的“Tools-->Options-->General--Use text recognition mechanisms in this order”里,详细内容后面会有具体介绍。51Testing软件测试网Z9v pl7^-tg
先来看看ABBYY是何许公司,登录他们的官方网站可以看到一段相关介绍:“ABBYY是世界OCR(光学字符识别)、ICR(手写体识别)和语言软件的领航者。ABBYY 致力于人工智能(AI)和语言软件开发。提供全套文档识别,转换和数据捕获技术的产品解决方案。”如果你使用过图像文档转换的软件,一定会听说过FineReader OCR Professional ,其实它就是ABBYY公司的产品,用官方的说法就是“将通过扫描仪、MFP 或数码相机生成的图像快速转换为可编辑和可搜索的电子格式,而且识别率很高”,说白了就是可以借助它先进的OCR机制“读”出图片里的文本内容,并转换为PDF之类的文档。
ur ]Yn0有了ABBYY这么强大的背后支持,QTP自然底气十足,那么QTP到底如何以OCR机制识别文本呢?我们首先先了解一下什么是OCR。51Testing软件测试网/}7r o$HS
打开“百度百科_OCR”,它的说明:“OCR(Optical Character Recognition,光学字符识别),是属于图型识别(Pattern Recognition,PR)的一门学问。其目的就是要让计算机知道它到底看到了什么,尤其是文字资料。 由于OCR是一门与识别率拔河的技术,因此如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。而根据文字资料存在的媒体介质不同,及取得这些资料的方式不同,就衍生出各式各样、各种不同的应用。”这里有个关键词:“正确率”,也就是“识别率”——既然不能够总是100%,我们自然不可能完全寄希望于通过QTP能够每次100%正确的去识别图片里的文本。尤其是“道高一尺魔高一丈”的今天,验证码加入了大量的干扰素,如扭曲、变形、错位、随机背景花纹,给OCR识别增加了很多难度——本来就不希望被软件识别到嘛。51Testing软件测试网$o{0]'{wM]f+uR

4N4|#g%a2D%wg0本文出自songfun的51Testing软件测试博客,转载请保留出处及链接:http://www.51testing.com/?songfun
N"Qy-jGRYE051Testing软件测试网WN#`n'M1m51Testing软件测试网0{3qg4MR-|D
了解了OCR之后,我们再来看看QTP对应的这个设置。如前面所说,通过QTP菜单的“Tools-->Options”选中到“General--Use text recognition mechanisms in this order”,这里的四个选项就是对应的不同设置。我们看看帮助的描述(我做了翻译):51Testing软件测试网Mj*C8|7u Q#y n
=================================
g"G ^6UF$?0使用文本识别机制
D p8wKja v;j C051Testing软件测试网9^^ X?7b$lK
指定QTP在采用 “文本”或者“文本区域” 的 检查点或输出值 的步骤时,捕获文本内容所使用的文本识别机制。
HGlqa jq0以下有三种识别方式:
V F NY+oa}~01、先使用Windows API,再使用OCR(默认)。51Testing软件测试网U Pu"[2D0n^
    指示QTP首先尝试以基于Windows API的机制从对象上直接获取文本内容。如果未获取到文本(比如,文本属于图片的一部分),QTP就会使用OCR的机制尝试获取这段文本。51Testing软件测试网Dnd_$u1A$`
    强烈建议在使用中日韩(象形文字)、英的语言环境下采用这个设置。
kr"`.c1P+io.~d051Testing软件测试网3v%nsv^&_
2、先使用OCR,再使用Windows API。51Testing软件测试网 G2eo W1J l
    指示QTP首先尝试使用OCR机制从对象上去获取文本。如果未获取到文本,QTP就会以Windows API的机制去获取文本内容。
?G2C `$p9w_ {tZ!W B051Testing软件测试网4Oj T!b+C"@
3、仅使用Windows API方式。
1SVy#\X;R\-fE bg0    指示QTP仅采用基于Windows API的机制从对象上获取文本内容。
"B4^:}j@E051Testing软件测试网u a]nI)Ie"G({
4、仅使用OCR的方式。
2S2k8s`VlR0    指示QTP仅采用基于OCR的机制从对象上获取文本内容。51Testing软件测试网)z R'uU$a[ m
    在使用Windows Vista要使用这种方式。51Testing软件测试网&eXO{FFayO

U:z7w@$[ fi?f0=================================
W G![[[8U'g0本文出自songfun的51Testing软件测试博客,转载请保留出处及链接:http://www.51testing.com/?songfun51Testing软件测试网(m/{ A*IHse&e:G1O
51Testing软件测试网WN#`n'M1m51Testing软件测试网t2Gxg| [*K
上面的内容已经解释的很明确了,接下来我们通过TextArea Output Value看看效果。51Testing软件测试网g"u%R2wG^

1tt:rh3g0Nx b \0如下图所示,QTP针对几张图片的识别效果:
3Xf.pZu+jB|9@0(一)、内容是51Testing的,QTP获取正确;内容是51Testing的G风格彩字,QTP获取错误(显示为IC_CHECK_PATTERN)51Testing软件测试网 tBD} G#r;Y3S4C
51Testing软件测试网'tC:}e[l8] q

B'\o SE;t\,K%y051Testing软件测试网:af0XCx~:nTf
(二)、内容是songfun的普通文本,QTP获取正确;内容是songfun的G风格彩字,QTP获取错误(也显示为IC_CHECK_PATTERN)
g5@4L"J~I9b| g0
}zL:| ?7D]0
-T4^BLmi |051Testing软件测试网&|j%p.@k,K#p/`)G"n`+o

;~1^[Z,B$X+p.Fe"]"k7t0有兴趣大家可以自己做一些图片,甚至可以用QQ的验证码图片来试验一下,看看OCR效果。51Testing软件测试网;PB{{jfY2aa8\
51Testing软件测试网,P0S T w2a wD
本文出自songfun的51Testing软件测试博客,转载请保留出处及链接:http://www.51testing.com/?songfun
*@r(ms z?%lP051Testing软件测试网WN#`n'M1m
'?U5n[~/G%F!k4w&D z0

TAG: 原创文章

假装不在 假装不在 发布于2008-10-10 20:17:57
好贴!
dionysus的个人空间 dionysus 发布于2008-10-13 14:25:18
厉害!又学习了!
heqingbluesky发布于2008-10-13 14:55:13
怎么跟我现在的项目这么靠近,^_^。
berylz发布于2008-10-14 14:53:00
我尝试捕获web页面上的验证码,但是创建text area output->选择IE里面的图形验证码区域后,报错“The object you selected does not support this operation”。
#E ~,lSER
i51Testing软件测试网
软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具5];\`~3nHgW
但是捕获图话板里面的图形,则没有问题。
I)y        F8U&^,yE7QA软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具
        nD0DY.u+ljPwww.51testing.com难道捕获IE页面里的图形,有什么特殊的地方吗?
faro213108发布于2008-10-14 16:28:31
我也遇到同5楼同样的问题,继续关注
password发布于2008-10-14 18:20:00
能说的具体点吗?还是不会操作
berylz发布于2008-10-14 18:28:03
我改用用maxthon进行获取,识别成功。因为maxthon被当作一个应用程序,而不是浏览器。+uO!Du6cji E2eM

,xW cC#hA u.x51Testing软件测试网IE的问题在哪里呢?
大师兄--绝迹江湖 songfun 发布于2008-10-14 22:04:40
如果你测试的是Web系统,并且使用IE浏览器,那么可以尝试使用Text Output Value而不是 Text Area Output Value,因为QTP中,web不支持文本区域输出值。具体的你可以看看帮助。 eMe$Djz8E

&_D(|l0l,V#x
{wvzp:d;O]!O8j(R51Testing软件测试网

QUOTE:

原帖由 berylz 于 2008-10-14 14:53 发表
8Q,BL
O
{
b$z Z1mSwww.51testing.com
我尝试捕获web页面上的验证码,但是创建text area output->选择IE里面的图形验证码区域后,报错“The object you selected does not support this operation”。
e3f2bo'U~:w#j?,X;`中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务
pm
u'H!`lT_U中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务
但是捕获图话板里面的图形,则没有问题。
@FF`P!c\&C软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具
;L+z0VG3J6o] _V难道 ...

大师兄--绝迹江湖 songfun 发布于2008-10-14 22:05:50
你希望怎么具体?说来听听51Testing软件测试网.r&v$@'[d^$D2U

\Ks1As+y软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具

QUOTE:

原帖由 password 于 2008-10-14 18:20 发表
:fz hH%Q1IZ中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务能说的具体点吗?还是不会操作

trademark发布于2008-10-15 09:17:50
是啊,把代码共享一下啊。
GT        {k8QZ中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务我写了后发现提示为空,感觉没有识别出来
berylz发布于2008-10-15 10:54:58

QUOTE:

原帖由 songfun 于 2008-10-14 22:04 发表 51Testing软件测试网0Y4s4t5QF
如果你测试的是Web系统,并且使用IE浏览器,那么可以尝试使用Text Output Value而不是 Text Area Output Value,因为QTP中,web不支持文本区域输出值。具体的你可以看看帮助。
lco%t?M!j7_?51Testing软件测试网
U        f0^j/Lnwww.51testing.com中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务y!})H Qc;V5\o\#S
xL9i-e]!^        G软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具www.51testing.comYR8gnD;O$~rO
我尝试用Text Output Value,但是提示“Cannot retrieve text for this object”。软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具h^QJ_er
翻遍了user guide,其中只是提及
9Q6h&m't] {+Z$~Y51Testing软件测试网“When checking text, QuickTest tries to retrieve the text directly from the
8nF(VrZQ|8Bobject. If QuickTest cannot retrieve the text in this manner (for example,www.51testing.com%Z7j4N@0? x6w5Tu2hY
because the text is part of a picture), it tries to retrieve the text using an OCR
2\*v'k9V!`
CVwww.51testing.com
(optical character recognition) mechanism.”
V]4L.vEc6U软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具但是没有详细描述,如何能使用OCR获取web的图形文字。中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务 _}?s        qPKNDC
7uM:cO.t @
能否告知哪个帮助文档中有详细描述?www.51testing.com(m(@?2|&gH


Eg_q%YA中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务
[ 本帖最后由 berylz 于 2008-10-17 15:15 编辑 ]
password发布于2008-10-16 16:22:48
在验证码的位置只有insert output value,这里面没有对验证码的操作
ly200361发布于2008-10-17 11:36:56
我的Test output Value为什么是灰色的。并且51Testing软件测试网
moBu"F/]I _9_s)\

Window("Windows 图片和传真查看器").WinObject("ShImgVw:CZoomWnd")r
UE6^O1NhNt

没有output属性呀。
*k+R1k(SS+}|*}软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具新手。请教一下。谢谢了
天地无极 tiger_86 发布于2008-10-17 14:41:37
建议 楼主 能给一个 具体的操作 看着可能要好一点的 哈哈T4b:Bsk)X
谢谢 现在需要这样的技术 哈哈
爱之深则恨之切 centurystone 发布于2008-10-17 16:09:18
越来越强了
大师兄--绝迹江湖 songfun 发布于2008-10-19 23:13:36
已经写了第二篇文章,做了具体的操作讲解。链接:http://bbs.51testing.com/thread-129864-1-1.html
o`v$U6w        J|0B2rM中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具#AVgu'B/\*` O
www.51testing.com7L3Jj#rgk6GO

QUOTE:

原帖由 tiger_86 于 2008-10-17 14:41 发表
3rNu|bM,t软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具建议 楼主 能给一个 具体的操作 看着可能要好一点的 哈哈www.51testing.comFp$bxlGG
谢谢 现在需要这样的技术 哈哈

Kevin藏宝库 hsjzfling 发布于2008-10-20 11:01:07
强悍啊~看来9.5还是很值得一用的~~
angelia_liu的个人空间 angelia_liu 发布于2008-10-20 11:21:13
是不是这个方法对9.0不管用呀
大师兄--绝迹江湖 songfun 发布于2008-10-20 12:06:45
9.0没有这个支持,只有9.5才有,呵呵
:qz C#\ wN中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务

QUOTE:

原帖由 angelia_liu 于 2008-10-20 11:21 发表 软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具'd@9[m*?L7u
是不是这个方法对9.0不管用呀

angelia_liu的个人空间 angelia_liu 发布于2008-10-20 17:28:27
回复 20# 的帖子
那再请问一下,9.0的怎么识别验证码?
我来说两句

(可选)

日历

« 2024-05-15  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 454112
  • 日志数: 138
  • 图片数: 4
  • 建立时间: 2006-11-26
  • 更新时间: 2013-08-30

RSS订阅

Open Toolbar