- 填入网课签到时间段
- 填入学习通cookie(可通过超星尔雅官网f12获得)
- 填入uid(cookie里面有)
- 执行(24小时运行,在所填时间段内自动启动进行签到操作,其他时间段终止签到)
注意:cookie数据可能会失效,请及时更换,此脚本为python文件,在服务器中全天运行即可自动签到,出现课程信息获取失败更换cookie即可
#!/usr/bin/emv python
# -*- coding:utf-8 -*-
# author 7z time:2020/3/16
from datetime import datetime, time
import multiprocessing
from time import sleep
import requests, json
# 程序运行时间
# 第一节课
CLASS_ONE_START = time(8,5)
CLASS_ONE_END = time(8,25)
# 第二节课
CLASS_TWO_START = time(10,5)
CLASS_TWO_END = time(10,25)
# 第三节课
CLASS_THREE_START = time(13,10)
CLASS_THREE_END = time(13,30)
# 第四节课
CLASS_FOUR_START = time(15,10)
CLASS_FOUR_END = time(15,30)
# 填写cookie信息
headers = {
"Cookie": " ur 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 = " ur uid"
coursedata = []
activeList = []
course_index = 0
speed = 10
status = 0
status2 = 0
activates = []
num = 0
def run_child():
while 1:
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("课程列表获取失败")
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
num = len(coursedata) - 1
for item in coursedata:
print(str(index) + ".课程名称:" + item['name'])
index += 1
# course_index = int(input("请输入序号以设定监控课程")) - 1
print("监控课程设定完成")
# speed = int(input("请输入监控频率"))
print("监控频率设置完毕")
# res = input("输入start启动监控")
# 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
course_index = 0
# print("监控启动 监控课程为:%s 监控频率为:%s" % (coursedata[course_index]['name'], str(speed)))
while (status != 0 and status2 != 0):
while (True):
course_index = 0
print(num)
for item in coursedata:
ind += 1
taskactivelist(coursedata[course_index]['courseid'], coursedata[course_index]['classid'])
sleep(speed)
course_index += 1
print(course_index)
print("任务结束")
printdata()
backclazzdata()
# print("正在运行子进程")
def run_parent():
print("启动父进程")
child_process = None
while True:
current_time = datetime.now().time()
running = False
if CLASS_ONE_START <= current_time <= CLASS_ONE_END or CLASS_TWO_START <= current_time <= CLASS_TWO_END or CLASS_THREE_START <= current_time <= CLASS_THREE_END or CLASS_FOUR_START <= current_time <= CLASS_FOUR_END:
running = True
if running and child_process is None:
print("启动子进程")
child_process = multiprocessing.Process(target=run_child)
child_process.start()
print("子进程启动成功")
if not running and child_process is not None:
print("关闭子进程")
child_process.terminate()
child_process.join()
child_process = None
print("子进程关闭成功")
sleep(5)
if __name__ == '__main__':
run_parent()


![缓存[-128-127]数字](https://www.7z7z7z.cn/wp-content/themes/begin/prune.php?src=https://www.7z7z7z.cn/wp-content/uploads/2020/06/image.png&w=280&h=210&a=&zc=1)




