以后不在此处更新日志了,欢迎测友到新窝找我:http://www.wuchuanhu.cn/

AutoIT自动化之OCR解决验证码识别

上一篇 / 下一篇  2012-02-28 22:10:50 / 个人分类:AutoIT实战

Web项目的自动化测试中,经常需要处理验证码识别的问题。主流上有两种方法,第一种是使用万能验证码或屏蔽验证码,第二种就是人工输入验证码。其实还有一种办法,只是效果并不太好,这种方法就是使用OCR识别。网络上有很多基于OCR识别技术的工具、引擎以及一些web服务,它们对于识别一些简单的验证码是有一定的效果的,但是对于比较复杂的验证码(比如增加了一些模糊功能或者多种语言文字组合)识别效果并不太理想。此处将使用一款开源的OCR引擎(Tesseract)来解决AutoIT自动化测试中验证码识别的问题。

Tesseract原本由惠普开发,在一段时间内因为一些原因没有更新,Google2006年重启了这个项目,目前已经发布到了3.01版本。

首先下载Tesseract并进行安装。安装完成之后,做一个小的实验。将一张验证码图片放置到“C:\”。运行CMD,输入命令:

tesseract.exe c:\1.jpg c:\1 -1

查看“C:\”下是否生成了一个名为“1.txt”的文本,并查看文本中的识别结果。

由此,可以看出图片中的验证码已经被Tesseract识别出来。

使用Tesseract可以从图片中识别出验证码来,那么自动化测试中处理验证码的第一步就是从应用中把验证码图片抠出来。下面的这段代码即实现了这样的处理。

While Not CheckLinkExistByText($OIE,"退出>>")

  ;MsgBox(1,"num",""&$i&"")

  Local $Inputcheck= _IEGetObjByName($OIE,"txtValidateCode")

  Local $oImg = _IEGetObjById($oIE,"vcodeimg")

  $oPic = $oIE.Document.body.createControlRange()

  $oPic.Add($oImg)

  $oPic.execCommand("Copy")

  $bmp = ClipGet()

  FileCopy($bmp,"c:\1.jpg",1)

  $cmd = "tesseract.exe c:\1.jpg c:\1 -1"

  Run(@ComSpec & " /k "&$cmd,"",@SW_HIDE)

  Sleep(2000)

  $file = FileOpen("c:\1.txt", 0)

  $checkCode=FileRead($file,4)

  ;MsgBox(1,"识别为",$checkCode)

  FileClose($file)

  $Inputcheck.value = $checkCode

  Local $Inputname = _IEGetObjByName($OIE,"txtUserName")

  Local $InputPWD = _IEGetObjByName($OIE,"txtPassword")

 

  Local $LoginBtn = _IEGetObjByName($OIE,"btnLogin")

  $Inputname.value=$Tester

  $InputPWD.value=$TesterPWD

  $LoginBtn.click

  _IELoadWait($OIE)

  ProcessClose("cmd.exe")

  $i=$i+1

Wend

 

这段代码的思想就是,当识别出来的验证码输入后登录不成功,就重新获取验证码图片再识别再次尝试,直到识别出正确的验证码。

注意到这段代码:

  $cmd = "tesseract.exe c:\1.jpg c:\1 -1"

  Run(@ComSpec & " /k "&$cmd,"",@SW_HIDE)

即使用CMD命令来执行Tesseract的识别。

Tesseract还具有很强大的训练功能,可以利用训练功能增强Tesseract的识别能力。


TAG: aslandhu autoit Autoit AutoIT autoIT

无花果果糖的个人空间 引用 删除 无花果果糖   /   2014-07-08 18:03:47
5
引用 删除 yangshuxin1989   /   2012-10-09 11:05:06
原帖由TesterChen于2012-05-10 17:31:52发表

路径不对吧,我都成功了
shanhulq的个人空间 引用 删除 shanhulq   /   2012-07-27 14:17:40
5
yolanda_Aoto 引用 删除 yolanda_ji   /   2012-07-02 16:35:05
为啥我提示cannot create output file c:\1.txt
TesterChen-Software Testing 引用 删除 TesterChen   /   2012-05-10 17:31:52
5
jj_ljw的个人空间 引用 删除 jj_ljw   /   2012-05-10 15:09:03
5
椰子的个人空间 引用 删除 zbjie   /   2012-03-21 22:00:38
5
哆啦A梦 引用 删除 cu_zhuang   /   2012-03-19 14:42:13
5
blue40131的个人空间 引用 删除 blue40131   /   2012-03-09 16:41:23
5
dream0577的个人空间 引用 删除 dream0577   /   2012-03-03 21:15:55
5
bluetearxie的个人空间 引用 删除 bluetearxie   /   2012-03-01 17:09:54
5
kakamissyou的测试小栈 引用 删除 kakamissyou   /   2012-03-01 00:13:35
5
云层专版 引用 删除 云层   /   2012-02-29 09:38:33
5
 

评分:0

我来说两句

Open Toolbar