前言
上了大学,各种要刷的课程接踵而来,于是为了不用一直等在屏幕前等着点下一节,有时间去更有效的学习,我用python写了一个非常简单的刷课程序(由于简单,肯定有一些局限,可以根据实际情况具体修改)
完整代码
import pyautogui import time import cv2 pyautogui.click(2368, 30) while True: pyautogui.click(903, 730) while True: if pyautogui.locateOnScreen("E:\image\screenshot\z1.png", confidence=0.8): pyautogui.click(tuple(pyautogui.locateOnScreen("E:\image\screenshot\z2.png", confidence=0.8))) pyautogui.moveTo(1636, 597) time.sleep(1) pyautogui.scroll(-1000) time.sleep(1) pyautogui.click(tuple(pyautogui.locateOnScreen("E:\image\screenshot\z2.png", confidence=0.8))) break
具体介绍
安装所需库
首先导入所需要的库,注意这里的cv2原始库名称不是这个,可以去命令行输入以下命令下载:
pip install opencv-python
控制鼠标
安装好所有所需库后,我们具体介绍代码:
pyautogui.click(x, y),这行代码的作用是鼠标移动到给定的坐标并点击,我这里就是运行代码后鼠标点击右上方缩小化我的编辑器
那么怎样获取鼠标位置呢,pyautogui库有一个函数pyautogui.position(),这个函数可以返回当前鼠标所在位置,于是我们可以这样:
import pyautogui import time time.sleep(2) print(pyautogui.position())
运行上述代码,time.sleep(2)先给我们2秒的缓冲时间,这时我们把鼠标移动到缩小键的位置后,程序运行结束就能知道相应位置了。
获取其他位置的方法,如视频播放,视频跳转按钮方法类似,我们只需要先缩小编辑器,然后移动鼠标到相应位置,等一下之后回到编辑器就能得到相应坐标了:
import pyautogui import time pyautogui.click(2368, 30) time.sleep(2) print(pyautogui.position())
脚本逻辑
接下来我们要弄清逻辑,我们需要播放视频,还有检测视频是否已结束,结束后我们还要跳转到下一个视频,怎么实现呢,这几步的关键是pyautogui.locateOnScreen()函数,它会识别某图像是否在屏幕上,如果在,返回它的位置,注意,该函数的返回值不是标准类型,我们使用tuple()函数将它转换为元组,再结合pyautogui.click()函数实现"识别到这个图像然后点击"的功能,即这行代码:
pyautogui.click(tuple(pyautogui.locateOnScreen("E:\image\screenshot\z2.png", confidence=0.8)))
pyautogui.locateOnScreen()函数需要一个图片文件路径参数,而confidence参数是安装了cv2库才能使用的,功能是"模糊识别度",因为可能由于分辨率的原因电脑识别不了图像,因为locateOnScreen()函数需要两个完全一样的图片才能识别,这时我们可以借助confidence使电脑模糊判别,即相似就能检测到,confidence参数的值即为这个"相似度"。
言归正传,在我的网课网站中,课程结束后会有"已完成"的标志,我将这个图片截取下来作为判别的标志,即
if pyautogui.locateOnScreen("E:\image\screenshot\z1.png", confidence=0.8):
如果检测到了,我会点击"下一节",由于我点击下一节会跳转到章节测验,于是我要点击两次,如果需要滑动鼠标,比如我跳转到章节测验后,要滑动鼠标才能找到"下一节"按钮,我们可以使用pyautogui.scroll()函数来滑动鼠标,参数即为滑动的方向和距离,正数向上滑,负数相反。
补充:time.sleep()函数是做缓冲用,防止程序点击切换太快导致出错(亲身经历)
于是下列代码实现了:1.点击播放
2.播放结束后跳转
3.继续播放
如此就实现了循环功能,晚上挂着,早上就刷完啦(虽然晚上插电不安全......)
建议刷课的时候去做别的事,但是人在电源旁边。
while True: pyautogui.click(903, 730) while True: if pyautogui.locateOnScreen("E:\image\screenshot\z1.png", confidence=0.8): pyautogui.click(tuple(pyautogui.locateOnScreen("E:\image\screenshot\z2.png", confidence=0.8))) pyautogui.moveTo(1636, 597) time.sleep(1) pyautogui.scroll(-1000) time.sleep(1) pyautogui.click(tuple(pyautogui.locateOnScreen("E:\image\screenshot\z2.png", confidence=0.8))) break
总结
以上就是全部内容了,当然那种会刷着刷着跳题的课程这个不适用,由于这学期已经没课了,下个学期再说吧hh,不过知道原理了你们自己也可以尝试开发出来。
有问题欢迎提问,有错误欢迎指正,共勉。