pyautogui库简单实现的python刷课程序

2024-01-19 14:30:30 浏览数 (3)

前言

上了大学,各种要刷的课程接踵而来,于是为了不用一直等在屏幕前等着点下一节,有时间去更有效的学习,我用python写了一个非常简单的刷课程序(由于简单,肯定有一些局限,可以根据实际情况具体修改)

完整代码

代码语言:javascript复制
import pyautogui
import time
import cv2

pyautogui.click(2368, 30)

while True:
    pyautogui.click(903, 730)
    while True:
        if pyautogui.locateOnScreen("E:imagescreenshotz1.png", confidence=0.8):
            pyautogui.click(tuple(pyautogui.locateOnScreen("E:imagescreenshotz2.png", confidence=0.8)))
            pyautogui.moveTo(1636, 597)
            time.sleep(1)
            pyautogui.scroll(-1000)
            time.sleep(1)
            pyautogui.click(tuple(pyautogui.locateOnScreen("E:imagescreenshotz2.png", confidence=0.8)))
            break

具体介绍

安装所需库

首先导入所需要的库,注意这里的cv2原始库名称不是这个,可以去命令行输入以下命令下载:

代码语言:javascript复制
pip install opencv-python

控制鼠标

安装好所有所需库后,我们具体介绍代码:

pyautogui.click(x, y),这行代码的作用是鼠标移动到给定的坐标并点击,我这里就是运行代码后鼠标点击右上方缩小化我的编辑器

那么怎样获取鼠标位置呢,pyautogui库有一个函数pyautogui.position(),这个函数可以返回当前鼠标所在位置,于是我们可以这样:

代码语言:javascript复制
import pyautogui
import time


time.sleep(2)
print(pyautogui.position())

运行上述代码,time.sleep(2)先给我们2秒的缓冲时间,这时我们把鼠标移动到缩小键的位置后,程序运行结束就能知道相应位置了。

获取其他位置的方法,如视频播放,视频跳转按钮方法类似,我们只需要先缩小编辑器,然后移动鼠标到相应位置,等一下之后回到编辑器就能得到相应坐标了:

代码语言:javascript复制
import pyautogui
import time

pyautogui.click(2368, 30)
time.sleep(2)
print(pyautogui.position())

脚本逻辑

接下来我们要弄清逻辑,我们需要播放视频,还有检测视频是否已结束,结束后我们还要跳转到下一个视频,怎么实现呢,这几步的关键是pyautogui.locateOnScreen()函数,它会识别某图像是否在屏幕上,如果在,返回它的位置,注意,该函数的返回值不是标准类型,我们使用tuple()函数将它转换为元组,再结合pyautogui.click()函数实现"识别到这个图像然后点击"的功能,即这行代码:

代码语言:javascript复制
pyautogui.click(tuple(pyautogui.locateOnScreen("E:imagescreenshotz2.png", confidence=0.8)))

pyautogui.locateOnScreen()函数需要一个图片文件路径参数,而confidence参数是安装了cv2库才能使用的,功能是"模糊识别度",因为可能由于分辨率的原因电脑识别不了图像,因为locateOnScreen()函数需要两个完全一样的图片才能识别,这时我们可以借助confidence使电脑模糊判别,即相似就能检测到,confidence参数的值即为这个"相似度"。

言归正传,在我的网课网站中,课程结束后会有"已完成"的标志,我将这个图片截取下来作为判别的标志,即

代码语言:javascript复制
if pyautogui.locateOnScreen("E:imagescreenshotz1.png", confidence=0.8):

如果检测到了,我会点击"下一节",由于我点击下一节会跳转到章节测验,于是我要点击两次,如果需要滑动鼠标,比如我跳转到章节测验后,要滑动鼠标才能找到"下一节"按钮,我们可以使用pyautogui.scroll()函数来滑动鼠标,参数即为滑动的方向和距离,正数向上滑,负数相反。

补充:time.sleep()函数是做缓冲用,防止程序点击切换太快导致出错(亲身经历)

于是下列代码实现了:1.点击播放

2.播放结束后跳转

3.继续播放

如此就实现了循环功能,晚上挂着,早上就刷完啦(虽然晚上插电不安全......)

建议刷课的时候去做别的事,但是人在电源旁边。

代码语言:javascript复制
while True:
    pyautogui.click(903, 730)
    while True:
        if pyautogui.locateOnScreen("E:imagescreenshotz1.png", confidence=0.8):
            pyautogui.click(tuple(pyautogui.locateOnScreen("E:imagescreenshotz2.png", confidence=0.8)))
            pyautogui.moveTo(1636, 597)
            time.sleep(1)
            pyautogui.scroll(-1000)
            time.sleep(1)
            pyautogui.click(tuple(pyautogui.locateOnScreen("E:imagescreenshotz2.png", confidence=0.8)))
            break

总结

以上就是全部内容了,当然那种会刷着刷着跳题的课程这个不适用,由于这学期已经没课了,下个学期再说吧hh,不过知道原理了你们自己也可以尝试开发出来。

有问题欢迎提问,有错误欢迎指正,共勉。

0 人点赞