基于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%。

        到此,视频的学习基本算搞定了,文档的学习流程基本与视频一致,这里不做详细介绍,下面分享整个脚本的代码。

欢迎关注我个人的公众号

 

发布了10 篇原创文章 · 获赞 5 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览