有没有大佬知道刷课平台的运行机制? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
devzhi
V2EX    问与答

有没有大佬知道刷课平台的运行机制?

  •  
  •   devzhi 2020 年 2 月 17 日 4647 次点击
    这是一个创建于 2216 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单来讲就是用户在 web 端提交账号密码等信息,服务器自动登录对应的学习平台自动刷课。

    我比较想了解的是服务器怎么做到登录对应平台刷课的,想到了利用 selenium 实现,但是这样不是太耗内存了?有没有更好的方式?

    先谢谢各位大佬了
    2 条回复    2020-02-17 19:39:29 +08:00
    imdong
        1
    imdong  
       2020 年 2 月 17 日   2
    曾经写过 优课在线 的挂机刷视频的。
    https://greasyfork.org/zh-CN/scripts/40463-%E4%BC%98%E8%AF%BE%E5%9C%A8%E7%BA%BF%E8%BE%85%E5%8A%A9%E8%84%9A%E6%9C%AC

    简单说下原理,我们要先知道平台是如何确定你看视频看到哪里了。

    一切都是基于客户端的,首先一个人打开页面播放视频,会去加载视频的源文件(m3u8 等)回来。

    然后播放过程中,要禁止用户后台(失去焦点暂停),然后等用户观看完毕以后,向后台发送观看完毕的消息。

    如果中间有退出,也应该向服务器提交当前的观看进度。

    那么,刷课的方法就很简单了,只要我们提交观看完毕的数据即可。

    当然,这个平台也会想到了,你打开就马上看完肯定不合理。

    所以会有一个延迟,从你打开页面到一定时间后(视屏时长)才可以提交观看完毕。

    下面说一下我这个脚本的原理(客户端):

    优课在线在观看视频过程中,每隔一段时间提交心跳(当前进度)。

    如果速度过快,就会拒绝,而提交了视频时长的 90%左右时,如果你表示自己看完了,服务器也会允许。

    而我之前的做法就是,加载视频,获取视时间长度,每隔 10 秒,提交已经观看 12 秒的心跳包。

    如果再快,服务器就会拒绝,然后如果看到了一定进度后,服务器会在心跳包返回已完成标记,这时自动获取下一集。

    而如果做成脱机的,托管在服务器上简直不要太简单。

    估计百十行代码就能搞定。
    bwt
        2
    bwt  
       2020 年 2 月 17 日 via Android
    @imdong 高手
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2859 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:18 PVG 21:18 LAX 06:18 JFK 09:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86