嵌套网页无缓存图片验证码识别
本帖最后由 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 我接了,30人民币,哈哈。。 搞定了
。。。。 本帖最后由 sanmoking 于 2010-1-30 22:21 编辑
20分钟ok哈哈。。准确率100%,等下放个gui。 30元把你乐的.... 30论坛币我还拿得出来
它这验证码图片是无缓存的 什么缓存不缓存,只要他显示给你看,就能搞定哦。。
30元开个玩笑而已,大家何必当真呢,谁都不会在乎钱滴。。
挣着工资喝着茶,网上娱乐一下而已,靠这业余爱好活命,饿死好几回了。。。
真确率100%哦。
能提供源码吗
$check = _IEGetObjById($oIE, "MobileCheckCode")
If IsObj($check) Then $check.value = "识别的结果"
与之合并 我自己把图片下下来 我能让它识别 只是它并不在IE缓存目录里 COPY不出来 源码很简单,一个func返回识别结果,你想把结果放到那都行。。关键就是特征库跟dll。。 我用inetget验证码会变
;下面是放在代码前面的内容
$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);解压特征库
改下名字就行了 我用inetget验证码会变
hackiller 发表于 2010-1-30 22:05 http://www.autoitx.com/images/common/back.gif
那就不用inetget 给你个传送门,里面获取验证码到gui上用的是读取网页上的第n个图片,复制到temp里面再使用的。。【传送门】 楼上的那个记不太清了,不知道原理是不是我说的那样,或者使用这个方法【传送门】
当然这两个传送门只是解决你说的获取验证码的问题,而没有添加识别验证码的代码,识别验证码的代码你参照12楼吧