导航菜单
首页 >  词达人考试答案  > 基于python的词达人自动答题(更新时间20200514)

基于python的词达人自动答题(更新时间20200514)

2021年12月项目停止更新了 博客并没有其他网站的号,未经允许不得私自转发

博客太忙了,不想在继续维护了,代码开源

需要安装的库有

hashlib,base64,pykeyboard,pyautogui,numpy,opencv,json,time,requests等

本代码的ocr文字识别基于讯飞,识别率比百度好,所以改用讯飞, 与前面的那版相比,可以说前面那版放弃是正确的,百度太抠了,每个月免费500,讯飞注册就送10w,所以用这个了,具体怎么用,看代码把

需要配合fiddler,前面的爬取那块单词是大佬提供的

fiddler要改的地方 在这里插入图片描述

if(oSession.uriContains("https://gateway.vocabgo.com/Student/ClassTask/SubmitAnswerAndSave")||oSession.uriContains("https://gateway.vocabgo.com/Student/StudyTask/SubmitAnswerAndSave")){oSession.utilDecodeResponse();oSession.SaveResponse("C:\\data\\response.txt",true);oSession.SaveResponseBody("C:\\data\\responseBody.txt");}if(oSession.uriContains("https://gateway.vocabgo.com/Student/ClassTask/")){oSession.utilDecodeResponse();oSession.SaveResponseBody("C:\\data\\word_list.txt");}if(oSession.uriContains("https://gateway.vocabgo.com/Student/ClassTask/")){oSession.utilDecodeResponse();oSession.SaveResponseBody("C:\\data\\wordList.txt");}if(oSession.uriContains("https://gateway.vocabgo.com/Student/StudyTask/")){oSession.utilDecodeResponse();oSession.SaveResponseBody("C:\\data\\word_list.txt");}if(oSession.uriContains("https://gateway.vocabgo.com/Student/StudyTask/")){oSession.utilDecodeResponse();oSession.SaveResponseBody("C:\\data\\wordList.txt");}

代码较长,逻辑基本完美,每次答题大于95分,需要继续开发的开以白嫖,感谢各位的支持 想入群的开以加:635032789 觉得不错,可以关注公众号:小白学习教程,或者进群赞助一波,博客会很开心

