有朋友报名东方时尚,理论课选的网上教学,需要看完所有的视频才能算科目一培训完成,在很早之前就有朋友因为这个找过我。当时东方时尚的授课系统还很简单。。每次看完一个视频都会发起一个固定的请求,表示当前视频看完了。所以之前的做法很简单,把那个url在新标签页打开,每开一个视频,刷一下页面,就算看完一段视频了。。所以不用什么复杂操作,很容易就能完成。

不过现在,东方时尚的系统明显升级了,已经不是那么简单的逻辑了,每次请求一个新视频,都会有一个/start的请求,把视频id返回,后边每次心跳和看完视频的请求,都是以该id为参数。不能再像以前那么简单的玩耍了。。本来是想写个chrome的扩展来拦截请求做处理的,突然想到Fiddler的script就可以做这些,而且语法是.NET的,会比较熟:)。

做法也很简单,就是在OnBeforeResponse阶段,获取到body,正则匹配到需要的id,然后再发起一个请求:),多说无益,直接show code.

regex正则匹配内容。使用 utilIssueRequest 发起请求。

当然这里的做法简单了些,因为东方时尚的请求header里还使用了authToken认证,每次登录的token都不一样,这里直接写死了。

到这里就简单多了,每次打开视频就相当于播放完了,直接刷新就可以看下一集了。

下边图片就是效果,每次视频一start,就产生一个end的请求:)

当然也没这么简单。。它会把token放在localSotrage里,每次开始播放的时候会清掉,应该是等快结束的时候才放进去。。所以导致每次刷新页面都会需要重新登录,所以又要麻烦点,在浏览器的开发者工具里,每次刷新页面前,都set一下localStorage,就可以拉。。

视频是可以快速跳过了,但是每一章视频看完后都会有一个测验,要把三十道题目都回答正确才行。一看请求,每次请求问题的时候,答案也放在返回结果里了。。所以,很容易想到,答题完成其实也就是一个固定的请求而已。。硬着头皮答完了一次题,抓到了完成题目的请求,是一个 Practice/Finish?lessonId=1 这样的请求,每次只要改lessionId的值就好了, 很简单吧。。:)