自动打卡脚本

奕辅导自动打卡脚本

打卡脚本,使用前需手动打卡一次并需要抓包,在其中找到相关的token。

# -*- encoding:utf-8 -*-

import requests
import json

punch_in_data = {
    "questionnairePublishEntityId": "1001640744275339000980000000001",
    "answerInfoList": [
        {
            "subjectId": "1001640315554537000980000000001",
            "subjectType": "multiSelect",
            "multiSelect": {
                "optionAnswerList": [
                    {
                        "beSelectValue": "NotThing",
                        "fillContent": ""
                    }
                ]
            }
        },
        {
            "subjectId": "1001640672356535001000000000001",
            "subjectType": "location",
            "location": {
                'address':'**市**区***',
                'area':'**区',
                'city':'**市',
                'deviationDistance':'1******',
                'latitude':'',
                'locationRangeId':'',
                'longitude':'',
                'province':'**省',
                'street':'**'
            }
        },
        {
            "subjectId": "1001647490263982000200000000001",
            "subjectType": "multiSelect",
            "optionAnswerList": {
                'attachmentList':'(null)',
                'beSelectValue':'1',
                "fillContent": ""
            }
        },
        {
            "subjectId": "1001647684101571001820000000001",
            "subjectType": "multiSelect",
            "optionAnswerList": {
                "beSelectValue": "1",
                "fillContent": ""
            }
        },
        
    ]
}


class YiFuDao_Puncher:
    def __init__(self):
        self.base_url = "https://yfd.ly-sky.com"
        self.header = {
            "accessToken": '',#填入抓取的token
            "userAuthType": "MS"
        }
        self.puncher_status = "💚 打卡脚本初始化中"
        
        self.check_in_index()

    def check_in_index(self):
        try:
            url = "/ly-pd-mb/form/api/healthCheckIn/client/stu/index"
            id=None
            retry=3
            while id is None and retry>=0:
                retry-=1
                res = requests.get(self.base_url+url, headers=self.header)
                parse_data = json.loads(res.text)
                detail = dict.get(parse_data,"data")
                id = dict.get(detail,"questionnairePublishEntityId")        # 表单ID,每日不同
                filling_status = dict.get(detail, "hadFill")                # 填写状态
                start_time = dict.get(detail, "fillStartTime")  # 获取问卷开始时间
                if start_time:
                    break
            print("💚 打卡脚本初始化完成")
            self.puncher_status = "✔ 已获取健康打卡信息"
            if id is None:
                if start_time is not None:
                    
                    self.puncher_status = "❗ 还未到打卡时间,脚本自动结束"
                    print("❗ 还未到打卡时间,脚本自动结束")
                else:
                    
                    self.puncher_status = "❌ 获取问卷失败,请稍后重试"
                    print("❌ 获取问卷失败,请稍后重试")
                return 0
            if filling_status is False:
                
                self.puncher_status = "✔ 今天暂未打卡,尝试进行打卡"
                self.check_in_detail(str(id))
            else:
                
                self.puncher_status = "❗ 今天已经打卡,脚本自动结束"
                print("❗ 今天已经打卡,脚本自动结束")
                return 0
        except Exception as e:
            
            self.puncher_status = "❌ 获取健康打卡信息失败"
            print("❌ 获取健康打卡信息失败")

    def check_in_detail(self,id):
        try:
            url = "/ly-pd-mb/form/api/questionnairePublish/" + str(id) + "/getDetailWithAnswer"
            res = requests.get(self.base_url+url,headers=self.header)
            parse_data = json.loads(res.text)
            subjectList = dict.get(dict.get(dict.get(parse_data,"data"),"questionnaireWithSubjectVo"),"subjectList")

            question_id_list = []
            answer_id_list = []
            for i in subjectList:
                question_id_list.append(i["id"])
            for i in punch_in_data["answerInfoList"]:
                answer_id_list.append(i["subjectId"])

            # 判断预设答案与当前问卷的项是否相符
            if answer_id_list == question_id_list:
                punch_in_data["questionnairePublishEntityId"] = str(id)
                
                self.puncher_status = "✔ 预设答案与当前问卷的项相符,本次打卡的问卷id为{}".format(punch_in_data["questionnairePublishEntityId"])
                print("✔ 预设答案与当前问卷的项相符,本次打卡的问卷id为{}".format(punch_in_data["questionnairePublishEntityId"]))
                self.check_in_save()
            else:
                
                self.puncher_status = "❌ 预设答案与当前问卷的项不相符,脚本已结束"
                print("❌ 预设答案与当前问卷的项不相符,脚本已结束")
                return 0
        except Exception as e:
            print("❌ 获取问卷详情失败")

    def check_in_save(self):
        try:
            url = "/ly-pd-mb/form/api/answerSheet/saveNormal"
            header = self.header
            header["Content-Type"] = "application/json"
            res = requests.post(self.base_url+url,data=json.dumps(punch_in_data),headers=header)
            parse_data = json.loads(res.text)
            if parse_data["code"] == 200:
                
                self.puncher_status = "✔ 打卡成功,{}".format(parse_data["message"])
                print("✔ 打卡成功,{}".format(parse_data["message"]))
            else:
                
                self.puncher_status = "❌ 打卡失败,{}".format(parse_data["message"])
                
        except Exception as e:
            print("❌ 打卡失败")
if __name__=="__main__":
    YiFuDao_Puncher().check_in_save()

自动打卡的实现则需要去部署腾讯云函数(其它厂商的也行),在云函数中设置执行周期。相关的实现教程请前往云函数部署教程

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值