妹子“卖身”为哪般?验证码真的这么难识别?
教你回合制游戏图形验证识别本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403零基础学按键精灵群(2群):372671254
小编昨天在按键贴吧上看到了一个妹子为了学习游戏中的验证识别,居然爆XX照求师傅教!! {:5_136:}
妹子为了学习都爆XX照了,想必是很有学习的诚意,其实大可不必这样做,按键学院目前正在进行回合制方面的实战,其中就有涉及到类似的识别技术。
为什么此类识别技术如此受大家的追捧呢?你想想看,用脚本在家里挂着游戏,你在外面吃着火锅、唱着歌,游戏忽然就出现验证码了啊啊!!轻则白白浪费那么多时间还有电费,运气不好的话还封号,游戏白挂了,想想这画面就太美不敢看。
{:4_88:}
今天小编就给大家带来某著名游戏的过验证的方法。
验证码形式
在本次给大家带来的是某著名回合制游戏的图形验证码识别方法,先给大家看看验证码的样子
在这个验证码中总共有4个人物,其中有1个人物面朝的方向是和其他3个不同的,游戏中需要识别出朝向不同的人物,然后点击它就可以过验证了。上图中就是点击下面的红框的人物即可。
那现在问题来了,这种验证码对于人工去识别很简单,但是如果用按键代码的话改如何去识别呢?{:4_92:}
方法一
思路
细心的童鞋可以发现这验证有几个特点:
1、游戏中的这些出现的人物模型基本上是固定的,
2、人物的正反朝向的角度也是固定的,
3、游戏只要求找出面朝外面的角色模型。
我们可以根据这几个特点来制定方案。
前期准备:把出现在验证中的每个人物模型的正面朝向都分别截取特征图。尽量截取身体中间部分,以免边缘部分和环境人物交错导致识别出现问题。
代码思路:
1、把截取的人物的特征图名称保存到数组当中
2、验证出现后使用找多图的命令,在验证码窗口范围内找特征图
3、有戏中开启多线程用来识别验证码窗口的出现
代码
1、把前期准备好的特征图的名称统一保存到一个数组里。如果你还想着用常规的方法一个个去输入名称赋值的话,那就太low了,我们可以利用命令库里的遍历文件名的方法一次性赋值
命令名称 Lib.文件.遍历指定目录下所有文件名
命令功能 遍历指定目录下所有文件名
命令参数 参数1 字符串型,文件夹路径
返回值 返回的是数组变量,存储着每一个文件名
验证图 = Lib.文件.遍历指定目录下所有文件名("c:\验证特征")
For i=0 to UBound(验证图)-1
TracePrint 验证图(i)
Next
2、现在存放图片的数组也有了,那改如何利用好这个数组来实现找多图呢? 可以利用For循环记次的方式来遍历找图Sub 识别验证()
For i = 0 To UBound(验证图)
FindPic 0,0,1024,768,验证图(i),0.9,intX,intY
If intX >= 0 Then
MoveTo intX, intY
Delay 100
LeftClick 1
End If
Next
End sub3、在脚本中开启一个多线程,来监控验证窗口是否出现。可以通过多点找色的方法ID = BeginThread (等待验证) '开启等待验证的多线程监控验证窗口
Sub 等待验证()
XY=Plugin.Color.FindMutiColor(0,0,1920,1080,"FFFFFF","-6|8|FFFFFF,-3|8|FFFFFF,3|8|FFFFFF,12|10|0000FF,14|3|0000FF,12|7|0000FF,70|4|0000FF,71|5|0000FF",1)
If XY <> "" Then
Call 识别验证
End If
End sub到目前为止就已经实现了监控并识别游戏中的验证码了。
声明:这里只是提供一个识别的思路,具体的代码童鞋们可以根据具体的情况进行优化哦~~
方法二
除了通过找多图的方式识别验证以外,还有其他的方法可以过验证吗?
当然有!小编下面就为大家介绍另外一种过验证的方法,这种方法更省事方便{:4_89:}
石像答题插件
石像答题是目前网络上比较热门常用的人工代答平台。是通过调用对应的答题插件,把获取到的验证码截图下来发送到答题平台的服务器上,然后经过人工的识别后把答案返回到脚本中
1、使用石像答题之前需要先下载石像的答题插件,把 dll 后缀的插件复制到按键精灵目录中的plugin文件夹里
下载地址:石像答题插件下载 (下载右边的按键精灵插件)
2、第一次使用插件需要先注册插件//开头注册执行一次即可,编号和密码可登陆www.sxdama.com查看
用户插件编号="3261815159"
注册码 = GetEnvironmentVar("MMRegCode")'获取商业小精灵注册码
用户插件密码="1eb5169f92cd5ecee2a04899"
作者插件编号="3261815159"
Call Plugin.RemoteAnswer.InitialiseUserData(用户插件编号, "", 注册码, 用户插件密码, 作者插件编号)
3、之后在脚本识别到验证出现后,通过截图的命令把验证码的区域截图保存下来//获取坐标范围为0,0,100,200的区域图像,保存为"C:\1.bmp"。
Call Plugin.RemoteAnswer.PrintScreen(0, 0, 100, 200, "C:\1.bmp")
//获取坐标范围为0,0,100,200的区域图像,保存为"C:\2.bmp"。
Call Plugin.RemoteAnswer.PrintScreen(0, 0, 100, 200, "C:\2.bmp")
//执行命令把图片"C:\1.bmp"与"C:\2.bmp"两张图片合拼成"C:\Pic.gif"动态图片。
Call Plugin.RemoteAnswer.CompositeImage("C:\图片.gif","C:\1.bmp","C:\2.bmp")
//---------以上例子演示了如何截取gif 图并发送,如果验证是静态不动的图像,可以只截图一张---------
4、之后就是把验证图片发送到石像的平台,并且等待接收答案,这个过程也可以做成函数直接调用Function GetAnswer(图片路径, 图片格式, 类型编号)
GetAnswer = "" '函数开头赋值空值,表示未处理
Dim 题ID, 答题开始时间, Answer //定义变量
//发送图片路径,图片格式,类型编号的题目信息,并返回题目ID。
题目ID = Plugin.RemoteAnswer.SendImage(图片路径, 图片格式, 类型编号)
答题开始时间 = now //记录下时间
Do
Answer = Plugin.RemoteAnswer.QueryAnswer(题目ID)
If Answer = "等待答案" Then
TracePrint "等待处理中……" & Int(DateDiff("s", 答题开始时间, now))
Else
If InStr(Answer, "验证错误") > 0 Then
错误代码 = Split(Answer, ":")(1) //返回值格式如: 验证错误:101使用Split函数获取101这个值。
TracePrint "验证错误:" & 错误代码'这里可以把错误代码记录一个地方,以便提交客服人员咨询。
ElseIf Answer = "无法识别" Then
TracePrint "图像异常无法处理,需要重新发题目"
Else
TracePrint "成功得到答案"
GetAnswer = Answer //答案赋值
End If
Exit Do //离开Do循环
End If
Delay 500 //循环语句中适当的延时给予CPU响应时间
Loop Until DateDiff("s", 答题开始时间, now) > 120 //这里计算等待时间,超过120秒,则离开循环
End Function这里只是对石像答题插件做一个简单的介绍,具体的使用方法,以及命令的参数,童鞋们可以到官网详细的了解。石像官网地址:石像答题平台官网
总结
这次介绍的这两种过验证的方式都各有优缺点,童鞋们可以根据自己的需求进行选择一种方式
找多图识别验证 石像答题平台
优点1、 识别速度快
2、前期特征图做好的话在识别上比较稳定
3、制作完毕使用过程中不会产生额外的费用 1、使用方便,前期不需要做过多的准备工作
2、代码简单,不需要复杂的算法
缺点 前期需要做大量的准备工作,需要把每个人物正面朝向截取特征图需要收取额外的答题费用,根据验证的类型难度收取不同的费用
看看这个新人求教 需要的就是这个 {:cry:}{:cry:}{:cry:} 打酱油的啦,飘过赚点海币而已。 ................ 打酱油的啦,飘过赚点海币而已。
页:
[1]