吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10922|回复: 37
收起左侧

[Python 原创] 【Python】新版学习通自动签到 · 微信推送 · 双接口防频繁 · 指定课程

  [复制链接]
Pastwill 发表于 2022-2-25 23:02
本帖最后由 Pastwill 于 2022-2-26 17:15 编辑

一.前言


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

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

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

二.开发环境


windows 10 Python 3.6 x86

三.调用模块


[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
from asyncio.windows_events import NULL
import requests
import json
import time
import os
import random
from lxml import etree
import sys



四.代码



[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
'''
Author: 过往 Past
Date: 2022-02-22 21:12:32
LastEditTime: 2022-02-25 22:21:54
LastEditors: Vs code
'''
 
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,选填
#用户区结束
 
#全局区开始
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)
 
if __name__ == '__main__':
    if cookie_check()[0] ==True:
        print("cookie检测成功")
        okcookie=cookie_check()[1]
        uid=cookie_check()[2]
        print("进入课程获取")
        get_class()
        get_active_one()


五.快速开始


打包开发环境和模块安装脚本方便大家快速使用

链接.txt (36 Bytes, 下载次数: 109)

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

免费评分

参与人数 6吾爱币 +10 热心值 +5 收起 理由
zyjzhy + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
梓涵 + 1 + 1 谢谢@Thanks!
getttime + 1 我很赞同!
netspirit + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
sonmudef + 1 + 1 api交替使用的思路很棒!

查看全部评分

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

 楼主| Pastwill 发表于 2022-2-26 21:01
同志们,帖子底部有github链接,有需要的可以星一下,关注后期更新
Lengxiy 发表于 2023-3-20 14:53
https://mooc1-api.chaoxing.com/mycourse/backclazzdata这里登录获取到了cookies,但是再通过这个cookies访问https://mooc1-api.chaoxing.com/mycourse/backclazzdata想要获取课程却直接报错,然后用了您的代码运行也总是显示请重新登录,不清楚啥原因
 楼主| Pastwill 发表于 2022-3-8 20:55
你好好生活 发表于 2022-3-8 17:59
大佬能说下云函数怎么部署的吗

我没用云函数,但是这个用py环境安装好模块就应该可以
pkni1230 发表于 2022-2-26 00:04
那一段涉及到微信推送???

免费评分

参与人数 1热心值 +1 收起 理由
Pastwill + 1 我很赞同!

查看全部评分

eoo 发表于 2022-2-26 00:10
用不上 顶一个
hrbp3000 发表于 2022-2-26 00:20
很厉害的样子,最近在学习用腾讯云函数自动签到部分网站
n518e518tETSA5R 发表于 2022-2-26 02:25
太好了,谢楼主分享
xiaozeng2005 发表于 2022-2-26 02:37
这个我有py环境能运行吗
 楼主| Pastwill 发表于 2022-2-26 07:14
pkni1230 发表于 2022-2-26 00:04
那一段涉及到微信推送???

请阅读代码。
 楼主| Pastwill 发表于 2022-2-26 07:15
xiaozeng2005 发表于 2022-2-26 02:37
这个我有py环境能运行吗

可以下载帖子底部的快速开始包
 楼主| Pastwill 发表于 2022-2-26 07:16
n518e518tETSA5R 发表于 2022-2-26 02:25
太好了,谢楼主分享

哈哈客气
 楼主| Pastwill 发表于 2022-2-26 07:16
hrbp3000 发表于 2022-2-26 00:20
很厉害的样子,最近在学习用腾讯云函数自动签到部分网站

支持云函数
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-5-20 23:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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