Python 实现网课实时监控自动签到、打卡功能


Posted in Python onMarch 12, 2020

响应国家停课不停学的号召,学生们都开始了网上授课,但由于课程繁多,消息繁杂,经常错过课堂签到,针对这一难题,博客主作为Python爱好者,完全使用Python语言写了本篇博客,希望能够帮助小伙伴们完成上课签到问题(注:只是帮你签到,而不是叫你代签,我的出发点是帮助记性不是很好的同学签到,防止漏签被老师点名),所以希望大家能理解博主的苦心。

Python 实现网课实时监控自动签到、打卡功能

话不多说,献上效果图两张

Python 实现网课实时监控自动签到、打卡功能
Python 实现网课实时监控自动签到、打卡功能

进入正式教程

①Python环境
Python3.6及以上版本,需要配备的库requests,json,time
代码运行软件:Pycharm

**

②手动登录

手动登录地址:http://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&rss=1

**

Python 实现网课实时监控自动签到、打卡功能

③Cookie获取
在签到过程中最基本的就是用户的Cookie,相当于用户的身份证,在最初写的Python版本中,我直接将我自己的Cookie作为参数保存在代码中,但是经过测试发现由于每个用户的Cookie不同所以后出现报错,所以辛苦小伙伴们手动获取个人Cookie,放入代码中,详细Cookie获取流程如下图所示
注:登录完成后右键审核元素,可以来到此页面

Python 实现网课实时监控自动签到、打卡功能

将自己的Cookie值copy放入如下代码

#填入Cookie
headers={
 "Cookie": "",
 "User-Agent": "Mozilla/5.0 (iPad; CPU OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 ChaoXingStudy/ChaoXingStudy_3_4.3.2_ios_phone_201911291130_27 (@Kalimdor)_11391565702936108810"
}

Cookie值放置好后,剩余代码不需要做修改,可直接使用,大家如果对代码有疑问或者好的建议可以随时评论区dd我
由于最近学习任务比较重,剩余的代码也不多做讲解,直接奉上,爱好编程的小伙伴可以自己思考一下流程
完整代码奉上(注:Cookie值自补)

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2020/3/5 13:19
# @Author : HaoXuan
# @Email : 879316712@qq.com
# @File : 超星学习通实时签到监控.py
# @Software: PyCharm
import requests
import json
import time

#填入Cookie
headers={
 "Cookie": "",
 "User-Agent": "Mozilla/5.0 (iPad; CPU OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 ChaoXingStudy/ChaoXingStudy_3_4.3.2_ios_phone_201911291130_27 (@Kalimdor)_11391565702936108810"
}
#填入uid
uid=""
coursedata=[]
activeList=[]
course_index=0
speed=10
status=0
status2=0
activates=[]
def backclazzdata():
 global coursedata
 url="http://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&rss=1"
 res=requests.get(url,headers=headers)
 cdata=json.loads(res.text)
 if(cdata['result']!=1):
  print("请补充Cookie否则课程列表获取失败")
  return 0
 for item in cdata['channelList']:
  if("course" not in item['content']):
   continue
  pushdata={}
  pushdata['courseid']=item['content']['course']['data'][0]['id']
  pushdata['name']=item['content']['course']['data'][0]['name']
  pushdata['imageurl']=item['content']['course']['data'][0]['imageurl']
  pushdata['classid']=item['content']['id']
  coursedata.append(pushdata)
 print("获取成功") 
 #print(coursedata) 
 printdata()

def printdata():
 global course_index,speed
 index=1
 for item in coursedata:
  print(str(index)+".课程名称:"+item['name'])
  index+=1
 course_index=int(input("请输入监控课程监控课程序号:"))-1
 print("监控课程设定完成")
 speed=int(input("请输入监控频率:")) #频率是监控的速度,一格10秒,适中选择就好
 print("监控频率设置完毕")
 res=input("输入666启动监控:")
 if(res=="start"):
  startsign()
 else:
  printdata 

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 getvar(url):
 var1 = url.split("&")
 for var in var1:
  var2 = var.split("=")
  if(var2[0]=="activePrimaryId"):
   return var2[1]
 return "ccc" 

 

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) 

def startsign():
 global status,status2
 status=1
 status2=1
 ind=1
 print("监控启动 监控课程为:%s 监控频率为:%s"%(coursedata[course_index]['name'],str(speed)))
 while(status!=0 and status2!=0):
  ind+=1
  taskactivelist(coursedata[course_index]['courseid'],coursedata[course_index]['classid'])
  time.sleep(speed)
  if(status==1):
   print(str(ind)+" [签到]监控运行中,未查询到签到活动")
  elif(status==2):
   print(str(ind)+" [新签到]监控运行中,未查询到签到活动")   
 print("任务结束")
 printdata()

backclazzdata()

原理很简单,有兴趣大家也可以自己动手实现一下,如果大家想学习,可以细读一次Python的代码,有兴趣的可以私信我,我将用到的API和python代码打包发给你(Python代码没有加登陆模块,有能力的的可以自己实现一下)
谢谢大家!

Python 实现网课实时监控自动签到、打卡功能

最后,说一下这个自动实时监控签到一个软件只能监控一个课程,但是能多开实现多门课程监控
然后,本代码可以满足普通签到,收拾签到,位置签到(位置信息空白),不支持照片签到(希望又大牛可以解决这个问题)由于程序不完善,可能会提示失败但是如果点开学习通查询,是显示已经完成签到。

Python 实现网课实时监控自动签到、打卡功能

到此这篇关于Python 实现网课实时监控自动签到、打卡功能的文章就介绍到这了,更多相关Python 自动签到 打卡内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
Django对models里的objects的使用详解
Aug 17 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
python 生成任意形状的凸包图代码
Apr 16 Python
Python基于read(size)方法读取超大文件
Mar 12 #Python
Python函数生成器原理及使用详解
Mar 12 #Python
python deque模块简单使用代码实例
Mar 12 #Python
python中安装django模块的方法
Mar 12 #Python
python3 sorted 如何实现自定义排序标准
Mar 12 #Python
Python dict和defaultdict使用实例解析
Mar 12 #Python
Python数据结构dict常用操作代码实例
Mar 12 #Python
You might like
php类
2006/11/27 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php标签云的实现代码
2012/10/10 PHP
php过滤敏感词的示例
2014/03/31 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php无限级分类实现方法分析
2016/10/19 PHP
js打开新窗口方法整理
2014/02/17 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python实现视频下载功能
2017/03/14 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
python中使用np.delete()的实例方法
2021/02/01 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
高三生物教学反思
2014/01/25 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android