从0到1使用python开发一个半自动答题小程序的实现

时间:2021-05-22

前言

最近每天都有玩微信读书上面的每日一答的答题游戏,完全答对12题后,可以瓜分无限阅读卡。但是从小就不太爱看书的我,很难连续答对12道题,由此,产生了写一个半自动答题小程序的想法。我们先看一张效果图吧(ps 这里主要是我电脑有点卡,点击左边地选项有延迟)

项目GIthub地址:微信读书答题python小程序

觉得对你有帮助的请点个⭐来支持一下吧。

演示图:

做前准备

  • mumu模拟器 因为手边没有安卓手机,所以只能在模拟器上进行模拟,如果手上有安卓手机地,可以适当地修改一下程序。需要安装微信和微信读书这两个软件
  • python工具包:BeautifulSoup4、Pillow、urllib、requests、re、base64、time

思路

  • 截屏含有题目和答案的图片(范围可以自己指定)
  • 使用百度的图片识别技术将图片转化为文字,并进行一系列处理,分别将题目和答案进行存储
  • 调动百度知道搜索接口,将题目作为搜索关键字进行答案搜索
  • 将搜索出来的内容使用BeautifulSoup4进行答案提取,这里可以设置答案提取数量
  • 将搜索结果进行输出显示

附:这里我还加了一个自动推荐答案,利用百度短文本相似接口和选项是否出现在答案中这两种验证方法进行验证,推荐相似度最高的答案。准确度还可以,但是比较耗时间,比正常情况下时间要多上一倍。

开始写代码

1. 导入工具包

import requests #访问网站import re #正则表达式匹配import base64 #编码from bs4 import BeautifulSoup #处理页面数据from urllib import parse #进行url编码import time #统计时间from PIL import ImageGrab #处理图片

2. 编写类和初始化方法

class autogetanswer(): def __init__(self,StartAutoRecomment=True,answernumber=5): self.StartAutoRecomment=StartAutoRecomment self.APIKEY=['BICrxxxxxxxxNNI','CrHGxxxxxxxx3C'] self.SECRETKEY=['BgL4jxxxxxxxxxGj9','1xo0jxxxxxx90cx'] self.accesstoken=[] self.baiduzhidao='http://zhidao.baidu.com/search?' self.question='' self.answer=[] self.answernumber=answernumber self.searchanswer=[] self.answerscore=[] self.reanswerindex=0 self.imageurl='answer.jpg' self.position=(35,155,355,680) self.titleregular1=r'(10题|共10|12题|共12|翻倍)' self.titleregular2=r'(\?|\?)' self.answerregular1=r'(这题|问题|跳题|换题|题卡|换卡|跳卡|这有)'
  • self.StartAutoRecomment 是否开启自动推荐答案,默认为True
  • self.APIKEY 百度图像转文字、百度短文本相似度分析 这两个接口的apikey
  • self.SECRETKEY 百度图像转文字、百度短文本相似度分析 这两个接口的secretkey

这两个key值我就没法提供给大家了,大家可以自己去百度云官方申请,免费额度大概有5万,足够我们使用了。

申请过程大家可以参考这个博客,很简单的如何申请百度文字识别apikey和Secret Key

  • self.accesstoken 存储申请使用接口的accesstoken值
  • self.baiduzhidao 百度知道搜索接口地址
  • self.imageurl 图片地址
  • self.position 截图方位信息,依次分别是左间距、上间距、右间距、下间距
  • self.titleregular1、.titleregular2、answerregular1 这些是进行题目和答案处理的条件

3. 获得accesstoken值

def GetAccseetoken(self): for i in range(len(self.APIKEY)): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(self.APIKEY[i],self.SECRETKEY[i]) response = requests.get(host) jsondata = response.json() self.accesstoken.append(jsondata['access_token'])

这是官方提供的获取accesstoken的摸板,大家直接使用就行了。

4. 图像转文字以及相关处理

def OCR(self,filename): request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic" # 二进制方式打开图片文件 f = open(filename, 'rb') img = base64.b64encode(f.read()) params = {"image":img} access_token = self.accesstoken[0] request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/x-ment and len(self.answer)>0): print("\n推荐答案:",self.answer[self.reanswerindex]) print("\n======================答案区======================") print("总用时:",end-start,end="\n\n") self.IniParam() else: break except: print("识别失败,请重新尝试") self.IniParam() pass

这里主要是一个while循环,通过输入指定来判断是否结束循环。

这里说一下下面这两个语句:

img = ImageGrab.grab(self.position)#左、上、右、下img.save(self.imageurl)

这两个语句是用来截取我们指定位置的图片,然后进行图片的保存。

总结

上述呢,就是整个项目完成的流程,整体运行是几乎每什么问题,但是还是存在许多可优化的空间。也欢迎大家对此感兴趣的留言,说说你的改进意见,我会非常感谢,并认真考虑进去。期待与大家的讨论!😄

到此这篇关于从0到1使用python开发一个半自动答题小程序的实现的文章就介绍到这了,更多相关python 半自动答题小程序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章