学习通24小时自动签到(服务器版)

2020年3月20日11:41:12
评论
4,998 次浏览3 3885字阅读12分57秒
  1. 填入网课签到时间段
  2. 填入学习通cookie(可通过超星尔雅官网f12获得)
  3. 填入uid(cookie里面有)
  4. 执行(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()

7z7z7z
  • 本文由 发表于 2020年3月20日11:41:12
  • 转载请务必保留本文链接:https://www.7z7z7z.cn/index.php/2020/03/20/%e5%ad%a6%e4%b9%a0%e9%80%9a24%e5%b0%8f%e6%97%b6%e8%87%aa%e5%8a%a8%e7%ad%be%e5%88%b0%ef%bc%88%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%89%88%ef%bc%89/
ArrayList底层实现 编程语言

ArrayList底层实现

ArrayList底层是用数组实现的存储 特点和数组相同: 查询效率高 增删效率低 线程不安全 常用容器: 查询数据ArrayList(最常用) 增删数据常使用LinkedList 线程安全常使用Ve...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: