按键精灵+大漠插件简单数字验证码识别实践笔记

文章详细介绍了如何使用按键精灵和大漠插件来自动化处理资源分配系统中的数字验证码识别问题,包括插件的注册、字库生成及验证码识别流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    因为资源短缺,公司用了一个很老的系统分配资源,每个项目每天都要经历上演一次像抢火车票一样的经历,而往往又空手而归,搞得大家疲惫不堪。而其中的关键在于几个简单的数字验证码的识别,于是在业余时间看了一些验证码识别的帖子,知道了按键精灵和大漠插件这两个已经存在很久的软件/插件。以下是首次接触之后的一些粗浅的认识。

 

    按键精灵的官网介绍:按键精灵是一个模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替双手,自动执行一系列鼠标键盘动作。按键精灵简单易用,不需要任何编程知识就可以作出功能强大的脚本。只要在电脑前用双手可以完成的动作,按键精灵都可以替代完成。

    大漠插件百度百科介绍:大漠综合插件(dm.dll)采用vc6.0编写,是一款集【前后台, 文字识别,图色,键鼠,窗口,内存,DX,Call】等功能于一身的综合插件。主要用于 按键精灵、简单游、 易语言等辅助制作工具,具有识别速度超级快的特点! 采用COM接口编写,适用于所有语言调用。 这里我们只关心大漠插件的文字识别功能,按键精灵官网有大漠插件的论坛,可以去那里了解更详尽的内容。大漠插件是一个收费插件,对于简单的文字识别,免费版本就已经够用。

 

    在此之前,我对插件没有一个明确的认识,后来才知道插件这个名字起得很准确,比如,鼠标和键盘,插在主机上,你就可以用光标移动和打字的功能,那么鼠标和键盘就是主机的插件,大漠插件就像一个带有文字识别功能的U盘,插在按键精灵这个软件上之后,按键精灵就可以使用大漠插件的文字识别功能了。专业点讲,大漠插件只是一个DLL动态调用库,注册完成之后我们就可以调用里面的函数接口了。

    按键精灵软件加上一个大漠插件,便可以完成一套定时自动“抢火车票”的流程脚本了。

 

一,大漠插件怎么注册到按键精灵里去呢?

    1,首先安装按键精灵,点击新建脚本;

    2,在左侧“附件”中,将下载的大漠插件中的dm.dll和RegDll.dll添加进去;

    3,返回脚本编辑界面,源文件页,输入以下代码:

//释放“附件”中自己添加的文件到c:\dm目录中,释放Regdll.dll到plugin目录中
PutAttachment "c:\dm", "*.*"
PutAttachment ".\plugin", "Regdll.dll"

//调用regdll.dll,注册大漠插件
Call Plugin.Regdll.reg("c:\dm\dm.dll")

//创建一个大漠对象
Set dm = createobject("dm.dmsoft")

//检查是否创建成功
ver = dm.ver()
If len(ver) = 0 Then
 MessageBox "插件注册失败,检查系统是否禁用了vbs脚本权限"
 EndScript
'Else
' MessageBox "插件注册成功,当前使用的版本是:"&ver
End If

     这样大漠插件dm.dll成功注册了,根据注释可以看到每一步代码的详解。

 

二,怎么实现数字验证码识别?

    我们首先简单了解一下验证码识别的原理:电脑屏幕是由一个一个的像素点排列组成,我们看到屏幕显示的数字验证码也是像素点阵,我们把验证码切割为单独的数字,空白像素点取0,把有内容的像素点取1(二值化),那么一个数字就是一串0 1序列,如果我们拿同样字号和字体的已知数字的0 1序列和屏幕上的比较,完全相同或者最相近的那个,我们就认为匹配了已知的数字,数字验证码识别也就完成了。

    假定我们需要识别的数字验证码为宋体 10号的数字组成,想要完成识别,我们就需要宋体 10号0-9这10个数字的0 1序列,也就是字库。

    那么怎么生成字库呢?

    在大漠插件的压缩包里,打开“大漠综合工具”,新建一个文本文档,设置字体为宋体,字号为10号,输入”0123456789”,点击“打开或新建字库”,建立一个新的字库”宋体 10 数字.txt”文件,点击大漠综合工具中的“抓图”,截取刚才输入的一行数字,Enter确定,此时在综合工具中会显示出截取的文本和二值化后的文本,点击“提取点阵(多个)”,确定行列间距,此时会在右侧显示出数字序列,选中第一个”0”,在“定义文字”输入框中输入”0”,回车,数字0的字库信息就保存在宋体 10 数字.txt中了,依次选择序列,输入1-9,数字0-9的字库文件就生成了。(其他文字字库可用同样的方法生成)

 

    接下来就是验证码识别的流程了:

    首先回到按键精灵,将刚才生成的字库添加到附件中去,进入脚本源文件,在刚才注册dm代码下面添加:

//设置字库,这里我们只需要宋体 10 号数字字库

Call dm.SetPath(dm.GetBasePath())'设置全局路径 dm.GetBasePath() 返回dm.dll所在路径

