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字典序问题实例
Sep 26 Python
python实现查询苹果手机维修进度
Mar 16 Python
Python实现读取文件最后n行的方法
Feb 23 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
python Pillow图像处理方法汇总
Oct 16 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
基于python实现检索标记敏感词并输出
May 07 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 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/10/09 PHP
也谈截取首页新闻 - 范例
2006/10/09 PHP
?繁体转换的class
2006/10/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
node后端服务保活的实现
2019/11/10 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
Python实现简单多线程任务队列
2016/02/27 Python
python实现发送邮件功能代码
2017/12/14 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
软件测试工程师面试问题精选
2016/10/28 面试题
省优秀教师事迹材料
2014/01/30 职场文书
班组建设经验交流材料
2014/05/12 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书