让Python自动完成某学网听说第一、二大题(old)
让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"}
现在进入正题
本程序是利用模拟操作实现的,要求在运行期间让某学网窗口最大化且保持在最前端,过程中不要关闭程序
这个程序的原理大体是:
每隔一段时间就重复如下操作
- 用win32con, win32gui, pillow等包实现对某学网窗口进行截屏
- 用OCR API识别这个截屏的文字内容以判定题号
- 根据提供的答案对正确的选项进行模拟鼠标点击操作
首先,把所有要用到的模块都安装上,以下是所需要的模块或包:
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)相关推荐
- python自动发邮件 百度网盘_python自动保存百度盘资源到百度盘中的实例代码
本实例的实现逻辑是,应用selenium UI自动化登录百度盘,读取存储百度分享地址和提取码的txt文档,打开百度盘分享地址,填入提取码,然后保存到指定的目录中 全部代码如下: # -*-coding ...
- python自动截图保存(网课利器)
最近线上报告太多,老师要求我对会议ppt进行截图.手动截图很耗时,保存命名也比较麻烦.有时候刚打开截图,那一页就跳过去了--所以想到用python编写一个自动截图保存的程序,这样就能安心听报告啦. 库 ...
- Python自动抢票神器,GitHub热榜第一!
车栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAI 想要十一回家的小伙伴们,大概刚刚经历了一波抢票大战. 顺便把一个Python抢票工具,送到了GitHub趋势榜第一: 项目名很干脆,就是 ...
- Python 数据采集-爬取学校官网新闻标题与链接(基础)
Python 爬虫爬取学校官网新闻标题与链接 一.前言 二.扩展库简要介绍 01 urllib 库 (1)urllib.request.urlopen() 02 BeautifulSoup 库 (1) ...
- python资料百度网盘-python自动保存百度盘资源到百度盘中的实例代码
本实例的实现逻辑是,应用selenium UI自动化登录百度盘,读取存储百度分享地址和提取码的txt文档,打开百度盘分享地址,填入提取码,然后保存到指定的目录中 全部代码如下: # -*-coding ...
- appium python自动测试 百度网盘_S35 移动App Appium自动化测试教程Appium+Python 百度云...
Python视频教程名称:移动App Appium自动化测试教程Appium+Python Python视频教程 [IT视频教程网] it教程 ( l w1 F: L" `, v 2 c ...
- 利用Python自动在CDDIS上下载GNSS数据(观测值、广播星历,电离层格网数据)
在CDDIS上下载GNSS数据 自动下载电离层格网文件 效果图 自动下载观测值O文件 效果图 自动下载星历n文件 效果图 我们在做GNSS数据处理和分析的时候,难免会用到很多天甚至几年的GNSS数据, ...
- Python 数据采集-爬取学校官网新闻标题与链接(进阶)
Python 爬虫爬取学校官网新闻标题与链接(进阶) 前言 一.拼接路径 二.存储 三.读取翻页数据 四.完整代码展示 五.小结 前言 ⭐ 本文基于学校的课程内容进行总结,所爬取的数据均为学习使用,请 ...
- 陪学网产品经理线下活动圆满成功,我们相约下一次!
8月27日,由陪学网举办的线下产品交流会圆满成功啦! 本次活动主题是"产品新人,以洪荒之力助你技能提升"邀请了Andy老师登台分享! (andy老师介绍:高级产品经理.培训讲师.项 ...
最新文章
- VVOL、VASA — 为什么如此重要
- 【超级经典】程序员装B指南(转)
- IOS之学习笔记四(类的实现和对象和id)
- mysql时间模糊查询_mysql中那些根据时间查询的sql语句
- Gson实现自定义解析json格式
- 《Windows Mobile平台应用与开发》写作工作顺利进行中
- netsuite和java_Netsuite - 如何根据项目和位置搜索填充子列表
- 进程、线程、协程基本概念理解
- Docker Toolbox下配置国内镜像源-阿里云加速器
- html5在线加密,HTML技巧——加密网页
- Oracle数据库实验报告六 PL/SQL基础
- Learning deep representations by mutual information estimation and maximization
- 思科模拟器叫什么_思科在过30年都证明了自己一直都是全球第一的网络公司
- TestNG-学习笔记
- 三层交换机动态路由配置
- 朱松纯教授:可解释性是人工智能获得人类信任的关键
- 狂飙高启兰好飒,你看狂飙了吗?
- 从CVPR 2021的论文看计算机视觉的现状
- 注销使用苹果登录的账号
- 公司企业小程序怎么开发自己的小程序
热门文章
- cpu核数和逻辑个数的区别_CPU逻辑核心数和物理核心数是什么意思?
- c语言程序设计机房机位预约系统,c语言课程设计 机房机位预定系统 绝对正确,附源代码.doc...
- 昨天写了这些骚代码,今天上班差点被同事揍了
- 阴阳师服务器位置,说说阴阳师游戏中的四大鬼区 斗技2500分就能进服务器前一百...
- maxpermsize java_关于java:-XX:MaxPermSize带有或不带有-XX:PermSize
- ChatGPT再度封号; 英伟达市值暴涨超2000亿美元
- Java实战:Robot脚本自动写博客
- 化合物在高通量筛选中的作用
- Win10黑屏卡死原因分析--罕见的内核pushlock死锁问题
- React合成事件(阻止冒泡stopImmediatePropagation)