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

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

 

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

    大漠插件百度百科介绍:大漠综合插件(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编码,可以通过按键精灵的抓图工具获取,这里我们获取的是黑色。

 

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

 

 

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值