吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10260|回复: 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] 纯文本查看 复制代码
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
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, 下载次数: 108)

另奉上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-1-11 18:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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