学习通的视频任务一直让人感到烦恼,挂在身边刷课需要刷完手动点下一个视频,往往在旁边玩耍时经常忘了点导致时间浪费,更有离谱的课程中途还会设置练习题防止你不听课,这时何不自己写个Python脚本来解放双手,让程序帮你刷课呢?希望我的文章能够帮助到你!
我这里使用的是window系统
一、首先下载需要用到的工具库
库 | 在cmd中输入命令 | 作用 |
pyautogui | pip install pyautogui | 控制鼠标键盘 |
opencv-pyghon | pip install opencv-pyghon | 识别检测图片 |
二、代码的编写
其中详细的语法是怎么使用的我这里就不多bb了,网上详细的
pyautogui.locateOnScreen 、pyautogui.click
等语句的用法文章比比皆是,讲得生动而又详细,话不多说,直接开始将代码
首先是实现识别图片并点击的操作
这里需要注意的是
因为pyautogui.locateOnScreen在使用时找不到图片通常会返回none而不是False,如果有的小伙伴直接使用
很大可能会导致程序到不到图片后直接出现报错信息导致程序中断运行。所有尽量将识别点击图片的操作写成一个函数来进行调用而不是直接if-else进行判断,第一是这样写更清晰,第二是我们在后面程序会经常用到该操作,防止重复书写。
接下来就是函数的主题部分了
大部分地方我都写了注释,应该比较好看懂。
其中的关键图片:
到这里学习视频中突然跳出的单选题和判断题都可以过了,一般视频中途的题目不计入分数的起可以一直回答到正确答案为止,所有可以用脚本一个一个的试。
如果遇到多选就得多加上一个函数了。
这里要注意:
多选的判断一定要放在单选的判断之上不然程序就会先识别到A从而先进入单选的操作循环里了(这是因为是自己用所有我小偷懒了一下,如果你们把单选的图片识别判断放上去的话就可以忽略这个操作)
最后最后就是完整的代码:
import pyautogui
import time
pyautogui.click(2381, 27) # 鼠标点击(2381,27)坐标位置,(将pycharm最小化)
def click_image(image_path, confidence=0.9):
try:
# 尝试在屏幕上定位指定的图像
image_location = pyautogui.locateOnScreen(image_path, confidence=confidence)
# 如果找到了图像位置
if image_location:
# 点击图像所在位置
pyautogui.click(image_location)
return True
else:
# 如果未找到图像,则返回 False
return False
except pyautogui.ImageNotFoundException:
# 如果图像未找到,则捕获 ImageNotFoundException 异常并返回 False
return False
def click_images_in_sequence(image_names_list):
for image_names in image_names_list:
for image_name in image_names:
time.sleep(0.6) # 进行0.6秒的延时
click_image(f"E:\\picture\\{image_name}.png")
click_image("E:\\picture\\tj.png")
if not click_image("E:\\picture\\hdcw.png"):
break
image_names_list = [['A', 'B', 'C', 'D'], ['A', 'B', 'C'], ['A', 'B'], ['A', 'C'], ['A', 'D'], ['B', 'C', 'D']
, ['B', 'C'], ['B', 'D'], ['C', 'D']]
time.sleep(1) # 进行1秒的延时
while True:
if click_image("E:\\picture\\z1.png"):
# 在 z1.png 图片位置进行鼠标点击或其他操作
pass
elif click_image("E:\\picture\\dxt.png"): # 当识别到多选题的字眼时
click_images_in_sequence(image_names_list)
elif click_image("E:\\picture\\A.png"): # 识别到视频中跳出有A选项的选择题
# 在 A.png 图片位置进行鼠标点击或其他操作
time.sleep(1) # 进行1秒的延时
click_image("E:\\picture\\tj.png") # 点击提交按钮
if click_image("E:\\picture\\hdcw.png"): # 判断是否有回答错误的图片出现
for option in ['B', 'C', 'D']: # 使用循环的方式对B、C、D选项进行提交,直到选出正确答案或是没有选项可以选。
if not click_image(f"E:\\picture\\{option}.png"):
break
time.sleep(1) # 进行1秒的延时
click_image("E:\\picture\\tj.png")
if not click_image("E:\\picture\\hdcw.png"):
break
elif click_image("E:\\picture\\z2.png"): # 识别到任务点已完成的图片
time.sleep(1) # 进行1秒的延时
pyautogui.scroll(-1000) # 鼠标向下滚动1000个单位
time.sleep(1)
click_image(r"E:\\picture\\z3.png") # 点击下一步
elif click_image("E:\\picture\\bf.png"): # 中途视频意外暂停时对播放按钮进行点击
click_image("E:\\picture\\bf.png")
elif click_image(r"E:\\picture\\zjjc.png"): # 到章末的章节检测时停止,自己进行答题,没有就可以重头刷到尾。
break
else:
continue
三、注意事项:
1、要使用window自带的截图工具,不然有可能识别不了图片。
2、路径最好使用\\,而且最好不要用带有中文的路径或者中文图片命名,有可能会导致图片识别不了。
3、confidence=0.9这个参数可以调节识别图片时的模糊度,最高为1,为1时代表需要识别的图片与你所截的图片一模一样,但是大部分截图都是有些许噪点的,所以尽量给一些相似模糊度,这样程序就更容易识别到该图片是否在你的屏幕上,0.7、0.8、0.9都不错。
4、在点击操作之间适当加一些延时,例如: time.sleep(1) # 进行1秒的延时 不然程序有可能因为鼠标操作过快而出现错误。
5、图片文件尽量不要存放在C盘里,有可能会因为程序权限不足而无法调用图片,显示找不到该路径下的图片。
6、该代码全是自己写的,可能有不足之处,但运行肯定是没什么问题的,只需根据自身需要稍作修改就行,不仅仅只限与学习通,需要自动办公的地方都可以适当使用。
最后如果该文章对你有帮助的话麻烦动动手指帮忙点点赞,谢谢各位了!
如有不足之处也欢迎指正,共勉!
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/XianghaoT2002/article/details/137199885