吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9747|回复: 16
收起左侧

[Python 原创] 【Python】学习通自动签到2.0 · 新增设定运行时间

   关闭 [复制链接]
Pastwill 发表于 2022-3-1 16:03
一.前言


脚本用于学习通签到,暂仅支持普通签到,接口较为稳定,支持微信接收签到信息,设定运行时间(新增),自动更新cookie(有效期30天),app接口出现频繁自动切换老网页接口,支持指定课程自动签到

如若认为有些用处请给予回复与评分,欢迎指出不足缺点,共同进步。

仅做个人学习使用,严禁用于其他用途。

二.开发环境


windows 10 Python 3.6 x86

三.调用模块


[Python] 纯文本查看 复制代码
import datetime
from asyncio.windows_events import NULL
import requests
import json
import time
import os
import random
from lxml import etree
import sys



四.代码



[Python] 纯文本查看 复制代码
'''
Author: 过往 Past
Date: 2022-02-22 21:12:32
'''
import datetime
from asyncio.windows_events import NULL
import requests
import json
import time
import os
import random
from lxml import etree
import sys
 
#用户区开始
name=""#用户名,必填
passwd=""#密码,必填
itime="4"#基础延时
token=''#push+ token,选填
starttime="6:00"#程序运行范围
closetime="18:00"#程序运行范围
#用户区结束
 
#全局区开始
okcookie={}#经过验证的cookie
uid=''#唯一id
classini=[]#课程信息
headers = {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2007J3SC Build/RKQ1.200826.002) (device:M2007J3SC) Language/zh_CN com.chaoxing.mobile/ChaoXingStudy_3_5.1.3_android_phone_613_74 '}#超星app原生ua
#全局区结束
 
#第一个函数 实现登录,验证cookie,保存cookie,获取cookie各功能
def login():#使用超星app登录api,测试多次获取没遇到过验证,比较稳定
    print("登录模块启动")
    data = {'uname': name,'code': passwd,'loginType': '1','roleSelect': 'true'}
    r = requests.post('https://passport2-api.chaoxing.com/v11/loginregister', headers=headers, data=data)
    load_cookies = requests.utils.dict_from_cookiejar(r.cookies)
    #转换为字符串保存到文件
    fo = open("cookie.txt", "w")
    fo.write(str(json.dumps(load_cookies)))
    print("cookie保存成功")
    fo.close()
    print("重启程序")
    restart_program()
     
 
#第二个函数 实现验证cookie,如果失效便启动再次登录获取新cookie
def cookie_check():
    if os.path.exists("cookie.txt") == True:
        f=open('cookie.txt','r',encoding="utf-8")
        dic = json.loads(f.read())
        response = requests.get('https://mooc1-api.chaoxing.com/mycourse/backclazzdata', headers=headers,cookies=dic)
        if '成功' in response.text:
                return [True,dic,dic['UID']]
                #get_class()
        else:
            print("cookie好像失效了,启动重新获取")
            login()
    else:
        print("未找到cookie文件呀启动登录")
        login()
 
 
#第三个函数 实现获取待查询是否有签到的课程,这个api也没有发现请求次数限制
#课程的选择:
#1.  ‘-1’这个是跟目录下
#2.  ‘目录参数’ 可以填写你的目录参数过滤掉其他的课程:浏览器f12即可
 
def get_class():
    r = requests.get('https://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&mcode=', headers=headers, cookies= okcookie)
    classinfo =json.loads(r.text)
    for i in classinfo['channelList']:
        if "course" not in str(i):
            continue
        if str("-1") in str(i["cfid"]):#这里可以实现对课程的选择
            classini.append([i['content']['course']['data'][0]['name'],i['content']['course']['data'][0]['id'],i['key']])
    print("\n\n"+"*"*5+"课程获取成功"+"*"*5+"\n\n")
     
 
 
