夸克网盘自动签到脚本(支持多账号+Server酱推送)

由吾爱大神本脚本可自动为夸克网盘账号执行每日签到任务,获取额外存储空间,支持多账号签到,并内置 Server酱推送通知结果到微信。适合懒人挂机、定时任务、云函数、青龙等场景使用。

功能简介:

支持多账号签到(通过 COOKIE 环境变量配置)

支持签到前状态查询、未签自动补签

查询网盘总容量、签到容量、连签进度

支持 Server酱一键推送签到结果到微信

出错信息、接口异常均会捕获并提示

使用方法:

抓取签到参数,手机打开抓包工具(如 HttpCanary、Stream、Reqable等)

1.打开夸克APP → 进入签到页

2.查找 https://drive-m.quark.cn/1/clouddrive/capacity/growth/info 的请求

3.提取请求中的以下参数:kps=xxxx;sign=xxxx;vcode=xxxx

4.修改代码内的 os.environ['COOKIE'] = ... 替换为你的参数

5.运行脚本即可

6.多个账号使用$进行分割

夸克网盘自动签到脚本(支持多账号+Server酱推送)_第1张图片

夸克网盘自动签到脚本(支持多账号+Server酱推送)_第2张图片 

夸克网盘自动签到脚本(支持多账号+Server酱推送)_第3张图片

代码如下:

import os

import re

import sys

 

import requests

 

# 配置变量

os.environ['COOKIE'] = '...'

 

# 添加 Server酱 推送函数

def send_to_server(title, desp):

    server_key = "Server酱KEY"

    url = f"https://sctapi.ftqq.com/{server_key}.send"

    data = {

        "title": title,

        "desp": desp

    }

    try:

        response = requests.post(url, data=data)

        if response.status_code == 200:

            print("Server酱推送成功")

        else:

            print(f"Server酱推送失败:{response.text}")

    except Exception as e:

        print(f"Server酱推送异常:{str(e)}")

 

def get_env():

    # 判断 COOKIE是否存在于环境变量

    if "COOKIE" in os.environ:

        # 读取系统变量以$分割变量

        cookie_list = os.environ.get('COOKIE').split('$')

    else:

        error_msg = '❌未添加COOKIE变量'

        print(error_msg)

        send_to_server('夸克自动签到', error_msg)

        sys.exit(0)

 

    return cookie_list

 

 

class Quark:

    def __init__(self, user_data):

        self.param = user_data

 

    def convert_bytes(self, b):

        units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")

        i = 0

        while b >= 1024 and i < len(units) - 1:

            b /= 1024

            i += 1

        return f"{b:.2f} {units[i]}"

 

    def get_growth_info(self):

        url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/info"

        querystring = {

            "pr": "ucpro",

            "fr": "android",

            "kps": self.param.get('kps'),

            "sign": self.param.get('sign'),

            "vcode": self.param.get('vcode')

        }

        response = requests.get(url=url, params=querystring).json()

        if response.get("data"):

            return response["data"]

        else:

            return False

 

    def get_growth_sign(self):

        url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/sign"

        querystring = {

            "pr": "ucpro",

            "fr": "android",

            "kps": self.param.get('kps'),

            "sign": self.param.get('sign'),

            "vcode": self.param.get('vcode')

        }

        data = {"sign_cyclic": True}

        response = requests.post(url=url, json=data, params=querystring).json()

        if response.get("data"):

            return True, response["data"]["sign_daily_reward"]

        else:

            return False, response["message"]

 

    def queryBalance(self):

        url = "https://coral2.quark.cn/currency/v1/queryBalance"

        querystring = {

            "moduleCode": "1f3563d38896438db994f118d4ff53cb",

            "kps": self.param.get('kps'),

        }

        response = requests.get(url=url, params=querystring).json()

        if response.get("data"):

            return response["data"]["balance"]

        else:

            return response["msg"]

 

    def do_sign(self):

        log = ""

        # 每日领空间

        growth_info = self.get_growth_info()

        if growth_info:

            log += (

                f" {'88VIP' if growth_info['88VIP'] else '普通用户'} {self.param.get('user')}\n"

                f"💾 网盘总容量:{self.convert_bytes(growth_info['total_capacity'])},"

                f"签到累计容量:")

            if "sign_reward" in growth_info['cap_composition']:

                log += f"{self.convert_bytes(growth_info['cap_composition']['sign_reward'])}\n"

            else:

                log += "0 MB\n"

            if growth_info["cap_sign"]["sign_daily"]:

                log += (

                    f"📅 签到记录: 今日已签到+{self.convert_bytes(growth_info['cap_sign']['sign_daily_reward'])},"

                    f"连签进度({growth_info['cap_sign']['sign_progress']}/{growth_info['cap_sign']['sign_target']})\n"

                )

            else:

                sign, sign_return = self.get_growth_sign()

                if sign:

                    log += (

                        f"📅 签到记录: 今日签到+{self.convert_bytes(sign_return)},"

                        f"连签进度({growth_info['cap_sign']['sign_progress'] + 1}/{growth_info['cap_sign']['sign_target']})\n"

                    )

                else:

                    log += f"❌ 签到异常: {sign_return}\n"

        else:

            log += f"❌ 签到异常: 获取成长信息失败\n"

 

        return log

 

 

def main():

    msg = ""

    global cookie_quark

    cookie_quark = get_env()

 

    print("✅ 检测到共", len(cookie_quark), "个夸克账号\n")

 

    i = 0

    while i < len(cookie_quark):

        # 获取user_data参数

        user_data = {} # 用户信息

        for a in cookie_quark[i].replace(" ", "").split(';'):

            if not a == '':

                user_data.update({a[0:a.index('=')]: a[a.index('=') + 1:]})

         

        log = f"🙍🏻‍♂️ 第{i + 1}个账号"

        msg += log

        # 登录

        log = Quark(user_data).do_sign()

        msg += log + "\n"

 

        i += 1

 

    # 打印结果并发送通知

    print(msg)

    send_to_server('夸克自动签到', msg)

    return msg[:-1]

 

 

if __name__ == "__main__":

    print("----------夸克网盘开始签到----------")

    main()

    print("----------夸克网盘签到完毕----------") 

 

 

你可能感兴趣的:(python)