基于python实现网络课程秒刷 |
您所在的位置:网站首页 › mooc刷不完 › 基于python实现网络课程秒刷 |
在平时的工作生活中,我们总是会遇到一些需要网络课程的学习,最常见的就像驾校的网络课程学习,党员课程学习,工作技能网络学习等。如下图所示,这是公司内部的一个党员学习互动平台,该平台每个月都有一定的学习任务。 该平台学习方式有两种,视频学习与文档学习。而对于我们“懒惰”的程序员而言,这种耗时的操作总想省去,于是乎有了脚本秒刷课程的想法。下面分享下秒刷过程。 首先就是需要破解平台的登录。 通过fiddler抓取登录时的数据包,我们可以知道登录密码是经过加密的,因此第一步就是要知道加密方式,并通过python模拟该过程。 在浏览器中通过F12=>Sources=>Page底下发现一个js脚本,该脚本包含了加密方式。如下图所示: 通过该脚本,我们可以知道该加密方式为RSA加密,且可以得到RSA公钥中的n和e的值,同时,通过代码可以知道,该加密还有带上时间戳,因此可以在python下的模拟加密过程为: 破解了登录后,就可以能很容易的通过python登录成功。如下图所示: 在登录成功返回的数据中,我们可以得到一个AccessToken字段,该字段在后面的每个请求中都是必须带上的参数。 接着就是获取个人学习任务,该过程比较容易,只要通过抓包就能很轻易的模拟出来。获取个人学习任务后,需要过滤出未学习完成的月份任务。通过返回的json数据可以得到相应的月份。如下图所示,1为100%完成,0为还未开始学习,通过程序过滤出FinishPencent不为1的月份即可。 在每个月份的学习任务中还细分多个专题系列,每个专题系列里面还有不同章节,不同章节下有对应的视频或者文档。如下图: 通过对视频播放抓包可以得到下面信息,如图所示: 初步分析可以知道每个字段的含义和由来,其中videoId为视频ID,vs为视频播放进度,record为当前视频播放进度的一个记录信息,该字段由服务端返回;terminalType与version为固定的,无需深究;accessToken为登录时得到的字段。那么现在需要分析的是vs是如何组成的。 通过对比与研究网页源码发现,vs="v" + 视频id+ "u" + 课程id+ "i" + 播放的开始时间+ "c" + 播放的结束时间。其中播放的结束时间需要注意的是,原本的一个196秒视频,但是在这边为1969,多出来的一位是需要计算的,该计算方式为,视频id编号+课程id编号+视频时长,取该计算结果的最后一位,即177991+24902+196为9,那么结束时间就是1969。因此,我们只要模拟这个过程,向服务器发送每个视频的播放结束时间,服务器就会认为我们完成该视频的学习,便会把我们学习进度直接改为100%。 到此,视频的学习基本算搞定了,文档的学习流程基本与视频一致,这里不做详细介绍,下面分享整个脚本的代码。 欢迎关注我个人的公众号
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |