楚子沦i 发表于 2021-3-12 16:21

按键精灵挑战答题

本帖最后由 楚子沦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查看相关代码。

楚子沦i 发表于 2021-8-16 17:25

@xiaomin86
兄弟,你的问题我已经看到了。
首先,你给我回复的帖子是按键精灵,所以这个实际上是跟python没有一毛钱关系的。
如果是想要实现我帖子功能的话,其实是非常容易地,首先需要一个安卓的模拟器,雷电模拟器,然后下载一个按键精灵手机版即可。
之后按键精灵的教程可以去b站看一看,不过其实大多数的逻辑跟其他语言没有什么区别,随便找一个免费的看就行了,或者找一个案例听,非常容易的,如果说,没有任何编程语言基础的话,推荐学习一下c语言,中国大学mooc里面翁恺老师讲的很不错,非常适合入门。之后就去b站随便找一个按键精灵的教程视频看就行了。按键精灵其实逻辑来说是非常容易地,自己随便写两个案例就可以了。

楚子沦i 发表于 2021-3-16 17:43

xiongwang 发表于 2021-3-16 12:56
大哥,说实话,我按照猜错步骤弄的,最后也成功启动了,但是不能自动学是怎么回事呢?雷电模拟器也试了, ...

不就是先把东西填好后就会有提示了么,然后等就行了啊
出现什么如果出现问题请联系xxx之后等待一会就开始运行了.
当然如果你的脚本停止运行了那就另当别论了,只要他没停止运行那么等待就行了啊

李诺千金 发表于 2021-3-12 16:26

学习了。正在犯愁

lczhzn9611115 发表于 2021-3-12 16:50

这也是个好东西{:301_993:}

lianxian1311 发表于 2021-3-12 16:56

你说他懒吧,他又去写了代码,你说他勤快吧,他答题又不想动脑

阿童木嗷嗷 发表于 2021-3-12 17:01

停止运行

未来老中医 发表于 2021-3-12 17:31

谢谢分享

灬饭の否灬 发表于 2021-3-12 17:41

这个的适用范围指哪些答题呢?

ff5500 发表于 2021-3-12 17:42

我不明白这个是用在什么地方的呢?
万能搜索答题?!?

Leen 发表于 2021-3-12 17:52

要是能弄个四人赛的就好了:lol

do2020 发表于 2021-3-12 17:54

谢谢大佬!!!{:1_893:}
赶紧收藏。。。
页: [1] 2 3
查看完整版本: 按键精灵挑战答题