-
关注Ta
-
- 注册时间 2014-10-29
- 最后登录 2016-05-06
-
- 发帖84
- 在线41小时
- 精华0
- DB768
- 威望0
- 保证金0
- 桃子0
- 鲜花0
- 鸡蛋0
-
访问TA的空间加好友用道具
|
教你回合制游戏图形验证识别 零基础学按键精灵群(2群):372671254 引用 小编昨天在按键贴吧上看到了一个妹子为了学习游戏中的验证识别,居然爆XX照求师傅教!! {:5_136:}
妹子为了学习都爆XX照了,想必是很有学习的诚意,其实大可不必这样做,按键学院目前正在进行回合制方面的实战,其中就有涉及到类似的识别技术。
为什么此类识别技术如此受大家的追捧呢?你想想看,用脚本在家里挂着游戏,你在外面吃着火锅、唱着歌,游戏忽然就出现验证码了啊啊!!轻则白白浪费那么多时间还有电费,运气不好的话还封号,游戏白挂了,想想这画面就太美不敢看。 {:4_88:} 今天小编就给大家带来某著名游戏的过验证的方法。
验证码形式 在本次给大家带来的是某著名回合制游戏的图形验证码识别方法,先给大家看看验证码的样子 [attachimg]174647[/attachimg] [attachimg]174648[/attachimg] 引用 在这个验证码中总共有4个人物,其中有1个人物面朝的方向是和其他3个不同的,游戏中需要识别出朝向不同的人物,然后点击它就可以过验证了。上图中就是点击下面的红框的人物即可。
[attachimg]174649[/attachimg] [attachimg]174650[/attachimg] 那现在问题来了,这种验证码对于人工去识别很简单,但是如果用按键代码的话改如何去识别呢?{:4_92:} 方法一 思路 引用 细心的童鞋可以发现这验证有几个特点: 1、游戏中的这些出现的人物模型基本上是固定的, 2、人物的正反朝向的角度也是固定的, 3、游戏只要求找出面朝外面的角色模型。 我们可以根据这几个特点来制定方案。 前期准备:把出现在验证中的每个人物模型的正面朝向都分别截取特征图。尽量截取身体中间部分,以免边缘部分和环境人物交错导致识别出现问题。 引用 代码思路: 1、把截取的人物的特征图名称保存到数组当中 2、验证出现后使用找多图的命令,在验证码窗口范围内找特征图 3、有戏中开启多线程用来识别验证码窗口的出现 代码 1、把前期准备好的特征图的名称统一保存到一个数组里。如果你还想着用常规的方法一个个去输入名称赋值的话,那就太low了,我们可以利用命令库里的遍历文件名的方法一次性赋值 - 验证图 = 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 sub
3、在脚本中开启一个多线程,来监控验证窗口是否出现。可以通过多点找色的方法 - 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
引用 这里只是对石像答题插件做一个简单的介绍,具体的使用方法,以及命令的参数,童鞋们可以到官网详细的了解。石像官网地址:石像答题平台官网 总结 这次介绍的这两种过验证的方式都各有优缺点,童鞋们可以根据自己的需求进行选择一种方式
|