【微信读书每日一答辅助小程序】使用python对每日一答问题进行识别,并将结果保存到剪贴板以便搜索。

目录标题

  • 1 环境准备
  • 2 获取屏幕位置
  • 3 指定区域屏幕截图
  • 4 文字识别
  • 5 按键识别并保存到剪贴板

  在腾讯收购阅文之后,微信读书的无限卡已经不能免费看书了,这时白嫖微信读书每日一答的书币成了不错的选择。严重偏科又手速垃圾的我在等级升高下逐渐力不从心,于是突然有了这个想法,写个能快速识别问题文字的小程序,因为现有的识别文字等程序(如QQ)会出现识别速度慢、手动框选识别区域的问题。
【微信读书每日一答辅助小程序】使用python对每日一答问题进行识别,并将结果保存到剪贴板以便搜索。_第1张图片

1 环境准备

系统:WIN10
python version:3.6
所需要的库:pyautogui,keyboard,PILLOW,baidu-aip

2 获取屏幕位置

  既然是对屏幕制定区域进行截图,必须要知道该区域在屏幕上的坐标,因此需要使用pyautogui大三方库,windows上不需要安装其他依赖模块。
【微信读书每日一答辅助小程序】使用python对每日一答问题进行识别,并将结果保存到剪贴板以便搜索。_第2张图片

import pyautogui

print('Press Ctrl-C to quit.')
try:
    while True:
        # Get and print the mouse coordinates.
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
    print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
	#按ctrl+c结束程序
    print('\nDone.')

3 指定区域屏幕截图

  需要使用PILLOW第三方库,安装方法自行百度。实现的操作是对制定区域截图,并保存到目标文件夹中,之后以二进制只读方式打开该图片,返回其结果。每次保存图片会自动覆盖之前的图片,具体代码如下:

from PIL import ImageGrab

def get_file_content():
    #左上坐标点(x1,y1),右上坐标点(x2,y2),box = (x1,y1,x2,y2)
    box = (1450,267,1850,365)
    #截图
    image = ImageGrab.grab(box)
    while True:
        try:
            #保存图片
            filepath = "C:/Users/MAIBENBEN/Desktop/1.jpg"
            image.save(filepath)
            break
        except:
            continue

4 文字识别

  在此需要用到百度AI开放平台文字识别技术,因此需要注册百度智能云账号/百度账号,注册过程十分简单,一分钟完成,具体步骤可以参考。
  为了使用该功能,需要安装baidu-aip第三方库,很小巧且好用的一个库,识别速度很快,2秒左右。具体代码如下:

from aip import AipOcr

def word_identify():
    #输入自己的应用的信息
    APP_ID = '***'
    API_KEY = '***'
    SECRET_KEY = '***'
    client= AipOcr(APP_ID, API_KEY, SECRET_KEY)
    #读取图片信息,返回二进制结果
    img = get_file_content()
    #返回识别结果
    res = client.basicGeneral(img)
    print(res)
    #返回识别结果中的文字信息
    return ''.join([word['words'] for word in res['words_result']])

5 按键识别并保存到剪贴板

  实现功能为,当程序运行后,按下某键就进行截图和文字识别操作,按下某键退出程序,按其他键无反应,需要用到keyboard第三方库。还需将识别结果保存到剪贴板中,需要使用第三方库pyperclip。程序运行后按b键进行截图识别,按q键结束程序,具体代码如下:

import keyboard
import pyperclip

while True:
    try:
        print('Press and release a shortcut(b): ')
    ​    ​#捕捉按键状态
        shortcut = keyboard.read_key()
        print('Shortcut selected:', shortcut)
        if shortcut == 'b':
            words = word_identify()
            print(words)
    ​    ​    ​#识别结果保存到剪贴板
            pyperclip.copy(words)
        elif shortcut == 'q':
            break
        else:
            continue
    except KeyboardInterrupt:
        #防止出现按ctrl+c结束程序的情况
        print("\n")
        continue

第一次用CSDN投稿,若代码有错误可在评论区交流。
最后,祝你白嫖开心!
PS:之后有时间可能会做如下更新:
  1.使用selenium模块自动打开浏览器进行搜索。
  2.对问题进行精细化处理,使其更便于搜索。
  3.自动捕获窗口坐标位置,在此基础上进行截图操作。
  4.添加题库,从题库对比寻找答案,没有则自行搜索。

你可能感兴趣的:(windows,python,小程序)