大家好,小编为大家解答python答题系统的代码的问题。很多人还不知道python基于题库答题器,现在让我们一起来看看吧!
从0到1使用python开发一个半自动答题小程序
前言
最近每天都有玩微信读书上面的每日一答的答题游戏,完全答对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=''
self.question=''
self.answer=[]
self.answernumber=answernumber
self.searchanswer=[]
self.answerscore=[]
self.reanswerindex=0
self.imageurl=''
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 = ';client_id={}&client_secret={}'.format(self.APIKEY[i],self.SECRETKEY[i])
response = (host)
jsondata = ()
self.accesstoken.append(jsondata['access_token'])
这是官方提供的获取accesstoken的摸板,大家直接使用就行了。