Beispiel #1
0
def TryTencent():
    hWin = win32gui.FindWindow("TXGuiFoundation", "腾讯手游助手【标准引擎】")
    if hWin:
        #t1 = time.clock()
        print("搜索到腾讯模拟器......")
        l, t, r, b = win32gui.GetWindowRect(hWin)
        img = ImageGrab.grab((l, t, r, b))
        #img = img.crop((l,t,r,b))
        #img.save('C:\\Users\\44780\\Desktop\\t.png', 'png')
        #t2 = time.clock()
        #print("截取模拟器截图耗时:", t2-t1)
        imgList = TryAnalyseImgCD(img)
        if (imgList is None or len(imgList) < 2):
            print("没有到答题时间或者查不到关键像素")
            return
        #t3 = time.clock()
        #print("图片裁剪耗时:", t3-t2)
        question, choices = ocr.ocr_img(imgList)
        print('Question: ' + question)
        if ('不是' in question) or ('不属于' in question) or (
                '不包含' in question) or ('不可能' in question):
            print('*****请注意此题为否定题*****')

        #t4 = time.clock()
        #print("图片识别耗时:", t4-t3)
        # 将问题与选项一起搜索方法,并获取搜索到的结果数目
        m0 = Thread(methods.run_algorithm(0, question, choices))
        m1 = Thread(methods.run_algorithm(1, question, choices))
        # 用选项在问题页面中计数出现词频方法
        m2 = Thread(methods.run_algorithm(2, question, choices))
        m0.start()
        m1.start()
        m2.start()
# @desc    : 答题闯关辅助,截屏 ,OCR 识别,百度搜索


from PIL import Image
from common import screenshot, ocr, methods
from threading import Thread
import time

while True:
    # 截图
    screenshot.check_screenshot()

    img = Image.open("./screenshot.png")

    # 文字识别
    question, choices = ocr.ocr_img(img)
    # t = time.clock()
    # 用不同方法输出结果,取消某个方法在前面加上#

    # # 打开浏览器方法搜索问题
    # methods.run_algorithm(0, question, choices)
    # # 将问题与选项一起搜索方法,并获取搜索到的结果数目
    # methods.run_algorithm(1, question, choices)
    # # 用选项在问题页面中计数出现词频方法
    # methods.run_algorithm(2, question, choices)

    # 多线程
    m1 = Thread(methods.run_algorithm(0, question, choices))
    m2 = Thread(methods.run_algorithm(1, question, choices))
    m3 = Thread(methods.run_algorithm(2, question, choices))
    m1.start()
Beispiel #3
0
import wda
from PIL import Image
from common import ocr, methods

c = wda.Client()

while True:

    # 截图
    c.screenshot('screenshot.png')

    img = Image.open("./screenshot.png")

    # 文字识别
    question, choices = ocr.ocr_img(img)

    # 用不同方法输出结果,取消某个方法在前面加上#

    # 打开浏览器方法搜索问题
    methods.run_algorithm(0, question, choices)
    # 将问题与选项一起搜索方法,并获取搜索到的结果数目
    methods.run_algorithm(1, question, choices)
    # 用选项在问题页面中计数出现词频方法
    methods.run_algorithm(2, question, choices)

    go = input('输入回车继续运行,输入 n 回车结束运行: ')
    if go == 'n':
        break

    print('------------------------')
Beispiel #4
0
    # os.system("screencapture -R\"20,150,310,310\" ./screenshot.png")
    

    # 西瓜视频
    # os.system("screencapture -R\"20,150,310,100\" ./question_screenshot.png")
    # os.system("screencapture -R\"20,250,310,200\" ./choices_screenshot.png")

    os.system("screencapture -R\"20,190,310,100\" ./question_screenshot.png")
    os.system("screencapture -R\"20,320,310,180\" ./choices_screenshot.png")

    question_img = Image.open("./question_screenshot.png")
    choices_img = Image.open("./choices_screenshot.png")
    
    # 文字识别
    question, choices = ocr.ocr_img(question_img, choices_img)

    print("问题%s \n选择:%s"%(question, choices))
    # 用不同方法输出结果,取消某个方法在前面加上#

    # 打开浏览器方法搜索问题
    # methods.run_algorithm(0, question, choices) 
    # # 将问题与选项一起搜索方法,并获取搜索到的结果数目
    # methods.run_algorithm(1, question, choices)
    # # 用选项在问题页面中计数出现词频方法
    # methods.run_algorithm(2, question, choices)

    Thread(methods.run_algorithm(0, question, choices)).start()
    Thread(methods.run_algorithm(1, question, choices)).start()
    Thread(methods.run_algorithm(2, question, choices)).start()
    # m1.start()
