霸王茶姬小程序任务脚本

news2024/11/26 10:38:10

霸王茶姬小程序任务脚本

小白操作----仅供学习研究参考

在这里插入图片描述

功能: 积分签到

解析

该脚本用于“霸王茶姬小程序”的签到和积分查询操作。通过模拟网络请求登录账号,获取个人信息,执行每日签到,并查询积分情况。支持多账号操作,并能通过微信推送签到结果和相关信息。

RUN这个类是脚本的核心,负责执行各种任务。

  • init: 初始化类,设置用户信息、会话和请求头。

  • personal_info: 获取并验证用户的个人信息,如用户名和手机号。

  • user_sign_statistics: 获取用户的签到信息,并根据签到状态执行签到操作。

  • take_part_in_sign: 执行签到操作并获取签到奖励。

  • points_info: 查询用户的积分信息,包括即将过期的积分。

  • main: 主流程控制,依次执行登录、获取用户信息、签到和查询积分等操作。

  • sendMsg: 发送微信推送通知消息。

辅助函数

  • Log: 记录日志并更新消息内容。

  • down_file: 下载文件并进行必要的文件操作。

  • import_Tools: 导入工具模块并初始化环境。

主函数负责脚本的总体运行流程,包括加载配置、检查环境、执行任务等。它会导入必要的工具模块,并根据配置执行多账号的签到操作。

定时任务

脚本通过定时任务 (cron) 在每天的1点30分运行,自动执行签到和相关操作。

该脚本的主要功能是自动化执行“霸王茶姬小程序”的签到和积分查询操作,通过模拟登录、获取用户信息、签到和积分查询等步骤,实现对签到任务的自动化处理,并通过微信推送通知用户签到结果。

import os
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# import CHERWIN_TOOLS
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
IS_DEV = False
if os.path.isfile('DEV_ENV.py'):
    import DEV_ENV
    IS_DEV = True

if os.path.isfile('notify.py'):
    from notify import send
    print("加载通知服务成功!")
else:
    print("加载通知服务失败!")
send_msg = ''
one_msg=''
def Log(cont=''):
    global send_msg,one_msg
    print(cont)
    if cont:
        one_msg += f'{cont}\n'
        send_msg += f'{cont}\n'

class RUN:
    def __init__(self,info,index):
        global one_msg
        one_msg = ''
        split_info = info.split('@')
        self.token = split_info[0]
        len_split_info = len(split_info)
        last_info = split_info[len_split_info - 1]
        self.send_UID = None
        if len_split_info > 0 and "UID_" in last_info:
            self.send_UID = last_info
        self.index = index + 1
        Log(f"\n---------开始执行第{self.index}个账号>>>>>")
        self.s = requests.session()
        self.s.verify = False

        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309080f) XWEB/8555',
            'work-wechat-userid': '',
            'multi-store-id': '',
            'gdt-vid': '',
            'qz-gtd': '',
            'scene': '1006',
            'Qm-From': 'wechat',
            'store-id': '49006',
            'Qm-User-Token': self.token,
            'channelCode': '',
            'Qm-From-Type': 'catering',
            'promotion-code': '',
            'work-staff-name': '',
            'work-staff-id': '',
            'Accept': 'v=1.0',
            'Accept-Encoding': 'gzip,compress,br,deflate',
            'Referer': 'https://servicewechat.com/wxafec6f8422cb357b/87/page-frame.html'
        }
        self.s.headers.update(self.headers)
        self.appid = 'wxafec6f8422cb357b'
        self.activity_id='947079313798000641'

    def personal_info(self):
        personal_info_valid = False

        try:
            # 请求的参数
            params = {'appid': self.appid}

            # 发送GET请求
            response = self.s.get('https://webapi.qmai.cn/web/catering/crm/personal-info', json=params)
            result = response.json()

            # 检查请求是否成功
            if result.get('code','-1') == '0':
                personal_info_valid = True
                # 提取个人信息
                mobile_phone = result['data']['mobilePhone'] if 'data' in result and 'mobilePhone' in result[
                    'data'] else None
                self.mobile_phone = mobile_phone[:3] + "*" * 4 + mobile_phone[7:]
                self.name = result['data']['name'] if 'data' in result and 'name' in result['data'] else None

                Log(f"账号[{self.index}]登陆成功!\n用户名:【{self.name}】 \n手机号:【{self.mobile_phone}】")
            else:
                # 如果请求不成功,则打印错误信息
                message = result.get('message', '')
                Log(f'登录失败: {message}')

        except Exception as e:
            # 捕获任何异常并打印
            print(e)

        finally:
            # 最终返回请求是否成功的标志
            return personal_info_valid

    def user_sign_statistics(self):
        try:

            json_data = {
                'activityId': self.activity_id,
                'appid': self.appid
            }

            # Send the POST request
            response = self.s.post('https://webapi.qmai.cn/web/cmk-center/sign/userSignStatistics', json=json_data)
            result = response.json()
            status_code = response.status_code

            # Check if the request was successful
            if result.get('code', status_code) == 0:
                data = result.get('data', {})
                sign_days = data.get('signDays', '')
                sign_status = data.get('signStatus', 0) == 1
                Log(f'新版签到今天{"已" if sign_status else "未"}签到, 已连续签到{sign_days}天')
                if not sign_status:
                    self.take_part_in_sign()
                return sign_status, sign_days
            else:
                message = result.get('message', '')
                Log(f'查询新版签到失败: {message}')
                return False, 0
        except Exception as e:
            print(e)
            return False, 0

    def take_part_in_sign(self):
        try:
            json_data = {
                'activityId': self.activity_id,
                'appid': self.appid
            }
            response = self.s.post('https://webapi.qmai.cn/web/cmk-center/sign/takePartInSign', json=json_data)
            result = response.json()
            status_code = response.status_code

            if result.get('code', status_code) == 0:
                data = result.get('data',{})
                rewardDetailList = data.get('rewardDetailList',[{}])
                if rewardDetailList:
                    rewardName = rewardDetailList[0].get('rewardName','')
                    sendNum = rewardDetailList[0].get('sendNum','')
                    Log(f'新版签到成功,获得【{sendNum}】{rewardName}')
                    return True
                else:
                    Log(f'签到失败:【{result.get("message","")}】')
                    return True
            else:
                message = result.get('message', '')
                Log(f'新版签到失败: {message}')
                return False
        except Exception as e:
            print(e)
            return False

    def points_info(self):
        try:
            json_data = {
                'appid': self.appid
            }

            response = self.s.post('https://webapi.qmai.cn/web/catering/crm/points-info', json=json_data)
            result = response.json()
            status_code = response.status_code

            if result.get('code', status_code) == '0':
                data = result.get('data', {})
                soon_expired_points = data.get('soonExpiredPoints', 0)
                total_points = data.get('totalPoints', 0)
                expired_time = data.get('expiredTime', '')

                if soon_expired_points:
                    Log(f'有【{soon_expired_points}】积分将于( {expired_time})过期')

                Log(f'当前积分: 【{total_points}】')
                return total_points, soon_expired_points, expired_time
            else:
                message = result.get('message', '')
                Log(f'查询积分失败: {message}')
                return None
        except Exception as e:
            print(e)
            return False

    def main(self):
        if not self.personal_info() :
            Log("用户信息无效,请更新CK")
            self.sendMsg()
            return False
        self.user_sign_statistics()
        self.points_info()
        self.sendMsg()
        return True

    def sendMsg(self, help=False):
        if self.send_UID:
            push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME, help)
            print(push_res)


def down_file(filename, file_url):
    print(f'开始下载:{filename},下载地址:{file_url}')
    try:
        response = requests.get(file_url, verify=False, timeout=10)
        response.raise_for_status()
        with open(filename + '.tmp', 'wb') as f:
            f.write(response.content)
        print(f'【{filename}】下载完成!')

        # 检查临时文件是否存在
        temp_filename = filename + '.tmp'
        if os.path.exists(temp_filename):
            # 删除原有文件
            if os.path.exists(filename):
                os.remove(filename)
            # 重命名临时文件
            os.rename(temp_filename, filename)
            print(f'【{filename}】重命名成功!')
            return True
        else:
            print(f'【{filename}】临时文件不存在!')
            return False
    except Exception as e:
        print(f'【{filename}】下载失败:{str(e)}')
        return False

def import_Tools():
    global CHERWIN_TOOLS,ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode
    import CHERWIN_TOOLS
    ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version)


if __name__ == '__main__':
    APP_NAME = '霸王茶姬小程序'
    ENV_NAME = 'BWCJ'
    CK_NAME = 'qm-user-token'
    print(f'''
{APP_NAME}签到

在这里插入图片描述

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.js - 使用着色器实现各种图形

有更多案例,私我 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls import * as dat from dat.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// ts-ignore import basi…

一篇初学者入门Python匿名函数与Lambda表达式详细教程

首先要了解了如何定义和使用函数的参数,以及如何从一个函数返回值.这篇文章将深入介绍Python中的“匿名函数”和“Lambda表达式”,这两个概念在实际编程中非常有用 如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免…

数据库表转为库表设计文档

开发完之后&#xff0c;就一大堆文档需要写的&#xff0c;其中就有库表设计文档&#xff0c;所以直接写个接口&#xff0c;直接把库表转为库表设计文档就行&#xff0c;省一大堆时间摸鱼了。直接贴代码。 pom文件引入依赖 <!--引入数据库表结构文档生成器Screw依赖--> &…

《驾驭未来:大型语言模型的理论与实践》—— 探索大模型的奥秘

在这个信息爆炸的时代&#xff0c;人工智能尤其是大型语言模型&#xff08;LLM&#xff09;已经成为推动科技进步的关键力量。无论是科学研究、商业应用还是日常生活&#xff0c;大型语言模型都在不断地改变着我们的世界。对于那些渴望深入了解这一前沿技术的人来说&#xff0c…

JAVA实现单词词频统计-辅助英文考试学习

一、基于GUI的可以自行输入的英文单词词频统计软件

SpingBoot集成kafka发送读取消息

SpingBoot集成kafka开发 kafka的几个常见概念 1、springboot和kafka对应版本&#xff08;重要&#xff09;2、创建springboot项目&#xff0c;引入kafka依赖2.1、生产者EventProducer2.2、消费者EventConsumer2.3、启动生产者的方法SpringBoot01KafkaBaseApplication2.4、appli…

小程序学习day10-自定义组件的data数据、方法、属性,data与properties的关系、自定子组件之数据监听器

39、WXS脚本&#xff08;小程序独有的一套脚本语言&#xff09;&#xff08;续&#xff09; &#xff08;6&#xff09;自定义组件的data数据、方法、属性 1&#xff09;自定义组件的data数据&#xff08;在小程序组件中&#xff0c;用于组件模版渲染的私有数据&#xff09; …

定格精彩瞬间!详解六自由度技术原理及应用

在体育赛事中&#xff0c;观赏各项目的精彩瞬间&#xff0c;欣赏运动员的卓越表现是观众们最为关注的焦点。以体操跳马为例&#xff0c;运动员们全力助跑&#xff0c;然后奋力起跳、腾空&#xff0c;接着精准的推手和转体动作&#xff0c;最后稳稳落地&#xff0c;整个动作行云…

【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步

多线程API 进程和线程 进程&#xff1a;进程就像是一个程序在电脑里运行时的一个实例。你可以把它想象成一个独立的小工人&#xff0c;专门负责完成某项任务&#xff08;比如打开浏览器、播放音乐&#xff09;。每个进程都有自己独立的资源&#xff08;比如内存&#xff09;和…

python 可迭代,迭代器,生成器,装饰器

1. 可迭代&#xff08;Iterable&#xff09; 可迭代 是指一个对象可以返回一个迭代器的对象。也就是说&#xff0c;它实现了 __iter__() 方法或 __getitem__() 方法。常见的可迭代对象有列表、元组、字符串、字典和集合。 from collections.abc import Iterablei 100 s &qu…

墙裂推荐!云上机密计算,阿里云上体验了一下海光内存加密和远程认证

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 机密计算目录 前言1、构…

哈希原理实现

本节主要看源代码实现 哈希特点 哈希&#xff08;Hashing&#xff09;是一种将数据映射到固定大小的表中以实现快速查找的数据结构和算法方法。哈希的主要特点包括&#xff1a; 1. 高效的查找、插入和删除 时间复杂度&#xff1a;哈希表通常提供近乎常数时间的查找、插入和…

app安全评估报告的常见留存措施(内附独家资料)

对用户账号、操作时间、操作类型、网络源地址和目标地址、网络源端口、客户端硬件特征等日志信息以及用户发布信息记录的留存措施 1**. 用户账号信息**&#xff1a;我们将用户账号信息安全存储&#xff0c;只有授权的人员能够访问。这些信息包括用户名、电子邮件地址等&#xf…

【C++ 面试 - 面向对象】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

VAuditDemo审计之二次注入漏洞

目录 VAuditDemo二次注入漏洞 搜索危险函数&#xff0c;用户可控点 regCheck.php messageSub.php message.php 漏洞调用链 漏洞错误利用过程 注册用户 xxxx, 发表payload留言 漏洞正确利用过程 注册用户 wwww\ 退出用户 wwww\\ 使用 wwww\ 登录 发表留言 替换dat…

《javaEE篇》--定时器

定时器概念 当我们不需要某个线程立刻执行&#xff0c;而是在指定时间点或指定时间段之后执行&#xff0c;假如我们要定期清理数据库里的一些信息时&#xff0c;如果每次都手动清理的话就太麻烦&#xff0c;所以就可以使用定时器。定时器就可以比作一个闹钟&#xff0c;可以让…

C++ 设计模式(6. 适配器模式)

适配器模式Adapter Pattern是一种结构型设计模式&#xff0c;它可以将一个类的接口转换成客户希望的另一个接口&#xff0c;主要目的是充当两个不同接口之间的桥梁&#xff0c;使得原本接口不兼容的类能够一起工作。基本结构 Target 是目标接口&#xff0c;Adaptee 是需要适配的…

微信小程序实例代码解读

以微信 小程序开发工具给的示例代码为例&#xff1a; 主页代码&#xff1a; index.wxml 这个文件是一个微信小程序页面的 WXML 结构,主要功能是展示一个快速开始教程的步骤和内容。 源代码&#xff1a; <!--index.wxml--> <view class"container">&l…

ZK-Rollups测评

1. 引言 Matter Labs团队和多个高校研究人员一起&#xff0c;发布2024年论文《Analyzing and Benchmarking ZK-Rollups》&#xff0c;开源代码见&#xff1a; https://github.com/StefanosChaliasos/zkrollup-benchmarking&#xff08;Python&#xff09; 其中&#xff1a; …

安装MySQL入门基础指令

一.安装MySQL(以5.7版本为例) 1.一路默认安装&#xff0c;截图供大家参考 修改自己window安装名字即可 2.配置环境变量 C:\Program Files\MySQL\MySQL Server 5.7\bin 写入系统环境变量即可在window窗口使用其服务了 3.登录MySQL服务 进入控制台输入命令 mysql -u root …