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创建声明性迷你语言的教程
Apr 13 Python
Python中atexit模块的基本使用示例
Jul 08 Python
python append、extend与insert的区别
Oct 13 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
python学习基础之循环import及import过程
Apr 22 Python
Linux下python制作名片示例
Jul 20 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
Python @property原理解析和用法实例
Feb 11 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
python中有函数重载吗
May 28 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往windows中添加用户
2006/12/06 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
使用python统计文件行数示例分享
2014/02/21 Python
python中Genarator函数用法分析
2015/04/08 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
理解python正则表达式
2016/01/15 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python简单操作excle的方法
2018/09/12 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python中一些深不见底的“坑”
2019/06/12 Python
django的model操作汇整详解
2019/07/26 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
软件测试面试题
2015/10/21 面试题
师范学院毕业生求职信范文
2013/12/26 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
年会活动策划方案
2014/01/23 职场文书
股东出资协议书
2016/03/21 职场文书