hackiller 发表于 2010-1-30 13:30:49

嵌套网页无缓存图片验证码识别

本帖最后由 hackiller 于 2010-1-31 09:43 编辑

http://www.10010.com/login.jsp页面的
图片链接
http://www.10010.com/getImage.jsp                $ogetiamge = _IEFrameGetObjByName($oIE, 'ifm_WebCheckCode')

                $oImgs = _IEImgGetCollection($ogetiamge)
                For $oImg In $oImgs
                        $i += 1
                        If $oImg.src = "http://www.10010.com/getImage.jsp" Then
                              $oPic = $ogetiamge.Document.body.createControlRange()
                              $oPic.Add($oImg)
                              $oPic.execCommand("Copy")
                              $img = ClipGet()
                        EndIf
                Next
                _GDIPlus_Startup()
                _ClipBoard_Open(0)
                $iVerifyPics = _ClipBoard_GetDataEx($CF_BITMAP)
                $iVerifyPics = _GDIPlus_BitmapCreateFromHBITMAP($iVerifyPics)
                _ClipBoard_Close()
                FileDelete(@TempDir & "\getimage.bmp")
                _GDIPlus_ImageSaveToFile($iVerifyPics, @TempDir & "\getimage.bmp")
                $a_Image = myReadImageToArray(@TempDir & "\getimage.bmp", True, 1, 0x777777);71704
                $a_Image = myArrayDelBox($a_Image, 1, 1, 1, 1);去边框
                $s_code_string = myArrarOCR(@ScriptDir & "\CodeFont.txt", $a_Image, 1, $CodeNum, $CodeWidth, "", $func_left, $func_mid, $func_top, $func_bottom)



                $check = _IEGetObjById($oIE, "MobileCheckCode")
                If IsObj($check) Then $check.value = $s_code_string

sanmoking 发表于 2010-1-30 20:39:17

我接了,30人民币,哈哈。。

sanmoking 发表于 2010-1-30 21:17:58

搞定了
   。。。。

sanmoking 发表于 2010-1-30 21:18:09

本帖最后由 sanmoking 于 2010-1-30 22:21 编辑

20分钟ok哈哈。。准确率100%,等下放个gui。

lpxx 发表于 2010-1-30 21:27:18

30元把你乐的....

hackiller 发表于 2010-1-30 21:44:05

30论坛币我还拿得出来
它这验证码图片是无缓存的

sanmoking 发表于 2010-1-30 21:57:51

什么缓存不缓存,只要他显示给你看,就能搞定哦。。
30元开个玩笑而已,大家何必当真呢,谁都不会在乎钱滴。。
挣着工资喝着茶,网上娱乐一下而已,靠这业余爱好活命,饿死好几回了。。。


真确率100%哦。

hackiller 发表于 2010-1-30 22:01:47

能提供源码吗
                $check = _IEGetObjById($oIE, "MobileCheckCode")
                If IsObj($check) Then $check.value = "识别的结果"
与之合并

hackiller 发表于 2010-1-30 22:03:36

我自己把图片下下来 我能让它识别 只是它并不在IE缓存目录里 COPY不出来

sanmoking 发表于 2010-1-30 22:03:37

源码很简单,一个func返回识别结果,你想把结果放到那都行。。关键就是特征库跟dll。。

hackiller 发表于 2010-1-30 22:05:59

我用inetget验证码会变

sanmoking 发表于 2010-1-30 22:12:51


;下面是放在代码前面的内容
$size = FileGetSize (@ScriptFullPath);算是密码串来区分一下,也有小小的加密作用
Global $jpg = @TempDir&'\tem'&$size&'.jpg';验证码图片存储的位置
Global $cdb = @TempDir & '\'&$size&'.tmpb';dll文件位置
Global $dll = @TempDir & '\'&$size&'.tmpl';特征库位置
FileInstall("Captchio.dll", $dll, 0);解压dll
FileInstall("Captchio.cdb", $cdb, 0);解压特征库
RunWait(@COMSPEC & " /c regsvr32 "& $dll & " /s","",@SW_HIDE);注册dll

下面是识别的函数
Func _Dispatch($jpg,$cdb);自动识别验证码的Func,$jpg=验证码图片,$cdb=特征库
        $obj = ObjCreate("Captchio.cCaptcha")
        $obj.OpenCharDB($cdb)
        $txt = $obj.GetStringFromFile($jpg, 1)
        Return $txt ;返回识别出来的验证码
EndFunc   ;==>_Dispatch

所以你就可以这样用:
If IsObj($check) Then $check.value = _Dispatch($jpg,$cdb)

也可以这样用,比如我给你的那个例子里面
GUICtrlSetData($Input1, _Dispatch($jpg,$cdb))
当然前提是你要把特征库制作出来,把验证码提取出来,不过这就不是本提问的内容了。。
最后
dll跟特征库,你自己去temp文件夹里找吧。。
Global $cdb = @TempDir & '\'&$size&'.tmpb';dll文件位置
Global $dll = @TempDir & '\'&$size&'.tmpl';特征库位置
FileInstall("Captchio.dll", $dll, 0);解压dll
FileInstall("Captchio.cdb", $cdb, 0);解压特征库

改下名字就行了

sanmoking 发表于 2010-1-30 22:13:53

我用inetget验证码会变
hackiller 发表于 2010-1-30 22:05 http://www.autoitx.com/images/common/back.gif


    那就不用inetget

sanmoking 发表于 2010-1-30 22:16:24

给你个传送门,里面获取验证码到gui上用的是读取网页上的第n个图片,复制到temp里面再使用的。。【传送门】

sanmoking 发表于 2010-1-30 22:18:27

楼上的那个记不太清了,不知道原理是不是我说的那样,或者使用这个方法【传送门】

当然这两个传送门只是解决你说的获取验证码的问题,而没有添加识别验证码的代码,识别验证码的代码你参照12楼吧
页: [1] 2 3
查看完整版本: 嵌套网页无缓存图片验证码识别