def hit_me():
    global running
    global touch_start
    global save_choices
    global AUTO
    global current_question
    global answers
    global current_answer
    global current_bigData
    global status
    global count
    global getMax
    global platform
    getMax = False

    token = '88QUg$!pmf!TAY5r'

    if platform == 'auto':
        go = input('输入回车运行,输入 n 回车结束运行: ')
        if go == 'n':
            return

    t = time.clock()
    # 截图
    screenshot.check_screenshot()

    img = Image.open("./screenshot.png")
    print('截图耗时: {0}'.format(time.clock() - t))
    t = time.clock()

    # 文字识别
    question, choices, selection_start = ocr.ocr_img(img, platform)

    print('文字识别耗时: {0}'.format(time.clock() - t))

    if (count > 6000):
        print('退出')
        os.system('adb shell input keyevent 4 && adb shell input keyevent 4')
        return

    if (question == '' or len(choices) == 0 or selection_start == 0):
        status = 'waiting'
        print('未检测到题板')
        count = count + 1
        # print('休息1s')
        # time.sleep(1)
        os.system('adb shell input tap 930 300')
        return hit_me()
    #     if running:
    #         return hit_me()

    touch_start = selection_start
    containSum = 0
    for q in question:
        if (q in current_question):
            containSum = containSum + 1

    if (containSum * 100 / len(question) > 80):
        if (status != 'waiting'):
            print('此题已答过')
            print('休息5s')
            time.sleep(5)
            return hit_me()
    #         if running:
    #             return hit_me()
        if (touch_start == -1):
            return hit_me()
        current_answer = ocr.get_question(img, touch_start, platform)
        if (current_answer < len(answers)):
            print('正确答案为:' + answers[current_answer])
        # req = requests.get(url='http://localhost:3000/add', params={'question': current_question, 'answer': answers[current_answer], 'bigdata':answers[current_bigData]})
        # print(req)
        req = requests.get(url='http://hj.chenzhicheng.com/update',
                           params={
                               'question': current_question,
                               'right': current_answer,
                               'token': token
                           })
        print(req.text)
        return hit_me()

    #     if running:
    #         return hit_me()
    t = time.clock()
    count = 0
    status = 'answered'
    req = requests.get(url='http://hj.chenzhicheng.com/add',
                       params={
                           'question': question,
                           'answer': choices,
                           'token': token
                       })
    print(req.text)
    print('发送问题耗时: {0}'.format(time.clock() - t))

    current_question = question
    answers = choices

    save_choices = choices

    result = '问题:' + question + '\n\n'

    for choice in choices:
        result += choice + '\n'

    if GUI:
        var.set(result)  # 设置标签的文字为 'you hit me'

    # t = time.clock()
    # 用不同方法输出结果,取消某个方法在前面加上#

    # # 打开浏览器方法搜索问题
    # methods.run_algorithm(0, question, choices)
    # # 将问题与选项一起搜索方法,并获取搜索到的结果数目
    # methods.run_algorithm(1, question, choices)
    # # 用选项在问题页面中计数出现词频方法
    # methods.run_algorithm(2, question, choices, q)

    def count_base(question, choices):
        global getMax
        print('\n-- 方法3: 题目搜索结果包含选项词频计数法 --\n')
        # q.put('\n-- 方法3: 题目搜索结果包含选项词频计数法 --\n')
        # 请求
        req = requests.get(url='http://www.baidu.com/s',
                           params={'wd': question})
        content = req.text
        #print(content)
        counts = []
        print('Question: ' + question)
        if ('不' in question or '错误' in question):
            print('**请注意此题为否定题,选计数最少的**')
            getMax = False
        else:
            getMax = True

        for i in range(len(choices)):
            counts.append(content.count(choices[i]))
            #print(choices[i] + " : " + str(counts[i]))
        return output(choices, counts, 'count_base', question)

    def open_webbrowser_count(question, choices):
        global getMax
        print('\n-- 方法2: 题目+选项搜索结果计数法 --\n')
        # q.put('\n-- 方法2: 题目+选项搜索结果计数法 --\n')
        print('Question: ' + question)
        if ('不' in question or '错误' in question):
            getMax = False
            print('**请注意此题为否定题,选计数最少的**')
        else:
            getMax = True

        counts = []
        for i in range(len(choices)):
            # 请求
            req = requests.get(url='http://www.baidu.com/s',
                               params={'wd': question + choices[i]})
            content = req.text
            index = content.find('百度为您找到相关结果约') + 11
            content = content[index:]
            index = content.find('个')
            count = content[:index].replace(',', '')
            counts.append(count)
        return output(choices, counts, 'open_webbrowser_count', question)

    def output(choices, counts, al_num, question):
        global getMax
        if (len(counts) == 0):
            return random.choice([0, 1, 2])
        counts = list(map(int, counts))

        # 计数最高
        index_max = counts.index(max(counts))

        # 计数最少
        index_min = counts.index(min(counts))

        if index_max == index_min:
            print(Fore.RED + "高低计数相等此方法失效!" + Fore.RESET)
            if al_num == 'count_base':
                return open_webbrowser_count(question, choices)
            else:
                return random.choice([0, 1, 2])

        result = 0
        for i in range(len(choices)):
            if i == index_max:
                # 绿色为计数最高的答案
                print(Fore.GREEN + "{0} : {1} ".format(choices[i], counts[i]) +
                      Fore.RESET)
                if getMax:
                    result = i

            elif i == index_min:
                # 红色为计数最低的答案
                print(Fore.MAGENTA +
                      "{0} : {1}".format(choices[i], counts[i]) + Fore.RESET)
                if (getMax == False):
                    result = i

            else:
                print("{0} : {1}".format(choices[i], counts[i]))
                # q.put(' '+str(choices[i]) + ':' + str(counts[i]) + '\n')
        return result

    t = time.clock()
    selection = count_base(question, choices)
    print('寻找答案耗时: {0}'.format(time.clock() - t))

    if (len(choices) < 3 or selection > 2):
        return hit_me()
    print('\n我要选' + choices[selection])
    if (platform == 'zs'):
        #芝士超人
        answer_height = 200
    elif (platform == 'hj' or platform == 'cd'):
        #花椒直播
        # 冲顶大会
        answer_height = 150

    if (platform != 'auto'):
        os.system('adb shell input tap 250 ' +
                  str(touch_start + (selection + 0.5) * answer_height))
    # if running:
    #     hit_me()
    req = requests.get(url='http://hj.chenzhicheng.com/update',
                       params={
                           'question': current_question,
                           'advise': selection,
                           'token': token
                       })
    print(req.text)
    print('休息5s')
    time.sleep(5)
    return hit_me()