头脑王者辅助工具

自从微信开放了小程序制作游戏的权限以来,各种小程序扑面而来。有人预言,下一个风口将会是小程序。所以说,能不能“一夜暴富”,就看你能不能站在风口了;
当然,这里不是教大家制作小程序的,只是简单的弄了一个头脑王者的答题辅助工具,让大家快速上王者,褥一点羊毛罢了

代码已经上传到GitHub:https://github.com/stormdony/python_demo
有兴趣可以下载玩一玩

技术要点
  • 用fiddler抓数据包
  • 链接的拼接
  • 一定的数据处理逻辑

思路分析

通过利用fiddler抓包,抓住题目和选项,保存在文件中,再从文件中提取相应的内容,进行百度搜索,通过词频统计,找出最佳结果。当然,对于那些含有“不”的取反问题,就会有点问题,但是正确率,还是可以保证的

fiddler抓包

关于手机抓包的具体设置步骤,在这里就不细说了。网上有很多的介绍
推荐这篇博客使用fiddler对手机上的程序进行抓包 ,如果有不懂的,欢迎提问
设置好fiddler之后,就可以进入正题了

1.抓请求

在答过一次排位赛后,观察fiddler中的每一条请求,查看哪些请求包含题目
由于我已经弄好了,所以这里直接给出图片
这里写图片描述
所以直接在fiddler中设置过滤规则,过滤掉其他不需要的请求
这里写图片描述
过滤完后,再次进行排位赛,就只会看到5条题目的请求了。

2.保存文件

在fiddler右侧的功能中,选择Fiddler Script来保存题目文件,具体步骤看下图
这里写图片描述
OnBeforeResponse方法中添加下面的代码,其中文件存放位置可以自己设定,这里设置为 D:/quiz/response.txt

 if(oSession.host == 'question-zh.hortor.net'){
            oSession.utilDecodeResponse();   //Decoding HTTP request in case it's gzip
            //Saving full request object (Including HTTP headers)
            oSession.SaveResponse('D:\\quiz\\response.txt',true);
            //Saving just body
            oSession.SaveResponseBody('D:\\quiz\\body.txt');
        }

获取到的body.txt内容为(正在答题时,打开body.txt),可以看到一个json类型的数据,这就是我们需要的信息
ps:答完题目之后,看到的不是下面的内容

{"data":
    {"quiz":"满洲里位于我国的那个地区?",
     "options":["东北","西北","华北","华中"],
     "num":3,
     "school":"理科",
     "type":"地理",
     "typeID":9,
     "contributor":"",
     "partner":2,
     "endTime":1525486464,
     "curTime":1525486449,
     "myBuff":{"3":0},
     "choose":{},
     "score":{"16294982":180,"231711834":160}},
     "errcode":0}
开始编程

定义一个方法,执行具体步骤,在这一个过程中,困难最大的应该是URL的拼接,因为编码方式的不同,导致试验了很久才找到解决的方法

def begin(filename):
    f = open(filename, 'r', encoding='utf-8')
    try:
        j = json.loads(f.read())
        # 判断数据文件是否有题目和选项
        if 'quiz' in j['data'] and 'options' in j['data']:
            num = j['data']['num']
            quiz = j['data']['quiz']
            print(('第' + str(num) + '题:' + quiz).center(50, '*') + '\n')
            cho = j['data']['options']
            #设置获取百度查询结果的前三页
            pagenum = [0, 10, 20]
            ans = []
            #定义四个选项的词频,初始化为0
            A = B = C = D = 0
            for i in pagenum:
            #拼接URL,
                url = 'http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=' + quiz[:-1] + '&pn={}'.format(i)
                wb_data = requests.get(url)
                wb_data.encoding = 'utf-8'
                content = wb_data.text
                for index,choice in enumerate(cho):
                    strnum = content.count(choice)
                    # print(choice + " : {}".format(strnum))
                    ans.append(strnum)
              #将前三页的词频叠加起来
            for index,selection in enumerate(ans):
                index = (index % 4)
                if index == 0:
                    D += selection
                elif index == 1:
                    C += selection
                elif index == 2:
                    B += selection
                elif index == 3:
                    A += selection
            number = [D, C, B, A]
            for name, count in zip(cho, number):
                print(name, count) 
              #找出词频最大的选项
            index = number.index(max(number))
            print('\033[32;0m')
            print(("    应该选第    " + str((index + 1)) + "  个     " + str(cho[index])).center(50, '*'))
            print('\033[0m ')
        else:
            pass
            print('  -  '*15)
    except:
        pass
    f.close()

定义一个入口函数

if __name__ == '__main__':
    while True:
     #文件位置需修改
        begin('D:/quiz/body.txt')
        time.sleep(1)
验证成果

运行程序之后,可以看到输出下面的内容
这里写图片描述
这样就可以根据结果选择相应的选项,正确率还是可以的。一个小时上王者
这里写图片描述

总结

通过这样一种方法,可以快速的上王者,每赛季都可以褥一下几块钱的羊毛,当然,每天的奖金赛是用不了的。
由于技术有限,不能够实现全自动,所以有其他想法,可以留言,蟹蟹
ps:教程仅供娱乐使用。

扫描二维码关注公众号,回复: 1762633 查看本文章

猜你喜欢

转载自blog.csdn.net/stormdony/article/details/80203780