让Python自动完成某学网听说第一、二大题

全文以某学网某教材冲刺训练(九)为例

使用本程序的前提是:
提前知道要做的这套题的答案或完全不在乎成绩自行随机生成答案
(本程序主要目的是帮大家节省时间)

答案存储在一个叫answer.json的文档中,存储规则为 {"<题号>":"<选项前的字母(大写)>"}
冲刺训练(九)的答案按照上面的存储整理如下:

{"1": "C","2": "C","3": "A","4": "A","5": "B","6": "C","7": "C","8": "A","9": "B","10": "A","11": "C","12": "A","13":"B","14": "B"}

现在进入正题

本程序是利用模拟操作实现的,要求在运行期间让某学网窗口最大化且保持在最前端,过程中不要关闭程序
这个程序的原理大体是:
每隔一段时间就重复如下操作

  1. 用win32con, win32gui, pillow等包实现对某学网窗口进行截屏
  2. 用OCR API识别这个截屏的文字内容以判定题号
  3. 根据提供的答案对正确的选项进行模拟鼠标点击操作

首先,把所有要用到的模块都安装上,以下是所需要的模块或包:
pymouse
pyuserinput
baidu-aip
pillow
pywin32
务必把以上所有都安装成功
模块和包安装指南:
打开命令提示符,依次执行python -m pip install <上面那些模块的名字>
如果失败,可能是因为没有配置环境变量,不要配置环境变量了,直接卸载python,安装一个新的,安装时勾选Add Python3.x to path,安装时就自动帮你配好环境变量了,然后再打开命令提示符,依次执行python -m pip install <上面那些模块的名字>

如果嫌麻烦的直接到后面,有打包好的代码

提前声明: 本程序可能会不稳定,运行时请时不时看看程序是否失效,失效后请手动作答,本人正在尽力优化程序使其稳定

创建一个空的.py文件命名为PrintScreen.py
将如下代码复制入PrintScreen.py中

import win32con, win32gui
from PIL import ImageGrabclass PrintScreen:def __init__(self):pass@staticmethoddef get_window_pos(name):name = namehandle = win32gui.FindWindow(0, name)if handle == 0:return Noneelse:return win32gui.GetWindowRect(handle), handledef save_screenshot(self):(x1, y1, x2, y2), handle = self.get_window_pos('天学网PC客户端')win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)win32gui.SetForegroundWindow(handle)img_ready = ImageGrab.grab((x1, y1, x2, y2))img_ready.save("picture.png")

再创建一个空的.py文件命名为OCR.py
将如下代码复制入OCR.py中

from aip import AipOcrclass OCR:def __init__(self):""" 你的 APPID AK SK """APP_ID = '24600223'API_KEY = 'fToTQYKdC9vZp0M2mCCzTZPZ'SECRET_KEY = 'eXlQODP9QEQVhgD286QLlylCKugMDubu'self.client = AipOcr(APP_ID, API_KEY, SECRET_KEY)""" 读取图片 """@staticmethoddef get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()def get_picture_text(self,filePath):image = self.get_file_content(filePath)""" 调用通用文字识别, 图片参数为本地图片 """return self.client.basicGeneral(image)def get_ocr_result(self):ocr_rls_origin = self.get_picture_text(filePath="picture.png")ocr_rls_proc = ocr_rls_origin["words_result"]ocr_rls = ""for i in ocr_rls_proc:ocr_rls += i["words"]return ocr_rlsif __name__ == "__main__":ocr = OCR()a = ocr.get_picture_text(filePath="picture.png")print(a)

下面是主程序,main.py,是要执行的程序

