按键精灵挑战答题
本帖最后由 楚子沦i 于 2021-3-12 23:01 编辑之前在研究答题功能的时候,发现好麻烦。虽然最后还是做出来这个功能了,但是有的时候并不能识别。所以我当时就想挑战答题肯定很难。
没想到居然很简单,因为他有题库。
虽然其实用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
另外,最重要的一点就是代码仅供交流学习使用,请勿进行各类操作了。。。。
发现好多兄弟都不知道该咋用,这里是用的按键精灵手机版,然后用的雷电模拟器。
其实按键精灵还是很好写的,因为他其实左面有代码提示,还有一键化操作,简单的功能完全不需要逻辑,只需要找到合适的指令然后添加数据上就可以了。
当然这里面使用的位置是在积分页面,然后截一下图即可。
这里代码只是借鉴一下而已,不要直接复制使用,如果想用的话请去GitHub查看相关代码。 @xiaomin86
兄弟,你的问题我已经看到了。
首先,你给我回复的帖子是按键精灵,所以这个实际上是跟python没有一毛钱关系的。
如果是想要实现我帖子功能的话,其实是非常容易地,首先需要一个安卓的模拟器,雷电模拟器,然后下载一个按键精灵手机版即可。
之后按键精灵的教程可以去b站看一看,不过其实大多数的逻辑跟其他语言没有什么区别,随便找一个免费的看就行了,或者找一个案例听,非常容易的,如果说,没有任何编程语言基础的话,推荐学习一下c语言,中国大学mooc里面翁恺老师讲的很不错,非常适合入门。之后就去b站随便找一个按键精灵的教程视频看就行了。按键精灵其实逻辑来说是非常容易地,自己随便写两个案例就可以了。 xiongwang 发表于 2021-3-16 12:56
大哥,说实话,我按照猜错步骤弄的,最后也成功启动了,但是不能自动学是怎么回事呢?雷电模拟器也试了, ...
不就是先把东西填好后就会有提示了么,然后等就行了啊
出现什么如果出现问题请联系xxx之后等待一会就开始运行了.
当然如果你的脚本停止运行了那就另当别论了,只要他没停止运行那么等待就行了啊 学习了。正在犯愁 这也是个好东西{:301_993:} 你说他懒吧,他又去写了代码,你说他勤快吧,他答题又不想动脑 停止运行 谢谢分享 这个的适用范围指哪些答题呢? 我不明白这个是用在什么地方的呢?
万能搜索答题?!? 要是能弄个四人赛的就好了:lol 谢谢大佬!!!{:1_893:}
赶紧收藏。。。