冲顶大会、百万英雄等答题游戏助手(Python脚本)

改进版在此http://blog.csdn.net/lsjweiyi/article/details/79203722
事先说明:这只是帮助你百度题目,并没有直接给你答案什么的,作用应该是能帮助你找到3 5 到题的答案而已,剩下一些题目还得靠自己,谈不上作弊。其次,这个脚本依赖网络比较多,毕竟要调用百度的api。当然还有浏览器的启动速度,毕竟答题就那么10秒。

然而,此时的这些答题游戏的奖金已经只有几块钱了,当初让我有想法的时候还是几十几百的,现在这样做,价值不高了。

思路:利用软件对手机截屏 ,并实时保存到电脑上,软件会自动创建一个文件夹(Pictures,原来是不存在的,当然这里你需要修改图片存储的路径),然后脚本检测到这个文件夹创建成功了,就表示截屏了,下来就进行识别。识别利用百度的在线ocr(不是卖广告,说实在的,尽管没开源,好歹给我这种业余爱好者一个解决方案,关键每天有免费次数,识别速度也快,还有更好的,请不吝赐教),然后把识别的文字百度并在浏览器打开。

关于百度的AI平台:ocr地址:http://ai.baidu.com/tech/ocr/general。具体怎么用自己看看文档吧(说的一般吧),脚本里需要一些key,我就提一下怎么获得这里的key,在上面的网址找到登录,然后找到图片里的位置:这里写图片描述
然后创建应用,然后摸索吧,就会有那些key了。

关于手机连接电脑的软件我就随便找了个叫totalControl的,好不好我不知道,我就随便找的,反正目的就是能把手机实时截屏并上传,手机屏幕分辨率适用1920*1080,可以换别的软件,不过不要忘了根据实际修改相关的地方。

贴代码,Python版本2.7.13,有一些库需要安装,自己去安装吧,win32的库,地址:http://download.csdn.net/download/xgin1/9392606

# _*_ coding:UTF-8 _*_  
import win32con
import ctypes
import ctypes.wintypes
import threading
import time
import os
from PIL import Image
from aip import AipOcr#百度的api,百度官网有教程
import base64
import shutil
import string
import urllib
import urllib2

#热键功能,独立的一个线程
class Hotkey(threading.Thread):  #创建一个Thread.threading的扩展类  

    def run(self):  
        global EXIT #定义全局变量,这个可以在不同线程间共用
        user32 = ctypes.windll.user32  #加载user32.dll

        try:
            if not user32.RegisterHotKey(None, ID, 0, HOTKEY):   # 注册快捷键F10并判断是否成功,该热键用于结束程序,且最好这么结束,否则影响下一次注册热键。  
                print "Unable to register id", ID # 返回一个错误信息


            #以下为检测热键是否被按下,并在最后释放快捷键  
            msg = ctypes.wintypes.MSG()  

            while True:
                if user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:
                    if msg.message == win32con.WM_HOTKEY:
                        if msg.wParam == ID:
                            EXIT=True
                            return

                    user32.TranslateMessage(ctypes.byref(msg))  
                    user32.DispatchMessageA(ctypes.byref(msg))   

        finally:
            user32.UnregisterHotKey(None, ID)#必须得释放热键,否则下次就会注册失败,所以当程序异常退出,没有释放热键,
                                              #那么下次很可能就没办法注册成功了,这时可以换一个热键测试



class Ans():

    def main(self):
        im_name=os.listdir(path)#获取图片名
        self.cut()#对图片进行裁剪

        f=open('im.jpg','rb')#二进制方式打开图文件
        image=f.read()#这里好像必须命名为image,百度的api限定,有点不能理解,有待考察
        #im=base64.b64encode(f.read()) #读取文件内容,转换为base64编码

        #这里是每个百度云账号独立的一些ID,你需要自己去弄你自己的
        APP_ID='你的ID'
        API_KEY='你的KEY'
        SECRET_KEY='你的SECRET_KEY'


        client = AipOcr(APP_ID, API_KEY, SECRET_KEY)#这个就是百度的api,可以获取一个相当于实例对象的东西,可以调用函数
        information=client.basicGeneral(image)#ocr函数,打印出来是json格式的

        STR=''#存储识别出来的文字
        for i in range(0,information['words_result_num']):#根据格式得出来的循环
            STR+=information['words_result'][i]['words'].encode('utf-8')

        #下面几行是对得到的字符串做一些处理,去掉一些符号,因为百度搜索限制38个字以内,个人觉得这里写的很丑,无奈没找到好的方法
        STR=STR[1:len(STR)]
        STR=STR.translate(None,string.punctuation)
        STR=STR.replace('“','')
        STR=STR.replace('”','')
        STR=STR.replace('《','')
        STR=STR.replace('》','')

        self.find(STR)#调用百度搜索,并保存到本地,再用默认浏览器打开
        print STR
        f.close()#关闭文件,不然后面删除不掉
        shutil.rmtree(path)#删除之前获得的图片文件以及这个文件夹,以便下次判断是否已经截屏

    #打开图片并裁剪
    def cut(self):
        im_name=os.listdir(path)#获取图片名,因为截屏靠的外部软件,没办法修改截屏图片的名字
        im=Image.open(path+'\\'+im_name[0])

        box1=(93,380,970,1200)#这个是把选项也截进来
        box2=(93,380,970,630)#这个是不把选项截下来
        crop_im=im.crop(box1)#裁剪函数
        im.close()
        crop_im.save('im.jpg')#保存本地,有不保存就直接用二进制打开的方式吗??求教


    #调用百度搜索,并保存到本地,再用默认浏览器打开,参考百度的资料,具体哪篇忘记了,,如有问题请联系我。。
    def find(self,STR):
        url = "http://www.baidu.com/s"
        search = [('w',STR)]
        getString = url + "?" + urllib.urlencode(search)


        req = urllib2.Request(getString)
        fd = urllib2.urlopen(req)
        baiduResponse=fd.read()

        fobj=open("baidu.html",'w')
        fobj.write(baiduResponse)
        os.startfile('baidu.html')#这个函数就很刚好的解决了大问题,可以用浏览器打开网页,不然就得手点了
        fobj.close()


if __name__ == '__main__':
    HOTKEY=win32con.VK_F6 #结束程序的快捷键F6,自行根据需要修改,一定要手动关闭程序,否则下次这个快捷键就用不了了
    path="E:\Python\cddh\Pictures"#存储图片的路径,Pictures是软件自动创建的,所以修改路径时最后都要添加这个
    EXIT = False #用来传递退出的参数
    ID=106 #注册热键的唯一id,用来区分热键

    ans=Ans()#创建实例

    hotkey = Hotkey()  
    hotkey.start()#启动线程


    while(True):
        if os.path.exists(path):#检测是否截屏了,截屏了就会生成Pictures文件夹
            if os.listdir(path):#这里再做检测是因为文件夹创建完不代表图片就创建完成了,不信试试
                time.sleep(0.1)#删掉测试一下就知道为什么要加了。。反正我这里测试是要加的
                ans.main()


        elif EXIT==True: #退出程序
            break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值