当前位置:首页 > 技术分析 > 正文内容

超星学习通自动签到 详细原理

ruisui882个月前 (03-03)技术分析64

近期在家无聊,又因为网课烦人,所以写了一系列网课相关的小工具,有兴趣的胖友可以多看看哦,这次先给大家带来超星学习通自动签到,再也不怕错过签到啦!


这篇文章可以让你做出自己的自动签到小程序,我会尽力讲解详细的


如下图是完整的程序流程



打开抓包软件在登陆界面执行完整的登录流程即可获得所需的接口



创建二维码

https://passport2.chaoxing.com/createqr

获取扫描状态

https://passport2.chaoxing.com/getauthstatus


在签到过程中最基本的就是用户的Cookie,相当于用户的身份证,在最初写的python版本中,我直接将Cookie作为参数保存在代码中,缺点是Cookie需要自己抓包获取,比较麻烦。

为了方便使用,划分了一个登陆模块,可以使用账号和密码登录接口,也可以使用二维码登录,这里详细的说明一下二维码登录流程

  1. 生成uuid(通用唯一识别码),简单来说就是一串随机的字符串,网上有很多在线接口可以生成,也可以自己写程序实现
  2. createqr生成登录二维码
  3. 按固定间隔访问状态API即可获取二维码状态信息,状态分为【未登录】【已扫描】【取消扫描】【验证通过】【已过期】,每种状态都有自己ID,所以很好判断,当状态为【验证通过】的时候,在API的返回Cookie即为用户登录成功的Cookie,保存下来
  4. 在下次启动软件的时候读取Cookie,判断是否过期,若没有过期就进入主界面,否则重新登录



然后就是自动签到的流程了

这里用到的API是在APP下执行完整的签到流程获取的(因篇幅原因,参数都忽略)

获取课程列表

http://mooc-api.chaoxing.com/mycourse/backclazzdata

获取活动列表

https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist

签到

https://mobilelearn.chaoxing.com/pptSign/stuSignajax

【流程】

整体的流程简单的概括就是一个时钟,按一定频率获取课程下的活动列表,如果发现未签到的任务就执行签到

【信息模块】

在用户登录后,首先获取所有课程,由用户选定要监控的课程后,将课程的id传入到下一个模块,启动时钟开始获取活动列表,如果判断到typeid=2,状态id=1即为未签到活动,然后执行签到

【签到模块】

签到模块需要的参数有【activeId】【uid】,用户id在登录时可以获取,活动id在上面活动列表中间接获取,在活动列表中有一个key是活动的url,在url中即可看到【activeId】,分离出来即可作为参数



原理很简单,有兴趣大家也可以自己实现一下,如果大家想学习,我还是推荐看看python的代码,我会把用到的API和python代码打包发布,(python代码没有加登陆模块,有能力的的可以自己实现一下),以下是核心的代码

def taskactivelist(courseId,classId):
    global activeList
    url="https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist?courseId="+str(courseId)+"&classId="+str(classId)+"&uid="+uid
    res=requests.get(url,headers=headers)
    data=json.loads(res.text)
    activeList=data['activeList']
    #print(activeList)
    for item in activeList:
        if("nameTwo" not in item):
            continue
        if(item['activeType']==2 and item['status']==1):
            signurl=item['url']
            aid = getvar(signurl)
            if(aid not in activates):
                print("【签到】查询到待签到活动 活动名称:%s 活动状态:%s 活动时间:%s aid:%s"%(item['nameOne'],item['nameTwo'],item['nameFour'],aid))
                sign(aid,uid)   

def sign(aid,uid):
    global status,activates
    url="https://mobilelearn.chaoxing.com/pptSign/stuSignajax?activeId="+aid+"&uid="+uid+"&clientip=&latitude=-1&longitude=-1&appType=15&fid=0"
    res=requests.get(url,headers=headers)
    if(res.text=="success"):
        print("用户:"+uid+" 签到成功!")
        activates.append(aid)
        status=2
    else:
        print("签到失败")  
        activates.append(aid)  

理解清楚上述原理以后,不管使用什么语言相信都可以制作出自己的自动签到工具!

自力更生!不怕网课 哈哈哈

如果只是想用一下成品,那也是欢迎的啦

在公众号回复【学习通】即可获取


扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2449.html

分享给朋友:

“超星学习通自动签到 详细原理” 的相关文章

亚马逊推出 Amazon Linux 2023 发行版,专为 AWS 云进行优化

稿源:IT之家3 月 19 日消息,本周早些时候,亚马逊宣布推出其第三代 Linux 发行版 Amazon Linux 2023(AL2023)。亚马逊表示,该版本将带来高安全性标准、可预测的生命周期和确定性更新。Amazon Linux 2023 针对 Amazon EC2 进行了优化,与最新的...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

《暗黑破坏神 2:重制版》PC 版 2.3 版本发布,支持英伟达 DLSS

IT之家 12 月 3 日消息,暴雪为《暗黑破坏神 2:重制版》PC 版发布了更新 2.3 版本,添加了“离线难度缩放”滑块(玩家可以在单人游戏时增加挑战和奖励的级别)、多项辅助功能和用户界面改进,以及英伟达 DLSS 支持。玩法改进:玩家现在可以在离线游戏的选项菜单中使用“游戏难度等级”,它提供与...

Vue进阶(幺叁捌):vue路由传参的几种基本方式

1、动态路由(页面刷新数据不丢失)methods:{ insurance(id) { //直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/particulars/${id}`,...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...

深入理解vue-router原理

说到vue-router就表明他只适合于vue和vue是强绑定的关系;不适合其他框架;现在我们模仿实现一个VueRouter;1.要使页面刷新;借助vue本身的响应式原理;import Home from "./views/Home"; import About from "...