按键精灵挑战答题
之前在研究答题功能的时候,发现好麻烦。虽然最后还是做出来这个功能了,但是有的时候并不能识别。所以我当时就想挑战答题肯定很难。没想到居然很简单,因为他有题库。
虽然其实用python之类的写这个查题功能很简单,但是之前想着用按键精灵做答题功能,那么就要想该如何做了。
首先先讲一下我的思路吧。
我们先识别这个挑战答题在任务的那个位置,然后进行完成判断,如果完成则停止运行,如果未完成则点击前往。
之后我们设置一个识别范围,将范围内的字上传到百度ocr上进行文字识别,最后再传到那些答题网站上获取答案,进行反馈,再进行回答即可。
代码发布出来只为互相交流学习,禁止利用此代码进行商业行为等活动。
Function 挑战答题
Dim num = 1
Swipe 364, 1161, 364, 735
Delay 1500
Swipe 364, 1161, 364, 935
Delay 1500
Dim intX,intY
FindPic 0,0,0,0,"Attachment:挑战答题识别.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Tap intX+500,intY
TracePrint "挑战答题"
Delay 5000
Else
Tap 41, 102
Delay 1000
Exit Function
End If
Import "shanhai.lua"
Import "zm.luae" //导入插件,只需执行一次
zm.Init//初始化插件,只需执行一次
Dim t(),题目
If Not zm.OcrBaiDuInit("api""密钥") Then
TracePrint "初始化设置百度云识别失败"
EndScript
End If
//全屏识别文字
Do
For 9
题目 = zm.OcrBaiDu(443,290,676,349)
TracePrint 题目
dim a = zm.HttpGet("http://www.syiban.com/search/index/init.html?modelid=1&q="&题目)
TracePrint a
//LUA模式匹配,返回数组
dim RegexArr = shanhai.RegexFind(a,"答案:(.-)%<")
TracePrint RegexArr(0)
If RegexArr(0) = null Then
//76,294,323,343
题目 = zm.OcrBaiDu(76,294,323,343)
TracePrint 题目
a = zm.HttpGet("http://www.syiban.com/search/index/init.html?modelid=1&q="&题目)
TracePrint a
//LUA模式匹配,返回数组
RegexArr = shanhai.RegexFind(a,"答案:(.-)%<")
If RegexArr(0) = null Then
// 349,349,531,394
题目 = zm.OcrBaiDu(349,349,531,394)
TracePrint 题目
a = zm.HttpGet("http://www.syiban.com/search/index/init.html?modelid=1&q="&题目)
TracePrint a
TracePrint RegexArr(0)
If RegexArr(0) = null Then
TracePrint "null"
Tap 51, 90
Delay 1500
Tap 220, 756
Delay 1500
Exit For
End If
End If
End If
Dim newanswer = shanhai.RegexFind(RegexArr(0),"")
TracePrint newanswer(0)
If num > 7 Then
Tap 341, 785
Delay 1500
End If
//判断选项位置
FindPic 0,0,0,0,"Attachment:句号判断1.png","000000",2,0.9,intX,intY
If intX > -1 And intY > -1 Then
Tap intX,intY
TracePrint "a"&intX,intY
Delay 1500
Else
FindPic 0, 0, 0, 0, "Attachment:句号判断2.png", "000000", 2, 0.9, intX, intY
If intX > -1 And intY > -1 Then
TracePrint "b"&intX,intY
Delay 1500
Else
FindPic 0,0,0,0,"Attachment:句号判断3.png","000000",2,0.9,intX,intY
If intX > -1 And intY > -1 Then
TracePrint "c"&intX,intY
Delay 1500
End If
End If
End If
If newanswer(0) = "A" Then
TracePrint "a"
Tap intX, intY + 170
TracePrint intX, intY + 170
Delay 1500
ElseIf newanswer(0) = "B" Then
TracePrint "b"
Tap intX, intY + 290
TracePrint intX, intY + 290
Delay 1500
ElseIf newanswer(0) = "C" Then
TracePrint "c"
Tap intX, intY + 410
TracePrint intX, intY + 410
Delay 1500
ElseIf newanswer(0) = "D" Then
TracePrint "d"
Tap intX, intY + 540
TracePrint intX, intY + 540
Delay 1500
Else
Tap 341, 785
Delay 1500
End If
FindPic 0,0,0,0,"Attachment:挑战答题意外结束.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Tap 217,886
Delay 1500
Tap 51, 92
Delay 1500
Exit For
End If
Next
FindPic 0,0,0,0,"Attachment:挑战答题意外结束.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Tap 217,886
Delay 1500
Tap 51, 92
Delay 1500
End If
Delay 3000
FindPic 0,0,0,0,"Attachment:挑战答题识别.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Tap intX+500,intY
TracePrint "挑战答题"
Delay 5000
Else
Tap 41, 102
Delay 1000
Exit Function
End If
Loop
End Function
上面即代码,其实写的很明白了,就是我们先获取一下答题的位置,然后进行跳转。之后获取一个范围进行文字识别,当然其实当时写的时候遇到了一些小问题,比如说符号之类的正好在那个位置,或者比如说读音字形之类的题,识别的位置就不对了,所以加了一个if判断,如果出现错误就从头开始识别,能解决绝大部分的问题。
接下来就是选项的获取了,这个其实我当时想了半天,因为按键精灵识别颜色的时候那种色差相近的是很难识别上的,所以我想了另一个办法就是识别句号,每一道题都有一个句号结尾,我们识别这个句号就好了,然后加上一部分的xy来进行点击就行了。
最后再就是答对5道题后答错,我这里是设置了答对几道题后随机点一个位置,然后错误,进行返回,其实也可以查完答案后,比如说a给他点b都是可以的。
最后部分的源码也公开在了GitHub里,欢迎大家来star https://github.com/datehoer/studygoodcountry
另外,最重要的一点就是代码仅供交流学习使用,请勿进行各类操作了。。。。
感谢楼主的分享 6666666666 谢谢大牛 多谢分享多谢分享
支持楼主,谢谢分享。
感谢分享,谢谢提供分享 谢谢大佬 多谢楼主分享 谢谢分享!
页:
[1]