from OCR import OCR
from PrintScreen import PrintScreenfrom pymouse import *
import time
import jsonif __name__ == "__main__":MouseCoordinate_first = {"A": [470, 280], "B": [470, 340], "C": [470, 410]}MouseCoordinate_second = {"upper": {"A": [470, 240], "B": [470, 310], "C": [470, 360]},"lower": {"A": [470, 450], "B": [470, 510], "C": [470, 570]}}with open("answer.json","r") as fp:answer = json.load(fp)print("欢迎使用")continue_or_not = Truestate_f = {1: 0, 2: 0, 3: 0, 4: 0}while True:ps = PrintScreen()ps.save_screenshot()   #将截屏存到Picture.png中ocr = OCR()ocr_rls = ocr.get_ocr_result()print(ocr_rls)for i in range(1,5):if "回答第"+str(i)+"小题" in ocr_rls:choice = answer[str(i)]coordinate = MouseCoordinate_first[choice]m = PyMouse()m.click(coordinate[0], coordinate[1])print("正在为您作答,第"+str(i)+"题答案:"+choice)state_f[i] = 1if i == 4:continue_or_not = Falsebreakprint("——————————————————")for i in state_f:if state_f[i]:print("第"+str(i)+"题已答")else:print("第"+str(i)+"题未答")print("——————————————————")if not continue_or_not:breaktime.sleep(20)continue_or_not = Truestate_s = {5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0}while True:ps = PrintScreen()ps.save_screenshot()  # 将截屏存到Picture.png中ocr = OCR()ocr_rls = ocr.get_ocr_result()upperexrnum = [5,7,9,11,13]              #每两道题上面一道题的题号for i in upperexrnum:if "回答第" + str(i) + "至第" + str(i+1) + "小题" in ocr_rls:choice_upper = answer[str(i)]coordinate_upper = MouseCoordinate_second["upper"][choice_upper]choice_lower = answer[str(i+1)]coordinate_lower = MouseCoordinate_second["lower"][choice_lower]m = PyMouse()m.click(coordinate_upper[0], coordinate_upper[1])time.sleep(1)m.click(coordinate_lower[0], coordinate_lower[1])state_s[i] = 1state_s[i+1] = 1print("正在为您作答,第"+str(i)+"、"+str(i+1)+"题答案为"+choice_upper+"  "+choice_lower)if i == 13:continue_or_not = Falsebreakprint("——————————————————")for i in state_s:if state_s[i]:print("第"+str(i)+"题已答")else:print("第"+str(i)+"题未答")print("——————————————————")if not continue_or_not:breaktime.sleep(30)

PrintScreen.py, OCR.py, main.py及answer.json要保存在一个路径下
我把PrintScreen.py, OCR.py, main.py及answer.json(实例)打包好放在了一个rar里,下载地址:https://asahina.oss-cn-beijing.aliyuncs.com/AutoTingShuo.rar

运行指南【重要,必看】
由于这个某学网软件不简单,正常地运行main.py无法达到预期效果,必须在管理员权限下运行,具体方法如下:
以管理员身份运行CMD


输入如下指令:
cd <main.py所在的文件夹的路径>
如图(举例)

然后输入如下指令:
python main.py

按回车后程序就开始运行了

最后欢迎大家在评论区中提供题的答案,毕竟本程序运行的前提是知道题的答案

最后声明: 本程序的主要目的是为大家节省时间,本人还没有能力写出能够直接做出答案的程序,非常抱歉,但我会不断学习,尽量完善自己的代码

感谢大家的支持

