在平时的工作生活中,我们总是会遇到一些需要网络课程的学习,最常见的就像驾校的网络课程学习,党员课程学习,工作技能网络学习等。如下图所示,这是公司内部的一个党员学习互动平台,该平台每个月都有一定的学习任务。
学习Python中有不明白推荐加入交流群
号:960410445
群里有志同道合的小伙伴,互帮互助,
群里有不错的视频学习教程和PDF!
该平台学习方式有两种,视频学习与文档学习。而对于我们“懒惰”的程序员而言,这种耗时的操作总想省去,于是乎有了脚本秒刷课程的想法。下面分享下秒刷过程。
首先就是需要破解平台的登录。
通过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%。
到此,视频的学习基本算搞定了,文档的学习流程基本与视频一致,这里不做详细介绍,下面分享整个脚本的代码。
收藏
举报
0 条评论
评论
相关推荐