基于Python由刷课发展出的自动化脚本技术

前言

Hely在去年下半个月买了某个网校的日语课程为期一年半。然后在12月的时候过了N2课程。由于把所有的课程刷完的话可以返还学费来交下一个课程的学费,所以需要一定的技术把剩下一半的课程全部刷完。

所有的课程在大年初一前刷完。现在总结一下所需要的技术以及简要代码。

刷课逻辑

  • 课程简述:课程是类似PPT课件的播放器形式,具有以下功能:播放课件;自动暂停播放用于学生思考当前课件的题目;进入答题模式进行答题;课时完成提醒;选择下一堂课。
  • 刷课逻辑:进入课程之后开始刷课。当课程暂停的时候需要自动进行播放;当进入答题模式的时候需要自动跳过答题;当课程完成的时候需要自动切换下一个课程。

技术演示

截图获取像素信息

刷题需要对整个课程播放器进行监控。思路是每隔三秒钟对整个屏幕进行截图,根据特定的像素点的色素变化判断当前的课程状态。使用PIL库来进行截图等一系列操作。

如播放器中间底部是播放按钮,在暂停的时候会变成暂停标志,在答题的时候会变成答题标志(实际上是整个画面消失而且变为更灰的底色)。所以用这个点作为状态的判断是非常合理的。

import PIL
playButton = (960,860) ##playButton像素位置设置
im = PIL.ImageGrab.grab()## 截图
im1 = im.convert('RGB').getpixel(playButton)##对playButton这个特定像素点获取色素信息

这样就可以获取im1播放按钮点的色素了。通过简单的判断就可以推断当前的状态。

鼠标移动点击

在获取当前的状态之后会进行自动化的操作。如确定当前是暂停状态后会点击播放器的播放按钮。在确定当前是答题状态后会点击跳过按钮。

import pyautogui
pyautogui.click(scrollStartPoint) # 点击某个像素点
pyautogui.moveTo(scrollSecondPoint)# 移动到某个像素点

鼠标滚轮

在检测到课程结束后需要点击左上角的课程标题,然后出现课程的下拉选单,要做的是在之中滚动一个课件名,在最下方出现一个新的课程,然后单击最下方的课程进入新的课件播放。

import pyautogui
pyautogui.scroll(-30) #向下方滚动

需要注意的是例代码使用了下滚30个单位,这个是我所使用的播放器多次尝试后得到的下滚出现一个课件名的单位。其他课件播放器需要自行用笔记本尝试。

完整代码

这个是某个网校的播放器适用的代码。因为还没有返还学费,所以为了保险不说明学校名字。

import pyautogui
import PIL
import time
playButton = (960,860)
scrollStartPoint = (370,215)
scrollSecondPoint = (370,280)
scrollEndPoint = (370,570)
classOverPoint = (860,550)
classOverPoint2 = (770,423)
skipAnswer1 = (1450,815)
skipAnswer2 = (800,620)
while(1):
    time.sleep(3)
    im = PIL.ImageGrab.grab()
    im2 = im.convert('RGB').getpixel(classOverPoint)
    im1 = im.convert('RGB').getpixel(playButton)

    if (im2 == (255,137,56) or im2 == (255,227,206))and im1 == (255,255,255):# 当前课程完成
        pyautogui.click(scrollStartPoint)
        pyautogui.moveTo(scrollSecondPoint)
        pyautogui.scroll(-30)
        pyautogui.click(scrollEndPoint)
    elif im1 == (255,255,255) or im1 == (195,195,195):# 课程暂停时
        pyautogui.click(playButton)
        pyautogui.moveTo(660,100)
    elif im1 == (246,246,246):# 当前进入答题模式时
        pyautogui.click(skipAnswer1)
        time.sleep(0.5)
        pyautogui.click(skipAnswer2)

技术总结

由以上的技术基本可以对付大多数答题可以跳过的可见播放器。如果对播放的效率不满意还可以设置每个课题出现的时候自动化设置播放器的最大播放速度。甚至在上课的经验中可以知道每个课件至少播放多久算是刷上课时,然后等每个课件时间刷满自动切换到下一个课件。

其余自动化技术

其他在生活或工作中使用的自动化程序若是涉及到新的技术则添加到下方。用于便于查阅