找回密码
  注册[Register]
查看: 836|回复: 9

[其他] 按键精灵挑战答题

[复制链接]
发表于 2021-3-12 19:27 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

之前在研究答题功能的时候,发现好麻烦。虽然最后还是做出来这个功能了,但是有的时候并不能识别。所以我当时就想挑战答题肯定很难。
没想到居然很简单,因为他有题库。

虽然其实用python之类的写这个查题功能很简单,但是之前想着用按键精灵做答题功能,那么就要想该如何做了。

首先先讲一下我的思路吧。

我们先识别这个挑战答题在任务的那个位置,然后进行完成判断,如果完成则停止运行,如果未完成则点击前往。

之后我们设置一个识别范围,将范围内的字上传到百度ocr上进行文字识别,最后再传到那些答题网站上获取答案,进行反馈,再进行回答即可。


代码发布出来只为互相交流学习,禁止利用此代码进行商业行为等活动。
[Asm] 纯文本查看 复制代码
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),"[A-Z]")
            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

另外,最重要的一点就是代码仅供交流学习使用,请勿进行各类操作了。。。。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-3-12 19:35 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 19:39 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 20:49 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 21:24 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 23:29 | 显示全部楼层

支持楼主,谢谢分享。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 23:34 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-12 23:52 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-13 00:01 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-13 16:00 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-5-19 08:59 , Processed in 0.038005 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表