sanmoking
发表于 2010-1-30 22:23:41
顺便把那个测试程序的gui的小代码放上
。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
$size = FileGetSize (@ScriptFullPath)
Global $url = "http://www.10010.com/getImage.jsp"
Global $jpg = @TempDir&'\tem'&$size&'.jpg'
Global $cdb = @TempDir & '\'&$size&'.tmpb'
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
download()
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("验证码识别", 162, 65, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Pic1 = GUICtrlCreatePic($jpg, 55, 10, 40, 20, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUICtrlSetOnEvent($Pic1, "Button1Click")
GUICtrlCreateLabel("图像:", 10, 12, 40, 17)
$Button1 = GUICtrlCreateButton("下一个", 100, 10, 56, 46, $WS_GROUP)
GUICtrlSetOnEvent($Button1, "Button1Click")
GUICtrlCreateLabel("识别:", 10, 37, 40, 17)
$Input1 = GUICtrlCreateInput("", 55, 35, 41, 21)
shibie()
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
download()
GUICtrlSetImage ($Pic1,$jpg)
shibie()
EndFunc
Func Form1Close()
GUISetState(@SW_SHOW,$Form1)
RunWait(@COMSPEC & " /c regsvr32 "& $dll & " /u /s","",@SW_HIDE)
Exit
EndFunc
Func download()
InetGet ($url,$jpg, 1, 0)
EndFunc
Func shibie()
GUICtrlSetData($Input1, _Dispatch($jpg,$cdb))
EndFunc
Func _Dispatch($jpg,$cdb);自动识别验证码的Func
$obj = ObjCreate("Captchio.cCaptcha")
$obj.OpenCharDB($cdb)
$txt = $obj.GetStringFromFile($jpg, 1)
Return $txt ;返回识别出来的验证码
EndFunc ;==>_Dispatch
sanmoking
发表于 2010-1-30 22:29:34
找了一下以前写的代码,比如这个获取页面第1张图片保存下来。。
貌似需要加上这个:
#include <ClipBoard.au3>
#include <IE.au3>
还有什么自己看。。睡觉去了。。。
$oImg = _IEImgGetCollection ($oIE,0);0=第一张图片
$oPic = $oIE.Document.body.createControlRange()
$oPic.Add($oImg)
$oPic.execCommand("Copy");复制到剪贴板
$ImageFilePath = ClipGet();获取路径,在临时文件里面
FileCopy($ImageFilePath,@TempDir&"\pppp.jpg",9);复制到temp文件夹
urwk
发表于 2010-1-31 09:11:06
楼上的那个记不太清了,不知道原理是不是我说的那样,或者使用这个方法【】
当然这两个传送门只是解决你 ...
sanmoking 发表于 2010-1-30 22:18 http://www.autoitx.com/images/common/back.gif
呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
hackiller
发表于 2010-1-31 09:18:11
本帖最后由 hackiller 于 2010-1-31 09:38 编辑
最后使用了GDI的方法搞定的 这网页是嵌套的 而且该图片不缓存
相关代码:
$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
gapkiller
发表于 2010-1-31 10:46:38
好高深啊...
zcx880517
发表于 2010-1-31 13:06:14
有些高深。。看不太懂。。学习了
bob
发表于 2010-1-31 17:40:06
参考我以前写的这篇
http://www.autoitx.com/forum.php?mod=viewthread&tid=9502&highlight=ys168
316428696
发表于 2010-1-31 19:28:04
好帖,顶了...
xyxcpxxy
发表于 2010-2-2 09:49:48
厉害啊 。 都没看懂~
rolaka
发表于 2010-2-5 10:07:25
源码很简单,一个func返回识别结果,你想把结果放到那都行。。关键就是特征库跟dll。。
sanmoking 发表于 2010-1-30 22:03 http://www.autoitx.com/images/common/back.gif
.....................2.0.0.81的Captchio啊...我没有成功过 筒子有qq么?联系下,,,
sanmoking
发表于 2010-2-5 10:18:09
"筒子"很难听啊,什么意思?
life80
发表于 2010-4-8 06:53:18
bob就是牛叉
风行者
发表于 2010-6-10 17:51:10
来看一看学习一下
xinxiu
发表于 2010-12-14 09:02:32
sanmoking 老大很强大。。。看了很鼓舞。。。哈哈。。
51ak
发表于 2010-12-26 00:34:57
调用DLL识别的又一个例子,好好学习下。