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

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

ruisui883个月前 (03-03)技术分析69

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


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


如下图是完整的程序流程



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



创建二维码

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

分享给朋友:

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

深入理解Vue.js组件通信:父子组件与子父组件数据交互详解

什么是Vue组件通讯 Vue.js 组件通信是指在 Vue 应用的不同组件之间进行数据交换和状态同步的过程。由于 Vue 的组件是基于单文件组件(SFCs)的模块化设计,每个组件都有自己的作用域,因此它们不能直接访问彼此的数据。为了使组件之间能够协同工作,Vue 提供了几种不同的通信方式。以下是 V...

gitlab 分支保护设置

一、功能描述代码管理中管理,我们把稳定的分支设置为保护,可以防止其他人员误操作(例如删除,合并,推送代码等)。二、Gitlab配置步骤1 点击项目Repository标签2.点击Expand标签3.配置如下:默认master是被保护的,而且只有维护人员具有推送和合并权限。设置保护分支,这里的beta...

K8s里我的容器到底用了多少内存?

作者:frostchen导语 Linux下开发者习惯在物理机或者虚拟机环境下使用top和free等命令查看机器和进程的内存使用量,近年来越来越多的应用服务完成了微服务容器化改造,过去查看、监控和定位内存使用量的方法似乎时常不太奏效。如果你的应用程序刚刚迁移到K8s中,经常被诸如以下问题所困扰:容器的...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...

微信外H5跳转小程序——组件(vue项目)

场景有个H5(vue项目),需要实现点击商品item跳转到小程序,微信内和微信外都要支持,这里我们只介绍一下H5在微信外的跳转。如图所示,红框内是一个商品,就是点击这里,要跳转小程序:配置微信小程序云开发(云函数)1、开通云开发然后选择免费额度2、云开发权限设置找到权限设置,把这里的「未登录用户访问...

慕课 SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

本课程以业务驱动技术栈,打造业务相对完整的掌上医疗小程序,解决大家没有好的毕设项目或者求职项目的困境。本课程案例采用前后端分离架构,业务功能完善(既有WEB管理端,也有移动用户端),界面美观,无需艰涩的技术也能做出亮眼的作品。SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序 |...