Call dm.SetDict(0, "宋体 10 数字.txt")'一号字库,最多支持10个  0~9 编号,具体看大漠插件说明书。

Dim YanZhengMa

'YanZhengMa = GetStr(0, 0, 0, Plugin.Sys.GetScRX, Plugin.Sys.GetScRY, "000000-000000")

TracePrint "获取到的信息:" & YanZhengMa

 //将识别到的字符输入编辑框

SayString YanZhengMa

dm.KeyPress 13 //Enter

EndScript

//脚本结束

Function GetStr(dic, a, b, c, d, col)'范围获取所有字库可识别字符,返回信息看大漠说明

    dm.UseDict dic'选择字库

    Dim temp_txt, temp_number, temp

    temp_txt = dm.GetWords(a, b, c, d, col, 1.0)'x|y|str

    If temp_txt = "" Then

        GetStr = temp_txt

        Exit Function

    End If

    temp_number = dm.GetWordResultCount(temp_txt)

    For i = 0 To temp_number - 1

        'dm_ret = dm.GetWordResultPos(temp_txt, i, intX, intY)'获得该数字确切坐标

        If i = 0 Then

            GetStr = dm.GetWordResultStr(temp_txt, i)

        Else

            GetStr = GetStr & "|" & dm.GetWordResultStr(temp_txt, i)

        End If

    Next

    If GetStr <> vbNullString Then

        dm.GetWordResultPos temp_txt, 0, intX, intY'获取第一段字符坐标

    Else

        intX = - 1  : intY = - 1

    End If

End Function

 

Sub OnScriptExit()

       Call Plugin.RegDll.UnReg("c:\dm\dm.dll")

       //解除大漠注册到系统

End Sub

 

    其中,GetStr()为你在屏幕上要找文字的颜色RGB编码,可以通过按键精灵的抓图工具获取,这里我们获取的是黑色。

 

    这里识别的验证码,属于最简单的数字验证码,现在网络上常用的变形字、交叉字等不规则验证码,不是这么容易就可以识别出来的,要做到专业的验证码识别,还需要进行更深入的研究。

 

 

相关函数说明:http://www.uudama.com/process.html 源码页面:http://dll.uuwise.com/index.php?n=ApiDoc.Anjian 按键精灵插件: 新插件[2013.7.13]下载地址:http://com.uuwise.com/index.php?n=ApiDoc.DLLdownLoad <---推荐使用 经过不段改进程序源代码,最终实现了原生COM组件放到按键精灵目录下面就可以使用了,函数调用方法参考COM版函数说明,示例语句在下面 注:不需要regsvr32注册 旧插件: [2013.7.2]---按键精灵插件完全版--基于动态连接库版 [2013.7.2]---按键精灵插件精减版,仅【登录,上传图片,取结果,报错】四个函数--基于动态连接库版 调用示例语句: softID = 2116 //软件ID 软件和KEY在开发者后台获取 softKEY = "2000adff4e5c4c448f45944c643b2b10" //软件key userName = "优优用户帐户" //用户的用户名,非开发者帐号 passWord = "优优用户密码" //密码 zhuce = Plugin.UU.SetSoftInfo(softID, softKEY) //初始化软件(必须) login = Plugin.UU.Login(userName, passWord) //登录优优,仅需要调用一次(必须) If login > 0 Then getUserScore=Plugin.UU.getScore(userName,passWord) //查询用户当前积分(可选) MessageBox "登录成功,您的用户ID为:" & login & ",您的剩余题分为:" & getUserScore yzmID = Plugin.UU.upLoadFile("c:\1.jpg", 1) //调用识别函数,根据路径上传,参数中的1为图片类型ID(表示需要识别的图片为四位英文或数字) //yzmID = Plugin.UU.recognizeScreenByCodeType(7,165,25,15,1,0) //截图并上传函数 //请参考:http://dll.uuwise.com/index.php?n=ApiDoc.Price If yzmID > 0 Then MessageBox "已将您的图片上传至优优,请耐心等待识别结果!" yzm=Plugin.UU.getResult(yzmID) //根据验证码ID获取识别结果 MessageBox "图片的识别结果为:" & yzm & "该图片在服务器上的ID为:" & yzmID /* //如果图片识别不正确,调用 !如何判断识别不正确?用户登录网站的时候, //如果验证码识别不正确,网页会有相关提示,其它应用应该差不多。 //注意:恶意报错(打正确也报),会同时冻结您的开发者帐户及用户帐户。 reportStatus = Plugin.UU.reportError(yzmID) If reportStatus=0 Then MessageBox "恭喜您报错成功,题分已返还至您的用户帐户!" End If */ Else MessageBox "上传图片出现错误,错误代码为:" &yzmID //错误代码请参考:http://dll.uuwise.com上各对应函数 End If Else MessageBox "对不起,登录失败,错误代码为:" &login //错误代码请参考:http://dll.uuwise.com上各对应函数 End If
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值