免费CNB天翼云盘定时自动签到,支持多账号!

查看 57|回复 10
作者:aichiyu   
其实CNB也就是类似GitHub,支持云端开发。
那么定时签到就是小意思,如果你会了一个签到,然后你就可以签到所有的。
一不小心把库删除了!!从新来过!!
CNB:https://cnb.cool/IIIStudio/PYQianDao/tianyiyun
天翼云盘签到
当你学会一个py签到的时候你就差不多都学会了!
使用方式
[ol]

  • 复刻项目

  • 创建一个key项目,创建tianyi/env.yml文件,内容如下:tianyi: "账户,密码;账户,密码;账户,密码"

  • 修改.cnb.yml,把https://cnb.cool/IIIStudio/key/-/blob/main/tianyi/env
    .yml替换为你自己的。

  • 24 9   *每天早上9点24分执行。
    [/ol]
    [color=]## 一些问题
    问:在哪里看签到成功。
    答:在云原生构建中看是否显示 定时任务 ,点进去在点击天翼签到,最下方有详细的。
    问:为什么我没有反应啊,没有云原生构建中没有显示定时任务。
    答:因为是定时的,24 9 *每天早上9点24分执行。你需要修改时间,当前时间+1分钟。
    问:为什么我签到失败了。
    答:你可以去看定时任务 ,点进去在点击天翼签到,最下方有详细的。大概是因为有二次验证,需要关闭就行。
    问:我可以签到其他吗?
    答:可以,但是你需要写python,按照我这个模版,当也可以在.cnb.yml添加,例如:python tianyi.py dl $
    [color=]{tianyi}
    下方换行添加你的python 其他.py,密码最好是使用key。
    问:我能用在私库吗?
    答:是可以的,最好先研究下构造,你需要新建一个库,然后创建.cnb.yml,内容需要自己去修改,只有是运行的py文件。其他用修改。你也可以直接新建库,然后再云生开发中输入:cnb-init-from https://cnb.cool/IIIStudio/PYQianDao/tianyiyun 然后运行,这样就拉起了,然后kill 1 关闭,然后再次打开云生开发去编辑。
    原理就是定时运行python,你只需制作签到的python,然后运行,用的是key方式存储密码,然后再调用。
    KEY库大概这样。


    AD.png (68.42 KB, 下载次数: 0)
    下载附件
    2025-10-29 00:52 上传



    AF.png (34.74 KB, 下载次数: 0)
    下载附件
    2025-10-29 00:52 上传



    tianyi.png (179.31 KB, 下载次数: 0)
    下载附件
    2025-10-29 11:49 上传

    [Python] 纯文本查看 复制代码import time
    import re
    import base64
    import hashlib
    import rsa
    import requests
    import sys
    BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")
    B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    s = requests.Session()
    def get_accounts_from_args():
        """从命令行参数获取账户信息"""
        accounts = []
       
        # 检查是否有命令行参数
        if len(sys.argv) > 1 and sys.argv[1] == 'dl':
            if len(sys.argv) > 2:
                # 将所有参数合并为一个字符串
                all_args = ' '.join(sys.argv[2:])
                # 支持多种分隔符
                if ';' in all_args:
                    # 使用分号分隔多个账户
                    account_groups = all_args.split(';')
                    for account_group in account_groups:
                        if ',' in account_group:
                            parts = account_group.split(',', 1)
                            if len(parts) == 2:
                                username, password = parts
                                accounts.append({
                                    'username': username.strip(),
                                    'password': password.strip()
                                })
                else:
                    # 如果没有分号,假设是单个账户
                    for account_arg in sys.argv[2:]:
                        if ',' in account_arg:
                            parts = account_arg.split(',', 1)
                            if len(parts) == 2:
                                username, password = parts
                                accounts.append({
                                    'username': username.strip(),
                                    'password': password.strip()
                                })
       
        # 如果没有提供参数或解析失败,使用原来的列表
        if not accounts:
            username_list = ['你的手机号']
            password_list = ['你的密码']
            for index in range(len(username_list)):
                if index > 2)
                    c = 3 & v
                elif 1 == e:
                    e = 2
                    d += int2char(c > 4)
                    c = 15 & v
                elif 2 == e:
                    e = 3
                    d += int2char(c)
                    d += int2char(v >> 2)
                    c = 3 & v
                else:
                    e = 0
                    d += int2char(c > 4)
                    d += int2char(15 & v)
        if e == 1:
            d += int2char(c ]*href=\"([^\"]+)\""  # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容
        match = re.search(pattern, r.text)  # 在文本中搜索匹配
        if match:  # 如果找到匹配
            href = match.group(1)  # 获取捕获的内容
        else:  # 如果没有找到匹配
            print("没有找到href链接")
        r = s.get(href)
        captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0]
        lt = re.findall(r'lt = "(.+?)"', r.text)[0]
        returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0]
        paramId = re.findall(r'paramId = "(.+?)"', r.text)[0]
        j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0]
        s.headers.update({"lt": lt})
        username = rsa_encode(j_rsakey, username)
        password = rsa_encode(j_rsakey, password)
        url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0',
            'Referer': 'https://open.e.189.cn/',
        }
        data = {
            "appKey": "cloud",
            "accountType": '01',
            "userName": f"{{RSA}}{username}",
            "password": f"{{RSA}}{password}",
            "validateCode": "",
            "captchaToken": captchaToken,
            "returnUrl": returnUrl,
            "mailSuffix": "@189.cn",
            "paramId": paramId
        }
        r = s.post(url, data=data, headers=headers, timeout=5)
        if (r.json()['result'] == 0):
            print("登录成功")
        else:
            print(f"登录失败: {r.json()['msg']}")
        redirect_url = r.json()['toUrl']
        r = s.get(redirect_url)
        return s
    def main():
        accounts = get_accounts()
        print(f"共有 {len(accounts)} 个账户需要处理")
       
        for account in accounts:
            username = account["username"]
            password = account["password"]
            
            print(f"正在处理账户: {username[:3]}****{username[-4:]}")
            
            s = login(username, password)
            if s is not None:
                rand = str(round(time.time() * 1000))
                surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K'
                url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN'
                url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN'
                url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN'
                headers = {
                    'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6',
                    "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1",
                    "Host": "m.cloud.189.cn",
                    "Accept-Encoding": "gzip, deflate",
                }
                response = s.get(surl, headers=headers)
                netdiskBonus = response.json()['netdiskBonus']
                # isSign 返回的数据类型为bool
                if (response.json()['isSign'] == True):
                    print(f"已经签到过了,签到获得{netdiskBonus}M空间")
                    res1 = f"已经签到过了,签到获得{netdiskBonus}M空间"
                else:
                    print(f"签到成功,签到获得{netdiskBonus}M空间")
                    res1 = f"签到成功,签到获得{netdiskBonus}M空间"
                headers = {
                    'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6',
                    "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1",
                    "Host": "m.cloud.189.cn",
                    "Accept-Encoding": "gzip, deflate",
                }
                response = s.get(url, headers=headers)
                if ("errorCode" in response.text):
                    print("抽奖失败,次数不足")
                    res2 = "抽奖失败,次数不足"
                else:
                    prizeName = response.json()['prizeName']
                    print(f"第1次抽抽奖获得{prizeName}")
                    res2 = f"第1次抽抽奖获得{prizeName}"
            #第二次抽奖
            time.sleep(5)
            response = s.get(url2, headers=headers)
            if ("errorCode" in response.text):
                print("抽奖失败,次数不足")
                res3 = "抽奖失败,次数不足"
            else:
                prizeName = response.json()['prizeName']
                print(f"第2次抽抽奖获得{prizeName}")
                res3 = f"第2次抽抽奖获得{prizeName}"
            #第三次抽奖
            time.sleep(5)
            response = s.get(url3, headers=headers)
            if ("errorCode" in response.text):
                print("抽奖失败,次数不足")
                res4 = "抽奖失败,次数不足"
            else:
                prizeName = response.json()['prizeName']
                print(f"第3次抽奖获得{prizeName}")
                res4 = f"第3次抽奖获得{prizeName}"
            #输出信息
            result_list = [res1, res2, res3, res4]
            result_string = "。".join(result_list)
            print(f"处理完成: {result_string}")
            title = f"【天翼】{username[:3]}****{username[-4:]}"
    if __name__ == "__main__":
        main()

    账户, 定时

  • aichiyu
    OP
      


    Kls673M 发表于 2025-10-28 10:41
    感谢分享, 有没有怎么做脚本的教程

    使用方式
    复刻项目
    创建一个key项目,创建tianyi/env.yml文件,内容如下:tianyi: "账户,密码;账户,密码;账户,密码"
    修改.cnb.yml,把https://cnb.cool/IIIStudio/key/-/blob/main/tianyi/env.yml替换为你自己的。
    24 9 *每天早上9点24分执行。
    主要是用的云端自动签到,不是本地的,按照这个操作就行了。
    Courser   


    iqeq 发表于 2025-10-29 16:03
    2024年底说要结束抽奖,但是新一轮又开始了,到现在还是有签到和抽奖的

    现在只是抽奖接口返回个你得到容量的消息而已,但那是假消息,根本没加
    你可以找到取容量的接口,单位精确到字节的,就知道这抽奖是假的了
    Courser   

    你这脚本不是原创吧,1年前就没抽奖了,3个抽奖都没了,你还放在代码里,明显是找的不知道多久前的脚本复制的...
    Kls673M   

    感谢分享, 有没有怎么做脚本的教程
    uuuucccccce   

    感谢分享
    li5bo5   

    重新整理一下代码吧、更新一下发出来分享
    rgyjc   

    成品出来了没有啊  37
    aichiyu
    OP
      


    Courser 发表于 2025-10-28 10:27
    你这脚本不是原创吧,1年前就没抽奖了,3个抽奖都没了,你还放在代码里,明显是找的不知道多久前的脚本复制的.. ...

    主要是用在cnb只是做了一点点修改。
    aichiyu
    OP
      


    rgyjc 发表于 2025-10-28 11:16
    成品出来了没有啊  37

    已经是成品了啊!
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部