#-*- coding: utf-8 -*-import hashlibimport base64from pykeyboard import PyKeyboardimport pyautoguiimport numpy as npimport cv2 as cvimport osimport jsonimport timeimport randomimport requestsimport openpyxlimport xlrdfrom re import sub,findall,searchimport syssys.setrecursionlimit(100000) #例如这里设置为十万# print('请确认已经注册的讯飞识别的应用,并在官网将自己的ip设置为白名单')print('因为ocr识别率不是很高,对一些识别不到的题目,我加入了逻辑,一般情况可以顺利的完成每个list')print('感谢大家的支持')print('欢迎加群719352964')# bt=input('如果你的list已经改名字了,请输入1,其他的输入0:')# UserToken=input('请输入Usertoken:')bt=input('自学输入1,其余输入0:')id=input('请输入讯飞的APPID:')key=input('请输入讯飞的API_KEY:')print('确保你的界面在单词页,按回车继续')input("Entry the any key to exit")with open("C:/data/2.txt", "r") as f:UserToken = f.readline()# print(UserToken)kkk = PyKeyboard()th=random.randrange(1,3,1)# thh=random.randrange(1,5,1)# thhh=random.choice([1,1,2.5,3,5.5,7.5,6])try:f1 = open('C:/data/wordList.txt', 'r', encoding='utf-8')except:print('未找到wordList')headers={'UserToken': UserToken,}word_list=json.load(f1)try:if int(bt)==1:course_id = word_list['data']['course_id']list_id = word_list['data']['list_id']else:course_id = word_list['data']['course_id']list_id = word_list['data']['word_list'][1]['list_id']except:print('word_list文件不正确请按照流程操作')print('退回到主界面选择单词书之后再打开软件')word_list_js={}for j in range(len(word_list['data']['word_list'])):word = word_list['data']['word_list'][j]['word']url = 'https://gateway.vocabgo.com/Student/Course/StudyWordInfo?course_id=' + course_id + '&list_id=' + list_id + '&word=' + word + '×tamp=1587916524392&versions=1.0'r = requests.get(url, headers=headers, verify=False)word_js = json.loads(r.text)word_list_js[word]=word_js['data']['options']print('-------------加载中-------------')print('--------------------------------加载成功----------------------------------------------')# print(json.dumps(word_list_js))print('确保你已经完成了第一题,然后按回车继续')input("Entry the any key to exit")# iddd=input('请输入讯飞的APPID:')# idddd=input('请输入讯飞的API_KEY:')# thh = 0.5thh = input('请输入答题间隔时间0.5,1,2 ,3 ,4 ,5 等等:')# fb1= input('请输入:')# fb2= input('请输入:')fb1= 400fb2= 1000input("Entry the any key to exit")# fb=()# if fb==1:# fb1=400# fb2=1000# else:# pass# answers=[] while True:try:f = open('C:/data/responseBody.txt', 'r', encoding='utf-8')except:print('未找到responseBody')t1 = cv.getTickCount()# time.sleep(th)time.sleep(float(thh))js = json.load(f)# aaaa=[]answer = []try:if js['data']['topic_mode']==11:mode_11_content=js['data']['stem']['content']# print(mode_11_content)time.sleep(0.5)for key,value in word_list_js.items():# print(len(value))for q in range(len(value)):# print(value[q]['content']['example'])for w in range(len(value[q]['content']['example'])):# print(value[q]['content']['example'][w]['sen_content'])if value[q]['content']['example'][w]['sen_content']==mode_11_content :pattern=value[q]['content']['mean'].replace('s','a').replace('ing','').replace('ed','').replace('e','h').replace(' ','').replace('/','').replace('ed','').replace("(.*?)|{.*?}|[.*?]",'').replace('…','aa').replace('adv','').replace('adj','').replace(';','').replace('noun','').replace('verb','').replace(',','').replace('vhrb','').replace('ing','')# patternn =re.sub(u"\\(.*?\\)|\\{.*?\\}", "",value[q]['content']['mean'].replace(' ','').replace('adj','').replace(';','').replace('noun','').replace('verb','').replace(',',''))paaaa=sub("(.*?)", '', pattern)answer.append(paaaa)else:pass# pattern =value[q]['content']['mean'].replace(' ','').replace('adj','').replace(';','').replace('noun','').replace('verb','').replace(',','')# # answer.append(pattern)# answer=re.sub(u"(.*?)|{.*?}|[.*?]", "",pattern)# print(value[q]['content']['mean'].replace(';','').replace('noun','').replace('verb',''))# print(patternn)# print('------------------------------------------------------')elif js['data']['topic_mode']==22:mode_22_content=js['data']['stem']['content']# print(mode_22_content)# print(word_list_js[mode_22_content])for r in range(len(word_list_js[mode_22_content])):for t in range(len(js['data']['options'])):# answer=[]if js['data']['options'][t]['content']==word_list_js[mode_22_content][r]['content']['mean']:paa=js['data']['options'][t]['content'].replace('s','a').replace('ed','').replace('e','h').replace('ing','').replace('ed','').replace('/','').replace(';','').replace(' ','').replace('adv','').replace('noun','').replace('…', '的').replace('verb','').replace('adj','').replace(',','').replace('adv','').replace(' ','').replace('vhrb','')# try:# time.sleep(0.5)pa =sub("(.*?)", '', paa)# paaa=paaanswer.append(pa)# except:# answer.append(pa)# answer.append(js['data']['options'][t]['content'].replace(';','').replace(' ','').replace('adv','').replace('noun','').replace('…', '的').replace('verb','').replace('adj','').replace(',','').replace('adv','').replace("(.*?)",'').replace(' ',''))# print(js['data']['options'][t]['content'].replace(';','').replace('noun','').replace('verb','').replace(',',''))else:paa = (word_list_js[mode_22_content][r]['content']['mean'].replace('s','a').replace('ed','').replace('e','h').replace('ed','').replace('…', 'aa').replace(';','').replace('noun','').replace('verb','').replace(',','').replace(' ','').replace('e','h').replace('adj','').replace('adv','').replace('vhrb','').replace('ing',''))# if re.sub in dict:pa = sub("(.*?)|{.*?}|[.*?]", '',paa)# paaa=dict(pa)# aaaa.append(paa)# answer=re.sub("(.*?)|{.*?}|[.*?]", '',aaaa)# except:answer.append(pa)# paa = [mode_22_content][r]['content']['mean'].replace('…', '的').replace(';','').replace('noun','').replace('verb','').replace(',','').replace(' ','').replace('adj','').replace('adv','')# answer.append(word_list_js[mode_22_content][r]['content']['mean'].replace("(.*?)",'').replace('…', '的').replace(';','').replace('noun','').replace('verb','').replace(',','').replace(' ','').replace('adj','').replace('adv',''))# print(word_list_js[mode_22_content][r]['content']['mean'].replace('…', '的').replace(';','').replace('noun','').replace('verb','').replace(',',''))# time.sleep(0.5)# print('--------------------------------------')elif js['data']['topic_mode']==31:for y in range(len(js['data']['stem']['remark'])):answer.append(js['data']['stem']['remark'][y]['relation'].replace('s','a').replace('-', '').replace('ed','').replace('e','h').replace('vhrb','').replace('/','').replace('s','').replace('ing',''))# print(js['data']['stem']['remark'][y]['relation'])# time.sleep(0.5)# print('----------------------------------------')elif js['data']['topic_mode'] == 32:mode_32_content=js['data']['stem']['remark']for key,value in word_list_js.items():# print(len(value))for q in range(len(value)):# print(value[q]['content']['example'])for w in range(len(value[q]['content']['usage'])):if mode_32_content in value[q]['content']['usage'][w]:a = value[q]['content']['usage'][w].replace('s','a').replace('adv', '').replace('ing','').replace("'s",'').replace('ed','').replace('/','').replace('e','h').replace('ing','').replace('vhrb','') # .replace('{', '').replace('}', '').replace(';','')# # reg='[\u4e00-\u9fa5]'a = sub("[\u4e00-\u9fa5]*", '', str(a))# a=sub("[\u4e00-\u9fa5]*","",str(a))# a=sub(":*","",str(a))# a=sub(' *{',"','",str(a))# a = sub(' *}', "", str(a))f = lambda a: [e.lower() for e in findall(r'\b\w+\b', a)]answer = f(a)# del (answer[-1])# c=value[q]['content']['usage'][w].replace('{','').replace('}','').replace(';','').replace(' ','')# reg = '[\u4e00-\u9fa5]'# answers = sub(reg, '', c)## answer.append(answers)# # print(value[q]['content']['usage'][w])# time.sleep(0.5)# print('------------------------------------------')elif js['data']['topic_mode'] == 42:mode_42_content=js['data']['stem']['remark']for key,value in word_list_js.items():# print(len(value))for q in range(len(value)):# print(value[q]['content']['example'])for w in range(len(value[q]['content']['example'])):if mode_42_content == value[q]['content']['example'][w]['sen_mean_cn']:answer.append(key.replace('s','a').replace('ed','').replace('ing','').replace('ing','').replace('e','h').replace('vhrb','').replace('/',''))# print(key)# time.sleep(0.5)elif js['data']['topic_mode'] == 51:mode_51_content=js['data']['stem']['remark']for key,value in word_list_js.items():# print(len(value))for q in range(len(value)):# print(value[q]['content']['example'])for w in range(len(value[q]['content']['usage'])):if mode_51_content in value[q]['content']['usage'][w]:# print(value[q]['content']['usage'][w])tran_answer1 = ''search('{',value[q]['content']['usage'][w])# print(js['data']['stem']['content'])# print(re.search('{', js['data']['stem']['content']).span()[0])# print(re.search('}', js['data']['stem']['content']).span()[1])before = search('{', value[q]['content']['usage'][w]).span()[0]after = search('}', value[q]['content']['usage'][w]).span()[1]for s in range(before + 1, after - 1):# print(js['data']['stem']['content'][s])tran_answer1 = (tran_answer1 + value[q]['content']['usage'][w][s]).lower()# print(tran_answer1)answer.append(tran_answer1)# print('------------------------------------------------')# time.sleep(0.5)except:print('本任务已经完成,按ctrl+c 退出',)input("Entry the any key to exit")print('1111',answer)# time.sleep(0.5)# time.sleep(th)img = pyautogui.screenshot(region=[0, 130, 480, 850]) # x,y,w,himg.save('./1/answer.jpg')# time.sleep(th)## 2图片灰度处理# def access_pixels(image):# height, width, channels = image.shape# # print("width:%s,height:%s,channels:%s" % (width, height, channels))## for row in range(height):# for list in range(width):# for c in range(channels):# pv = image[row, list, c]# image[row, list, c] = 255 - pv# # cv.imshow("AfterDeal", image)### src = cv.imread('./1/answer.jpg')# # cv.imshow('OriginalImage', src)## # t1 = cv.getTickCount()# access_pixels(src)# # t2 = cv.getTickCount()# # print("time cost:%s s" % ((t2 - t1) / cv.getTickFrequency()))src = cv.imread("1/answer.jpg", 1)Img = 255 - srccv.imwrite('2/answer.jpg', Img)indir = "./2/"outdir = "./3/"cout = 0for fileName in os.listdir(indir):if fileName == '.DS_Store':continuecout = cout + 1# print(cout)# print(fileName)img_dir = os.path.join(indir, fileName) # 获取图片的名字# print(img_dir)src = cv.imread(img_dir) # 读取图片h1, w1 = src.shape[:2]# print(h1, w1) # 打印长和宽r = 1 / 2 # 缩小倍数# 进行缩放dst = cv.resize(src, (int(w1 / r), int(h1 / r)), interpolation=cv.INTER_CUBIC) # 使用双立方插值h2, w2 = dst.shape[:2]# print(h2, w2) # 打印长和宽# print(outdir + fileName)cv.imwrite(outdir + fileName, dst)I = cv.imread('./3/answer.jpg', flags=0)aa = 2Oa = I * float(aa)Oa[Oa > 255] = 255Oa = np.round(Oa)Oa = Oa.astype(np.uint8)cv.imwrite('./4/answer.jpg', Oa)URL = "http://webapi.xfyun.cn/v1/service/v1/ocr/general"APPID = idAPI_KEY = keydef getHeader():# 当前时间戳curTime = str(int(time.time()))# 支持语言类型和是否开启位置定位(默认否)param = {"language": "cn|en", "location": "true"}param = json.dumps(param)paramBase64 = base64.b64encode(param.encode('utf-8'))m2 = hashlib.md5()str1 = API_KEY + curTime + str(paramBase64, 'utf-8')m2.update(str1.encode('utf-8'))checkSum = m2.hexdigest()# 组装http请求头header = {'X-CurTime': curTime,'X-Param': paramBase64,'X-Appid': APPID,'X-CheckSum': checkSum,'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',}return header# 上传文件并进行base64位编码with open(r'./4/answer.jpg', 'rb') as f:f1 = f.read()f1_base64 = str(base64.b64encode(f1), 'utf-8')data = {'image': f1_base64}# h=list()r = requests.post(URL, data=data, headers=getHeader())result = str(r.content, 'utf-8')# print(result)re = json.loads(result)# print(re['data']['block'][0]['line'])# print(r)print('正在答题,请不要动鼠标')# i=0try:i = 0qq = []while i

相关推荐: