前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【python】浙江青年大学习一键打卡

【python】浙江青年大学习一键打卡

作者头像
纯情
发布2023-04-27 10:18:44
5910
发布2023-04-27 10:18:44
举报
文章被收录于专栏:纯情博客纯情博客

仅限浙江地区使用!!!禁止商用!!!仅用于学习讨论!!!

使用 运行代码前,需要先获得openid,每个账号只要获得一次openid即可,以后无需重复抓包

安卓获得openId流程【部分手机无法用】

视频教程:https://wwd.lanzouy.com/isVnb0cc5jba 密码:bcg5 安卓下载抓包软件 httpcanary,安装并打开软件,有三步骤:1、同意条款 2、允许安装证书 3、root可以跳过 微信:打开大学习 软件httpcanary:点击右下角小飞机图标开始抓包 微信:点击“立即参与”->点击“去学习”。随后切到httpcanary,再点击右下角小飞机图标停止抓包。 软件httpcanary:点击右上角,找到“搜索”,直接搜索“openId”,注意:只要url是qczj.h5yunban.com的包。一般可以在包名为“qczj.h5yunban.com/qczj-youth-learning/cgi-bin/user-api/course/last-info”的响应中,找到openId 注意:记录openId,因为以后没必要再次抓包!!!

PC获得openid教程【推荐】

视频教程:https://wwd.lanzouy.com/isVnb0cc5jba 密码:bcg5 需要的软件:Fiddler、电脑版微信 打开Fiddler,安装证书 切换到微信,点击大学习,此时弹窗需要授权,点击“同意”。 点击“同意”后,切换到Fiddler,按“ctrl+f”,搜索openid,双击标黄处的包,并点击“WebForms”,在里面找到openid即可 注意:记录openId,因为以后没必要再次抓包!!!

运行代码

获得openid后,将openid填入config.yml,运行index.py即可。config.yml里面的name用来标识不同的openid,无实际意义。

注意

如果没有需要第2步授权步骤,而是直接进入大学习页面,则无法获得openid。需要彻底关掉微信,并重新打开微信,再尝试。 无论手机端或电脑端,如果实现得不到openid,需要点击“开始学习”进入到选择省市的选项。再切到Fiddler或httpcanary,按“ctrl+f”,搜索accessToken。得到accessToken后,比如accessToken为xxxx-xxxx-xxxx-xxxx, 将其合并到下面的链接 https://qczj.h5yunban.com/qczj-youth-learning/cgi-bin/user-api/info?accessToken=xxxx-xxxx-xxxx-xxxx替换上面的xxxx-xxxx-xxxx-xxxx。随后进行访问此链接,可以在返回的结果里面,找到openid

代码语言:javascript
复制
import re
import requests
import json
import yaml
 
getToken_url = 'https://qczj.h5yunban.com/qczj-youth-learning/cgi-bin/login/we-chat/callback'
getUserInfo_url = 'https://qczj.h5yunban.com/qczj-youth-learning/cgi-bin/user-api/course/last-info'
getClass_url = 'https://qczj.h5yunban.com/qczj-youth-learning/cgi-bin/common-api/course/current'
checkin_url = 'https://qczj.h5yunban.com/qczj-youth-learning/cgi-bin/user-api/course/join'
 
headers = {
    'Content-Type': 'text/plain'
}
 
def getYmlConfig(yaml_file='config.yml'):
    with open(yaml_file, 'r', encoding='utf-8') as f:
        file_data = f.read()
    return dict(yaml.load(file_data, Loader=yaml.FullLoader))
 
 
def getToken(openId):
    # 根据openId获得token
    try:
        getToken = requests.get(url=getToken_url, params=openId, headers=headers)
        Token_raw = getToken.text
        Token = re.findall('[A-Z0-9]{8}[-][A-Z0-9]{4}[-][A-Z0-9]{4}[-][A-Z0-9]{4}[-][A-Z0-9]{12}', Token_raw)[0]
        print('获取Token为:' + Token)
        accessToken = {
            'accessToken': Token
        }
        return accessToken
    except:
        print('获取Token失败,请检查openId是否正确')
 
 
def getinfo(accessToken):
    # 根据accessToken获得用户信息
    try:
        getUserInfo = requests.get(getUserInfo_url, params=accessToken, headers=headers)
        userInfo = getUserInfo.json()
        cardNo = userInfo["result"]["cardNo"]
        nid = userInfo["result"]["nid"]
        getClass = requests.get(getClass_url, params=accessToken, headers=headers)
        Class = getClass.json()
        classId = Class["result"]["id"]
        infos: list = userInfo['result']['nodes']
        Faculty = [item['title'] for item in infos]
        print('签到课程为:' + classId, '\n您填写的个人信息为:' + cardNo, '\n您的签到所属组织为:' + str(Faculty))
        checkinData = {
            'course': classId,
            'subOrg': None,
            'nid': nid,
            'cardNo': cardNo
        }
        return checkinData
    except Exception as e:
        if "is not subscriptable" in str(e):
            print("openid出错,无法获得您的信息")
        print(f'获取历史信息失败,请您手动打卡:{e}')
 
 
 
 
def signup(accessToken, checkinData):
    # 根据token和data完成打卡
    checkin = requests.post(checkin_url, params=accessToken, data=json.dumps(checkinData), headers=headers)
    result = checkin.json()
 
    if result["status"] == 200:
        print("签到成功")
    else:
        print('出现错误,错误码:' + result["status"])
        print('错误信息:' + result["message"])
 
 
if __name__ == "__main__":
    config = getYmlConfig()
    for index, user in enumerate(config['users']):
        print(user['user']['name'], 'openId为 ', user['user']['openid'])
        openid = {
            'appid': 'wx56b888a1409a2920',
            'openid': user['user']['openid']
        }
        accesstoken = getToken(openid)
        checkindata = getinfo(accesstoken)
        if checkindata is not None:
            signup(accesstoken, checkindata)
        print('===========================================')
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安卓获得openId流程【部分手机无法用】
  • PC获得openid教程【推荐】
  • 运行代码
  • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档