让Python自动完成某学网听说第一、二大题(old)相关推荐

  1. python自动发邮件 百度网盘_python自动保存百度盘资源到百度盘中的实例代码

    本实例的实现逻辑是,应用selenium UI自动化登录百度盘,读取存储百度分享地址和提取码的txt文档,打开百度盘分享地址,填入提取码,然后保存到指定的目录中 全部代码如下: # -*-coding ...

  2. python自动截图保存(网课利器)

    最近线上报告太多,老师要求我对会议ppt进行截图.手动截图很耗时,保存命名也比较麻烦.有时候刚打开截图,那一页就跳过去了--所以想到用python编写一个自动截图保存的程序,这样就能安心听报告啦. 库 ...

  3. Python自动抢票神器,GitHub热榜第一!

    车栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI 想要十一回家的小伙伴们,大概刚刚经历了一波抢票大战. 顺便把一个Python抢票工具,送到了GitHub趋势榜第一: 项目名很干脆,就是 ...

  4. Python 数据采集-爬取学校官网新闻标题与链接(基础)

    Python 爬虫爬取学校官网新闻标题与链接 一.前言 二.扩展库简要介绍 01 urllib 库 (1)urllib.request.urlopen() 02 BeautifulSoup 库 (1) ...

  5. python资料百度网盘-python自动保存百度盘资源到百度盘中的实例代码

    本实例的实现逻辑是,应用selenium UI自动化登录百度盘,读取存储百度分享地址和提取码的txt文档,打开百度盘分享地址,填入提取码,然后保存到指定的目录中 全部代码如下: # -*-coding ...

  6. appium python自动测试 百度网盘_S35 移动App Appium自动化测试教程Appium+Python 百度云...

    Python视频教程名称:移动App Appium自动化测试教程Appium+Python  Python视频教程 [IT视频教程网] it教程 ( l  w1 F: L" `, v 2 c ...

  7. 利用Python自动在CDDIS上下载GNSS数据(观测值、广播星历,电离层格网数据)

    在CDDIS上下载GNSS数据 自动下载电离层格网文件 效果图 自动下载观测值O文件 效果图 自动下载星历n文件 效果图 我们在做GNSS数据处理和分析的时候,难免会用到很多天甚至几年的GNSS数据, ...

  8. Python 数据采集-爬取学校官网新闻标题与链接(进阶)

    Python 爬虫爬取学校官网新闻标题与链接(进阶) 前言 一.拼接路径 二.存储 三.读取翻页数据 四.完整代码展示 五.小结 前言 ⭐ 本文基于学校的课程内容进行总结,所爬取的数据均为学习使用,请 ...

  9. 陪学网产品经理线下活动圆满成功,我们相约下一次!

    8月27日,由陪学网举办的线下产品交流会圆满成功啦! 本次活动主题是"产品新人,以洪荒之力助你技能提升"邀请了Andy老师登台分享! (andy老师介绍:高级产品经理.培训讲师.项 ...

最新文章

  1. VVOL、VASA — 为什么如此重要
  2. 【超级经典】程序员装B指南(转)
  3. IOS之学习笔记四(类的实现和对象和id)
  4. mysql时间模糊查询_mysql中那些根据时间查询的sql语句
  5. Gson实现自定义解析json格式
  6. 《Windows Mobile平台应用与开发》写作工作顺利进行中
  7. netsuite和java_Netsuite - 如何根据项目和位置搜索填充子列表
  8. 进程、线程、协程基本概念理解
  9. Docker Toolbox下配置国内镜像源-阿里云加速器
  10. html5在线加密,HTML技巧——加密网页
  11. Oracle数据库实验报告六 PL/SQL基础
  12. Learning deep representations by mutual information estimation and maximization
  13. 思科模拟器叫什么_思科在过30年都证明了自己一直都是全球第一的网络公司
  14. TestNG-学习笔记
  15. 三层交换机动态路由配置
  16. 朱松纯教授:可解释性是人工智能获得人类信任的关键
  17. 狂飙高启兰好飒,你看狂飙了吗?
  18. 从CVPR 2021的论文看计算机视觉的现状
  19. 注销使用苹果登录的账号
  20. 公司企业小程序怎么开发自己的小程序

热门文章

  1. cpu核数和逻辑个数的区别_CPU逻辑核心数和物理核心数是什么意思?
  2. c语言程序设计机房机位预约系统,c语言课程设计 机房机位预定系统 绝对正确,附源代码.doc...
  3. 昨天写了这些骚代码,今天上班差点被同事揍了
  4. 阴阳师服务器位置,说说阴阳师游戏中的四大鬼区 斗技2500分就能进服务器前一百...
  5. maxpermsize java_关于java:-XX:MaxPermSize带有或不带有-XX:PermSize
  6. ChatGPT再度封号; 英伟达市值暴涨超2000亿美元
  7. Java实战:Robot脚本自动写博客
  8. 化合物在高通量筛选中的作用
  9. Win10黑屏卡死原因分析--罕见的内核pushlock死锁问题
  10. React合成事件(阻止冒泡stopImmediatePropagation)