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

2023-11-07

  在腾讯收购阅文之后,微信读书的无限卡已经不能免费看书了,这时白嫖微信读书每日一答的书币成了不错的选择。严重偏科又手速垃圾的我在等级升高下逐渐力不从心,于是突然有了这个想法,写个能快速识别问题文字的小程序,因为现有的识别文字等程序(如QQ)会出现识别速度慢、手动框选识别区域的问题。

1 环境准备

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

2 获取屏幕位置

  既然是对屏幕制定区域进行截图,必须要知道该区域在屏幕上的坐标,因此需要使用pyautogui大三方库,windows上不需要安装其他依赖模块。
分辨率为 1920 × 1080 的计算机屏幕上的坐标

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.添加题库,从题库对比寻找答案,没有则自行搜索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 将 matplotlib 颜色图集中在特定值上

    我正在使用 matplotlib 颜色图 seismic 绘制绘图 并且希望白色以 0 为中心 当我在不进行任何更改的情况下运行脚本时 白色从 0 下降到 10 我尝试设置 vmin 50 vmax 50 但在这种情况下我完全失去了白色 关
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