def sign(id):#第四个函数,发出签到请求,推送push+
    response = requests.get('https://mobilelearn.chaoxing.com/pptSign/stuSignajax?activeId='+str(id)+'&uid='+uid, headers=headers,cookies= okcookie)
    if 'succ' in response.text:
        print("\n\n"+"*"*5+"成功"+"*"*5+"\n\n")
        if token ==NULL:
            return
        response = requests.get("https://www.pushplus.plus/send?token="+token+"&title="+str(random.randint(0,100))+"您的学习通&content=成功签到")
        print(response.text)
 
 
 
def get_active_one():#第五个函数 实现查询活动(核心),这个超星api有访问次数限制,这里用网页版和app版的活动获取两种api,交替并演示使用
    for i in classini:
        print("查询"+i[0]+"....")
        r = requests.get('https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist?courseId='+str(i[1])+'&classId='+str(i[2]), headers=headers, cookies=okcookie)
        a =json.loads(r.text)
        #print(a)
        if str("频繁") in str(a):
                print("\n\n\n出现频繁自动跳转备用接口\n\n\n")
                get_active_two()
                break
        if str("进行中(0)") in str(a["groupList"][0]['name']):
                print("无活动跳过\n")
                continue
        for o in a['activeList']:
            if str("1") not in str(o["status"]):
                print("不是进行中的跳过\n")
                continue         
            if str("2") not in str(o["activeType"]):
                print("不是进行中的签到任务\n")
                continue
            sign(o["id"])
        time.sleep(random.randint(2,10))
 
 
         
def get_active_two():#备用网页端接口
        for i in classini:
            print("查询"+i[0]+"....")
            r = requests.get('https://mobilelearn.chaoxing.com/widget/pcpick/stu/index?courseId='+str(i[1])+'&jclassId='+str(i[2]), headers=headers, cookies=okcookie)
            if str("频繁") in r.text:
                print("\n\n\n出现频繁\n\n\n")
                return
            html = etree.HTML(r.text)
            act=html.xpath('//*[@id="startList"]/div/div/@onclick')
            if len(act)==0:
                print("无活动跳过\n")
                continue
            if str(",2,") not in str(act):
                print("不是进行中的签到任务\n")
                continue
            for i in act:
                go=i
                go=go.replace('activeDetail(','')
                go=go.replace(',2,null)','')
                sign(go)
                time.sleep(random.randint(2,10))
 
def restart_program():#重启
    python = sys.executable
    os.execl(python, python, * sys.argv)



def timeing():#时间判断
    d_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + str(starttime), '%Y-%m-%d%H:%M')
    d_time1 = datetime.datetime.strptime(str(datetime.datetime.now().date()) + str(closetime), '%Y-%m-%d%H:%M')
    n_time = datetime.datetime.now()
    if n_time > d_time and n_time < d_time1:
        return True
    else:
         return False

if __name__ == '__main__':
    if timeing() == True:
        if cookie_check()[0] ==True:
            print("cookie检测成功")
            okcookie=cookie_check()[1]
            uid=cookie_check()[2]
            print("进入课程获取")
            get_class()
            get_active_one()
    else:
        print("非程序启动时间")


五.快速开始


github链接:
https://github.com/Past-GuoWang/chaoxing-sign

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
kongdang1 + 1 用心讨论,共获提升!
tommylee1 + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Pastwill 发表于 2022-3-1 20:19
欢迎提供功能新增和代码建议!
ytlk0535 发表于 2022-3-1 20:35
zjk414 发表于 2022-3-1 21:37
dft2010 发表于 2022-3-1 21:38
注释比较全,mark学习一下。。。明天再来细读,感谢楼主!
逝去的初夏 发表于 2022-3-2 08:56
整个在岗实习签到,每天都要位置打卡 生怕忘了
yxrhy_ming 发表于 2022-3-2 14:51
进来学习一个
吾爱侠客 发表于 2022-3-2 15:29
py不错,有手机版的快捷指令就更nice
leis00 发表于 2022-3-12 11:24
这下省事多了
Lengxue 发表于 2022-4-6 15:21
怎么用,有教程吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表