Collect seeded Qinglong script repositories
This commit is contained in:
@@ -0,0 +1,822 @@
|
||||
// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/UPDATE.js
|
||||
// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/UPDATE.js
|
||||
// # Repo: imoki/sign_script
|
||||
// # Path: polymerization/UPDATE.js
|
||||
// # UploadedAt: 2025-08-25T21:29:14+08:00
|
||||
// # SHA256: 891e820ae0a3f9c63d3f0a87b92ed14ec831b0088c9e63b2a4eb16e40d12d287
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
脚本名称:UPDATE.js
|
||||
脚本兼容: airsript 1.0、airscript 2.0
|
||||
更新时间:20250504
|
||||
备注:更新脚本。用于自动生成表格,以及追加表格数据
|
||||
适配airsript 1.0版本及airscript 2.0版本
|
||||
其他:若想添加新内容,请搜索(修改这里),按照格式修改
|
||||
*/
|
||||
|
||||
var confiWorkbook = 'CONFIG' // 主配置表名称
|
||||
var pushWorkbook = 'PUSH' // 推送表的名称
|
||||
var emailWorkbook = 'EMAIL' // 邮箱表的名称
|
||||
var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta)
|
||||
var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送
|
||||
var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送
|
||||
var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行
|
||||
|
||||
// 表中激活的区域的行数和列数
|
||||
var workbook = [] // 存储已存在表数组
|
||||
var row = 0;
|
||||
var col = 0;
|
||||
var maxRow = 100; // 规定最大行
|
||||
var maxCol = 22; // 规定最大列
|
||||
var colNum = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V']
|
||||
|
||||
// CONFIG表内容
|
||||
// 推送昵称(推送位置标识)选项:若“是”则推送“账户名称”,若账户名称为空则推送“单元格Ax”,这两种统称为位置标识。若“否”,则不推送位置标识
|
||||
// 存放CONFIG表内容,标题+标题下内容
|
||||
var configContent = [];
|
||||
// 实际写入CONFIG表的值
|
||||
// CONFIG表标题
|
||||
configTitle = ['工作表的名称', '备注', '只推送失败消息(是/否)', '推送昵称(是/否)', '是否存活', '程序结束时间', '消息', '推送时间', '推送方式', '是否通知', '加入消息池', '推送优先级', '当日可推送次数', '当日剩余推送次数']
|
||||
// 定义CONFIG表标题下内容的默认值
|
||||
var configBodyDefault = ['xxx', '', '否', '是', '是', '', '', '', '@all', '是', '否', '0', '1', ''];
|
||||
// CONFIG表标题下内容
|
||||
var configBody = [
|
||||
{ name: 'remind', note: '日期提醒工具',},
|
||||
{ name: 'qrcode', note: '二维码生成工具',},
|
||||
{ name: 'jitang', note: '鸡汤',},
|
||||
{ name: 'imgcover', note: '随机封面',},
|
||||
{ name: 'weekplan', note: '周安排工具',},
|
||||
{ name: 'todayhistory', note: '历史上的今天',},
|
||||
{ name: 'oilprice', note: '今日油价',},
|
||||
{ name: 'airabsorbed', note: '全国空气吸收剂量率',},
|
||||
{ name: 'smzdm', note: '什么值得买抽奖',},
|
||||
{ name: 'toollu', note: '在线工具',},
|
||||
{ name: 'zaoan', note: '早安问候语',},
|
||||
{ name: 'wanan', note: '晚安问候语',},
|
||||
{ name: 'bilihot', note: '哔哩哔哩热搜榜',},
|
||||
{ name: 'dyhot', note: '抖音热搜榜',},
|
||||
{ name: 'ddmc_ddyt', note: '叮咚鱼塘',},
|
||||
{ name: 'wbhot', note: '微博热搜榜',},
|
||||
{ name: 'zhhot', note: '知乎热搜榜',},
|
||||
{ name: 'bdhot', note: '百度热搜榜',},
|
||||
{ name: 'xmly', note: '喜马拉雅',},
|
||||
{ name: 'ssphot', note: '少数派热榜',},
|
||||
{ name: 'en', note: '希沃白板',},
|
||||
{ name: 'bdsl', note: '百度收录',},
|
||||
{ name: 'quark', note: '夸克网盘',},
|
||||
{ name: 'huluxia', note: '葫芦侠3楼',},
|
||||
{ name: 'steamrank', note: 'steam游戏在线人数'},
|
||||
{ name: 'oneyan', note: '随机一句一言',},
|
||||
{ name: 'ztebbs', note: '中兴社区',},
|
||||
{ name: 'mi', note: '小米商城',},
|
||||
{ name: 'kanxue', note: '看雪论坛',},
|
||||
{ name: 'day60s', note: '每天60秒读懂世界'},
|
||||
{ name: 'vivo', note: 'vivo社区',},
|
||||
{ name: 'chouq', note: '随机抽签',},
|
||||
{ name: 'kfc', note: 'KFC疯狂星期四搞笑语录',},
|
||||
{ name: 'golo', note: 'golo汽修大师',},
|
||||
{ name: 'xingzuo', note: '星座运势',},
|
||||
{ name: 'tzgsc', note: '挑战古诗词',},
|
||||
{ name: 'chinadsl', note: '宽带技术网',},
|
||||
{ name: 'imgecy', note: '随机二次元图片',},
|
||||
{ name: 'imgbing', note: 'Bing每日图片',},
|
||||
{ name: 'ztemall', note: '中兴商城',},
|
||||
{ name: 'wnflb', note: '万能福利吧',},
|
||||
{ name: 'wangzhe', note: '王者荣耀英雄介绍',},
|
||||
{ name: 'rsdjs', note: '人生倒计时',},
|
||||
{ name: 'fwxs', note: '废文小说',},
|
||||
{ name: 'imgavatar', note: '随机头像',},
|
||||
{ name: 'shenhuifu', note: '神回复',},
|
||||
{ name: 'imglandscape', note: '随机风景图片',},
|
||||
{ name: 'miyu', note: '谜语', },
|
||||
{ name: 'telsaorao', note: '骚扰电话查询',},
|
||||
{ name: 'favicon', note: '网站图标获取',},
|
||||
{ name: 'imgphone', note: '随机手机壁纸',},
|
||||
{ name: 'kyt', note: '科研通',},
|
||||
{ name: 'parsdata', note: '伊朗域名注册优惠码',},
|
||||
{ name: 'quarksave', note: '夸克订阅更新自动转存',},
|
||||
{ name: 'dailynewscn', note: '中国日报',},
|
||||
{ name: 'telgsd', note: '手机号归属地',},
|
||||
{ name: 'dwz', note: '短网址生成',},
|
||||
{ name: 'fjzh', note: '简繁体转换',},
|
||||
{ name: 'xpnc', note: '兴攀农场',},
|
||||
{ name: 'qwxh', note: '趣味笑话',},
|
||||
{ name: 'rshy', note: '人生话语',},
|
||||
{ name: 'qcs', note: '屈臣氏',},
|
||||
{ name: 'meiju', note: '随机美句摘抄文案',},
|
||||
{ name: 'hzh', note: '华住会',},
|
||||
{ name: 'eswxlt', note: '恩山无线论坛',},
|
||||
{ name: 'weimei', note: '随机唯美文案',},
|
||||
{ name: 'xmdl', note: '熊猫网络',},
|
||||
{ name: 'lnglat', note: '经纬度解析',},
|
||||
{ name: 'hfweather', note: '和风天气', pushPriority: '1',},
|
||||
{ name: 'piaofang', note: '电影票房排行',},
|
||||
{ name: 'ciba', note: '词霸每日一句',},
|
||||
{ name: 'deepseek', note: 'deepseek分析工具',},
|
||||
|
||||
// { name: '(修改这里)', note: '(修改这里)',}, // 添加新增内容
|
||||
];
|
||||
|
||||
|
||||
// 定义字段映射关系,标题和键的对应关系,用于动态个性化处理
|
||||
var configTitleMapping = {
|
||||
'工作表的名称': 'name',
|
||||
'备注': 'note',
|
||||
'只推送失败消息(是/否)': 'pushFailureOnly',
|
||||
'推送昵称(是/否)': 'pushNickname',
|
||||
'是否存活': 'isAlive',
|
||||
'更新时间': 'updateTime',
|
||||
'消息': 'message',
|
||||
'推送时间': 'pushTime',
|
||||
'推送方式': 'pushMethod',
|
||||
'是否通知': 'notify',
|
||||
'加入消息池': 'addToMessagePool',
|
||||
'推送优先级': 'pushPriority',
|
||||
'当日可推送次数': 'dailyPushLimit',
|
||||
'当日剩余推送次数': 'remainingDailyPushes',
|
||||
};
|
||||
|
||||
// PUSH表内容
|
||||
var pushContent = [
|
||||
['推送类型', '推送识别号(如:token、key)', '是否推送(是/否)'],
|
||||
['bark', 'xxxxxxxx', '否'],
|
||||
['pushplus', 'xxxxxxxx', '否'],
|
||||
['ServerChan', 'xxxxxxxx', '否'],
|
||||
['email', '若要邮箱发送,请配置EMAIL表', '否'],
|
||||
['dingtalk', 'xxxxxxxx', '否'],
|
||||
['discord', '请填入镜像webhook链接,自行处理Query参数', '否'],
|
||||
['qywx', 'xxxxxxxx', '否'],
|
||||
['xizhi', 'xxxxxxxx', '否'],
|
||||
['jishida', 'xxxxxxxx', '否'],
|
||||
['wxpusher', 'appToken|uid', '否'],
|
||||
]
|
||||
|
||||
// email表内容
|
||||
var emailContent = [
|
||||
['SMTP服务器域名', '端口', '发送邮箱', '授权码'],
|
||||
['smtp.qq.com', '465', 'xxxxxxxx@qq.com', 'xxxxxxxx']
|
||||
]
|
||||
|
||||
// 分配置表内容
|
||||
var subConfigContent = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)'],
|
||||
['xxxxxxxx1', '是', '昵称1'],
|
||||
['xxxxxxxx2', '否', '昵称2']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,叮咚买菜
|
||||
var subConfigDdmc = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'seedId_ddgy', 'propsId_ddgy', 'seedId_ddyt', 'propsId_ddty'],
|
||||
['xxxxxxxx1', '是', '昵称1', '填果园seedId', '填果园propsId', '填鱼塘seedId', '填鱼塘propsId'],
|
||||
['xxxxxxxx2', '否', '昵称2', '填果园seedId', '填果园propsId', '填鱼塘seedId', '填鱼塘propsId']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,WPS
|
||||
var subConfigWps = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '转存PPT(是/否)', '是否渠道1打卡(是/否)', '是否渠道2打卡(是/否)', 'Signature(渠道2)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '否', '是', '否' , 'xxxxxxxx' ,],
|
||||
['xxxxxxxx2', '否', '昵称2', '否', '是', '否' , 'xxxxxxxx' ,]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,小米商城
|
||||
var subConfigMi = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'mishop-client-id'],
|
||||
['xxxxxxxx1', '是', '昵称1', '100'],
|
||||
['xxxxxxxx2', '否', '昵称2', '100']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,golo汽修大师
|
||||
var subConfigGolo = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'username', 'password'],
|
||||
['xxxxxxxx1', '是', '昵称1', '此格填用户名', '此格填密码'],
|
||||
['xxxxxxxx2', '否', '昵称2', '此格填用户名', '此格填密码']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,parsdata
|
||||
var subConfigParsdata = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '优惠码'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,qcs
|
||||
var subConfigQcs = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'openId', 'unionId'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,恩山无线论坛
|
||||
var subConfigEswxlt = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'openId', 'unionId'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,xmdl
|
||||
var subConfigXmdl = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'username', 'password'],
|
||||
['xxxxxxxx1', '是', '昵称1', '此格填用户名', '此格填密码'],
|
||||
['xxxxxxxx2', '否', '昵称2', '此格填用户名', '此格填密码']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,hfweather和风天气
|
||||
var subConfigHfweather = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '省份/城市/区/经纬度/ID(手动输入)', '今日天气预报', '实时天气预报', '当天生活指数', '天气灾害预警', '逐小时天气预报', '分钟级降水','其他模式(可选)','消息过滤器(可选)','高级配置(可选)','实际定位(自动生成)','地区ID(自动生成)','经纬度(自动生成)','一致性校验(自动生成)','冗余观测站(自动生成)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '朝阳区', '是', '否', '否', '否', '否', '否', '', '', '', '', '', '', '', '', ''],
|
||||
// ['xxxxxxxx2', '否', '昵称2', '是', '否', '否', '否', '否', '否', '', '', '', '', '', '', '', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,ciba词霸每日一句
|
||||
var subConfigCiba = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '中文每日一句', '英文每日一句'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是', '是'],
|
||||
['xxxxxxxx2', '否', '昵称2', '是', '是']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,deepseek
|
||||
var subConfigDeepseek = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '模型', '提示词'],
|
||||
['xxxxxxxx1', '是', '昵称1', 'deepseek-r1-distill-qwen-32b', '请用中文说明哪些运行失败了,带上有趣的emoji,限制在100字以内。'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,remind
|
||||
var subConfigRemind = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '提醒日期(自动生成)', '标题', '提醒单位', '月', '日'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', '🎂生日到啦!', '农历', '1', '1'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '🥳提醒到啦!', '阳历', '11', '22']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,qrcode
|
||||
var subConfigQrcode = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '二维码内容', '二维码(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', 'github.com/imoki', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,weekplan
|
||||
var subConfigWeekplan = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', '', '', '', '', '', '', '', '',],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '', '', '', '', '', '', '', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,oilprice
|
||||
var subConfigOilprice = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '地区', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '北京', '否'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
|
||||
// 定制化分配置表内容,bdsl
|
||||
var subConfigBdsl = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名'],
|
||||
['xxxxxxxx1', '是', '昵称1', 'github.com'],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,steamrank
|
||||
var subConfigSteamrank = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'appid'],
|
||||
['xxxxxxxx1', '是', '昵称1', '578080'],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,xingzuo
|
||||
var subConfigXingzuo = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '星座', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '白羊座', '是'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,wangzhe
|
||||
var subConfigWangzhe = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '英雄名'],
|
||||
['xxxxxxxx1', '是', '昵称1', '李白'],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,imgecy
|
||||
var subConfigImgecy = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,imgbing
|
||||
var subConfigImgbing = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,imgavatar
|
||||
var subConfigImgavatar = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,imglandscape
|
||||
var subConfigImglandscape = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,imgphone
|
||||
var subConfigImgphone = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,telsaorao
|
||||
var subConfigTelsaorao = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '手机号','检测报告(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,favicon
|
||||
var subConfigFavicon = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名','网站图标(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', 'github.com', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,telgsd
|
||||
var subConfigTelgsd = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '手机号','归属地(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,dwz
|
||||
var subConfigDwz = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名','短网址(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', 'github.com', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,fjzh
|
||||
var subConfigFjzh = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '简体','繁体(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '龙', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,lnglat
|
||||
var subConfigLnglat = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '经度', '纬度','结果(自动生成)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '', '', ''],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '', '']
|
||||
]
|
||||
|
||||
// 直接推送类
|
||||
// 定制化分配置表内容,dailynewscn
|
||||
var subConfigdailynewscn = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)', '新闻条数'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是', '全部'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '10']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,airabsorbed
|
||||
var subConfigairabsorbed = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)', '省份'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是', '北京'],
|
||||
['xxxxxxxx2', '否', '昵称2', '', '']
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,wbhot
|
||||
var subConfigwbhot = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,zhhot
|
||||
var subConfigzhhot = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,bdhot
|
||||
var subConfigbdhot = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,ssphot
|
||||
var subConfigssphot = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,kfc
|
||||
var subConfigkfc = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,miyu
|
||||
var subConfigmiyu = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,todayhistory
|
||||
var subConfigtodayhistory = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,zaoan
|
||||
var subConfigzaoan = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,wanan
|
||||
var subConfigwanan = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,oneyan
|
||||
var subConfigoneyan = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,chouq
|
||||
var subConfigchouq = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,tzgsc
|
||||
var subConfigtzgsc = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
// 定制化分配置表内容,shenhuifu
|
||||
var subConfigshenhuifu = [
|
||||
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
|
||||
['xxxxxxxx1', '是', '昵称1', '是',],
|
||||
['xxxxxxxx2', '否', '昵称2', '',]
|
||||
]
|
||||
|
||||
|
||||
// 定制化表
|
||||
var subConfig = {
|
||||
"ddmc" : subConfigDdmc,
|
||||
"wps" : subConfigWps,
|
||||
"golo" : subConfigGolo,
|
||||
"parsdata":subConfigParsdata,
|
||||
"qcs":subConfigQcs,
|
||||
"eswxlt":subConfigEswxlt,
|
||||
"xmdl":subConfigXmdl,
|
||||
"hfweather":subConfigHfweather,
|
||||
"ciba":subConfigCiba,
|
||||
"deepseek" : subConfigDeepseek,
|
||||
"remind" : subConfigRemind,
|
||||
"qrcode" : subConfigQrcode,
|
||||
"weekplan" : subConfigWeekplan,
|
||||
"oilprice" : subConfigOilprice,
|
||||
"bdsl" : subConfigBdsl,
|
||||
"steamrank" : subConfigSteamrank,
|
||||
"xingzuo" : subConfigXingzuo,
|
||||
"wangzhe" : subConfigWangzhe,
|
||||
"imgecy" : subConfigImgecy,
|
||||
"imgbing" : subConfigImgbing,
|
||||
"imgavatar" : subConfigImgavatar,
|
||||
"imglandscape" : subConfigImglandscape,
|
||||
"imgphone" : subConfigImgphone,
|
||||
"telsaorao" : subConfigTelsaorao,
|
||||
"favicon" : subConfigFavicon,
|
||||
"telgsd" : subConfigTelgsd,
|
||||
"dwz" : subConfigDwz,
|
||||
"fjzh" : subConfigFjzh,
|
||||
"lnglat" : subConfigLnglat,
|
||||
// 直推
|
||||
"dailynewscn" : subConfigdailynewscn,
|
||||
"airabsorbed" : subConfigairabsorbed,
|
||||
"wbhot" : subConfigwbhot,
|
||||
"zhhot" : subConfigzhhot,
|
||||
"bdhot" : subConfigbdhot,
|
||||
"ssphot" : subConfigssphot,
|
||||
"kfc" : subConfigkfc,
|
||||
"miyu" : subConfigmiyu,
|
||||
"todayhistory" : subConfigtodayhistory,
|
||||
"zaoan" : subConfigzaoan,
|
||||
"wanan" : subConfigwanan,
|
||||
"oneyan" : subConfigoneyan,
|
||||
"chouq" : subConfigchouq,
|
||||
"tzgsc" : subConfigtzgsc,
|
||||
"shenhuifu" : subConfigshenhuifu,
|
||||
}
|
||||
// var mosaic = "xxxxxxxx" // 马赛克
|
||||
// var strFail = "否"
|
||||
// var strTrue = "是"
|
||||
|
||||
main() // 入口
|
||||
|
||||
// CONFIG表添加超链接
|
||||
function hypeLink(){
|
||||
// console.log("添加超链接")
|
||||
let workSheet= Application.Sheets(confiWorkbook) //配置表
|
||||
// let workUsedRowEnd = workSheet.UsedRange.RowEnd //用户使用表格的最后一行
|
||||
let rowcol = getRowCol()
|
||||
let workUsedRowEnd = rowcol[0] // 行
|
||||
// console.log(workUsedRowEnd)
|
||||
for(let row = 2; row <= workUsedRowEnd; row++){
|
||||
link_name=workSheet.Range("A" + row).Text
|
||||
if (link_name == "") {
|
||||
break; // 如果为空行,则提前结束读取
|
||||
}
|
||||
link_name ='=HYPERLINK("#'+link_name+'!$A$1","'+link_name+'")' //设置超链接
|
||||
// console.log(link_name) // HYPERLINK("#PUSH!$A$1","PUSH")
|
||||
if(version == 1){
|
||||
// airscipt 1.0
|
||||
workSheet.Range("A" + row).Value =link_name
|
||||
}else{
|
||||
// airscipt 2.0
|
||||
workSheet.Range("A" + row).Value2 =link_name
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 判断表格行列数,并记录目前已写入的表格行列数。目的是为了不覆盖原有数据,便于更新
|
||||
function determineRowCol() {
|
||||
for (let i = 1; i < maxRow; i++) {
|
||||
let content = Application.Range("A" + i).Text
|
||||
if (content == "") // 如果为空行,则提前结束读取
|
||||
{
|
||||
row = i - 1; // 记录的是存在数据所在的行
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 超过最大行了,认为row为0,从头开始
|
||||
let length = colNum.length
|
||||
for (let i = 1; i <= length; i++) {
|
||||
content = Application.Range(colNum[i - 1] + "1").Text
|
||||
if (content == "") // 如果为空行,则提前结束读取
|
||||
{
|
||||
col = i - 1; // 记录的是存在数据所在的行
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 超过最大行了,认为col为0,从头开始
|
||||
// console.log("✨ 当前激活表已存在:" + row + "行," + col + "列")
|
||||
}
|
||||
|
||||
// 获取当前激活表的表的行列
|
||||
function getRowCol() {
|
||||
let row = 0
|
||||
let col = 0
|
||||
for (let i = 1; i < maxRow; i++) {
|
||||
let content = Application.Range("A" + i).Text
|
||||
if (content == "") // 如果为空行,则提前结束读取
|
||||
{
|
||||
row = i - 1; // 记录的是存在数据所在的行
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 超过最大行了,认为row为0,从头开始
|
||||
let length = colNum.length
|
||||
for (let i = 1; i <= length; i++) {
|
||||
content = Application.Range(colNum[i - 1] + "1").Text
|
||||
if (content == "") // 如果为空行,则提前结束读取
|
||||
{
|
||||
col = i - 1; // 记录的是存在数据所在的行
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 超过最大行了,认为col为0,从头开始
|
||||
|
||||
// console.log("✨ 当前激活表已存在:" + row + "行," + col + "列")
|
||||
return [row, col]
|
||||
}
|
||||
|
||||
// 激活工作表函数
|
||||
function ActivateSheet(sheetName) {
|
||||
let flag = 0;
|
||||
try {
|
||||
let sheet = Application.Sheets.Item(sheetName)
|
||||
sheet.Activate()
|
||||
// console.log("🍾 激活工作表:" + sheet.Name)
|
||||
flag = 1;
|
||||
} catch {
|
||||
flag = 0;
|
||||
// console.log("📢 无法激活工作表,工作表可能不存在")
|
||||
// console.log("🪄 创建工作表:" + sheetName)
|
||||
createSheet(sheetName)
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
// 统一编辑表函数
|
||||
function editConfigSheet(content) {
|
||||
determineRowCol();
|
||||
let lengthRow = content.length
|
||||
let lengthCol = content[0].length
|
||||
if (row == 0) { // 如果行数为0,认为是空表,开始写表头
|
||||
for (let i = 0; i < lengthCol; i++) {
|
||||
if(version == 1){
|
||||
// airscipt 1.0
|
||||
Application.Range(colNum[i] + 1).Value = content[0][i]
|
||||
}else{
|
||||
// airscript 2.0(Beta)
|
||||
Application.Range(colNum[i] + 1).Value2 = content[0][i]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
row += 1; // 让行数加1,代表写入了表头。
|
||||
}
|
||||
|
||||
// 从已写入的行的后一行开始逐行写入数据
|
||||
// 先写行
|
||||
for (let i = 1 + row; i <= lengthRow; i++) { // 从未写入区域开始写
|
||||
for (let j = 0; j < lengthCol; j++) {
|
||||
if(version == 1){
|
||||
// airscipt 1.0
|
||||
Application.Range(colNum[j] + i).Value = content[i - 1][j]
|
||||
}else{
|
||||
// airscript 2.0(Beta)
|
||||
Application.Range(colNum[j] + i).Value2 = content[i - 1][j]
|
||||
}
|
||||
}
|
||||
}
|
||||
// 再写列
|
||||
for (let j = col; j < lengthCol; j++) {
|
||||
for (let i = 1; i <= lengthRow; i++) { // 从未写入区域开始写
|
||||
if(version == 1){
|
||||
// airscipt 1.0
|
||||
Application.Range(colNum[j] + i).Value = content[i - 1][j]
|
||||
}else{
|
||||
// airscript 2.0(Beta)
|
||||
Application.Range(colNum[j] + i).Value2 = content[i - 1][j]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 存储已存在的表
|
||||
function storeWorkbook() {
|
||||
// 工作簿(Workbook)中所有工作表(Sheet)的集合,下面两种写法是一样的
|
||||
let sheets = Application.ActiveWorkbook.Sheets
|
||||
sheets = Application.Sheets
|
||||
|
||||
// 打印所有工作表的名称
|
||||
for (let i = 1; i <= sheets.Count; i++) {
|
||||
workbook[i - 1] = (sheets.Item(i).Name)
|
||||
// console.log(workbook[i-1])
|
||||
}
|
||||
}
|
||||
|
||||
// 判断表是否已存在
|
||||
function workbookComp(name) {
|
||||
let flag = 0;
|
||||
let length = workbook.length
|
||||
for (let i = 0; i < length; i++) {
|
||||
if (workbook[i] == name) {
|
||||
flag = 1;
|
||||
console.log("✨ " + name + "表已存在")
|
||||
break
|
||||
}
|
||||
}
|
||||
return flag
|
||||
}
|
||||
|
||||
// 创建表,若表已存在则不创建,直接写入数据
|
||||
function createSheet(sheetname) {
|
||||
// const defaultName = Application.Sheets.DefaultNewSheetName
|
||||
// 工作表对象
|
||||
if (!workbookComp(sheetname)) {
|
||||
console.log("🪄 创建工作表:" + sheetname)
|
||||
try{
|
||||
Application.Sheets.Add(
|
||||
null,
|
||||
Application.ActiveSheet.Name,
|
||||
1,
|
||||
Application.Enum.XlSheetType.xlWorksheet,
|
||||
sheetname
|
||||
)
|
||||
|
||||
}catch{
|
||||
// console.log("😶🌫️ 适配airscript 2.0版本")
|
||||
version = 2 // 设置版本为2.0
|
||||
let newSheet = Application.Sheets.Add(undefined, undefined, undefined, xlWorksheet)
|
||||
// let newSheet = Application.Worksheets.Add()
|
||||
newSheet.Name = sheetname
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// airscript检测版本
|
||||
function checkVesion(){
|
||||
try{
|
||||
let temp = Application.Range("A1").Text;
|
||||
Application.Range("A1").Value = temp
|
||||
console.log("😶🌫️ 检测到当前airscript版本为1.0,进行1.0适配")
|
||||
}catch{
|
||||
console.log("😶🌫️ 检测到当前airscript版本为2.0,进行2.0适配")
|
||||
version = 2
|
||||
}
|
||||
}
|
||||
|
||||
// 主函数执行流程
|
||||
function main(){
|
||||
checkVesion() // 版本检测,以进行不同版本的适配
|
||||
|
||||
// 动态写入CONFIG表数组数据操作
|
||||
// 加入标题
|
||||
configContent[0] = configTitle
|
||||
// 写入标题下内容
|
||||
for (let i = 0; i < configBody.length; i++) {
|
||||
let row = [];
|
||||
for (let j = 0; j < configContent[0].length; j++) {
|
||||
let fieldName = configContent[0][j];
|
||||
let fieldValue = configBody[i][configTitleMapping[fieldName]];
|
||||
if (fieldValue === undefined) {
|
||||
fieldValue = configBodyDefault[j]; // 如果字段不存在,使用默认值
|
||||
}
|
||||
row.push(fieldValue);
|
||||
}
|
||||
configContent.push(row);
|
||||
}
|
||||
|
||||
storeWorkbook()
|
||||
// console.log("🪄 创建主分配表")
|
||||
// const sheet = Application.ActiveSheet // 激活当前表
|
||||
// sheet.Name = confiWorkbook // 将当前工作表的名称改为 CONFIG
|
||||
createSheet(confiWorkbook)
|
||||
ActivateSheet(confiWorkbook)
|
||||
editConfigSheet(configContent) // editConfig()
|
||||
|
||||
// 加入跳转超链接
|
||||
hypeLink()
|
||||
|
||||
// console.log("🪄 创建推送表")
|
||||
createSheet(pushWorkbook)
|
||||
ActivateSheet(pushWorkbook)
|
||||
editConfigSheet(pushContent) // editPush()
|
||||
|
||||
// console.log("🪄 创建邮箱表")
|
||||
createSheet(emailWorkbook)
|
||||
ActivateSheet(emailWorkbook)
|
||||
editConfigSheet(emailContent)
|
||||
|
||||
let length = configContent.length - 1
|
||||
// console.log(length)
|
||||
console.log("🍳 正在检索分配置表进行创建")
|
||||
for (let i = 0; i < length; i++) {
|
||||
let workbook = ""
|
||||
let subworkbook = ""
|
||||
// console.log(configContent[i+1][4])
|
||||
if(configContent[i+1][4] == "是"){ // 存活的才生成表
|
||||
// 部分表合并,如ddmc_ddgy,则以_为分割,生成ddmc表
|
||||
workbook = configContent[i+1][0].split("_")[0] // 使用下划线作为分隔符,取第一个部分)
|
||||
ActivateSheet(workbook) // 根据CONFIG表来生成
|
||||
editConfigSheet(subConfigContent)
|
||||
|
||||
// 检查是否有定制化内容,有则生成
|
||||
try{
|
||||
subworkbook = subConfig[workbook]
|
||||
// console.log(subworkbook)
|
||||
if(subworkbook != undefined){
|
||||
ActivateSheet(workbook) // 激活分配置表
|
||||
editConfigSheet(subworkbook)
|
||||
// console.log("存在定制化内容")
|
||||
}
|
||||
}catch{
|
||||
// 无定制化内容
|
||||
// console.log("无定制化内容")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log("🎉 更新完成")
|
||||
|
||||
}
|
||||
136
脚本库/微信小程序/抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py
Normal file
136
脚本库/微信小程序/抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py
Normal file
@@ -0,0 +1,136 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/Babycare.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/Babycare.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: Babycare.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 4a2e1c449fcddaa87cd53358847de65c3839d1ffb325484844f5db88e04e1971
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#by:哆啦A梦
|
||||
#TL库
|
||||
#入口:小程序-Babycare官方旗舰店
|
||||
#抓包api.bckid.com.cn域名下的authorization,多账号换行分割
|
||||
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 从环境变量中获取 token,支持多账号换行分割
|
||||
tokens = os.environ.get('Babycare', '').split('\n')
|
||||
|
||||
# 定义 URL
|
||||
url = "https://api.bckid.com.cn/operation/front/bonus/userSign/v3/sign"
|
||||
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||
|
||||
# 定义请求头
|
||||
headers = {
|
||||
"Host": "api.bckid.com.cn",
|
||||
"content-length": "2",
|
||||
"content-type": "application/json",
|
||||
"charset": "utf-8",
|
||||
"referer": "https://servicewechat.com/wxab5642d7bced2dcc/447/page-frame.html",
|
||||
"accept-encoding": "gzip, deflate, br"
|
||||
}
|
||||
|
||||
def print_divider():
|
||||
print("\n" + "=" * 35)
|
||||
|
||||
def print_account_info(account_num, token):
|
||||
print_divider()
|
||||
print(f"🤖 正在为账号 {account_num} 签到...")
|
||||
print_divider()
|
||||
|
||||
def print_sign_success(account_num, result):
|
||||
print_divider()
|
||||
print(f"🎉 账号 {account_num} 签到成功!")
|
||||
print(f"💪 最大连续签到天数: {result.get('maxSignDay', '信息获取失败')}")
|
||||
print(f"📅 当前连续签到天数: {result.get('signDaysCount', '信息获取失败')}")
|
||||
print(f"🎁 抽奖机会: {result.get('lotteryCount', '信息获取失败')}")
|
||||
print_divider()
|
||||
|
||||
def print_already_signed(account_num):
|
||||
|
||||
print(f"👻 账号 {account_num} 今天已经签到过了,请明天再来!")
|
||||
print_divider()
|
||||
|
||||
def print_sign_failed(account_num, message):
|
||||
|
||||
print(f"❌ 账号 {account_num} 签到失败!错误信息: {message}")
|
||||
print_divider()
|
||||
|
||||
def print_empty_token(account_num):
|
||||
|
||||
print(f"⚠️ 账号 {account_num} 的 token 为空,跳过")
|
||||
print_divider()
|
||||
|
||||
def print_request_error(account_num, error):
|
||||
|
||||
print(f"⚠️ 账号 {account_num} 请求异常: {error}")
|
||||
print_divider()
|
||||
|
||||
def get_proclamation():
|
||||
try:
|
||||
print("\n" + "=" * 35)
|
||||
print("📢 公告信息")
|
||||
|
||||
|
||||
response = requests.get(primary_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print(response.text)
|
||||
print("=" * 35 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
return
|
||||
else:
|
||||
print(f"尝试获取公告,状态码: {response.status_code}, 尝试备用链接...")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"获取公告时发生错误: {e}, 尝试备用链接...")
|
||||
|
||||
try:
|
||||
response = requests.get(backup_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print(response.text)
|
||||
print("=" * 35 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
else:
|
||||
print(f"⚠️ 获取公告失败,状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。")
|
||||
|
||||
print_divider()
|
||||
print("🚀 开始执行签到任务")
|
||||
|
||||
|
||||
get_proclamation()
|
||||
|
||||
# 添加账号编号提示
|
||||
for idx, token in enumerate(tokens, start=1):
|
||||
if not token.strip():
|
||||
print_empty_token(idx)
|
||||
continue
|
||||
|
||||
print_account_info(idx, token)
|
||||
headers["authorization"] = token.strip()
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=json.dumps({}))
|
||||
|
||||
if response.status_code == 200:
|
||||
json_response = response.json()
|
||||
if json_response.get("code") == "200":
|
||||
print_sign_success(idx, json_response.get('body', {}))
|
||||
elif json_response.get("code") == "400":
|
||||
print_already_signed(idx)
|
||||
else:
|
||||
print_sign_failed(idx, json_response.get("message", "未知错误"))
|
||||
else:
|
||||
print_sign_failed(idx, f"HTTP状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print_request_error(idx, e)
|
||||
except json.JSONDecodeError:
|
||||
print_sign_failed(idx, "响应内容不是有效的 JSON 格式")
|
||||
|
||||
|
||||
print("🏆 所有账号签到任务完成!")
|
||||
print_divider()
|
||||
536
脚本库/微信小程序/抓包版/CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py
Normal file
536
脚本库/微信小程序/抓包版/CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py
Normal file
@@ -0,0 +1,536 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/CHERWIN_TOOLS.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/CHERWIN_TOOLS.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: CHERWIN_TOOLS.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 9a1e14399666b2b55948eb1b7bcdd1a38f233c87b61f7e7d0c592bb67b0d42e3
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import importlib.util
|
||||
import random
|
||||
import string
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import requests
|
||||
from http import HTTPStatus
|
||||
from datetime import datetime
|
||||
|
||||
NOW_TOOLS_VERSION = '2024.05.27'
|
||||
if os.path.isfile('DEV_ENV.py'):
|
||||
import DEV_ENV
|
||||
|
||||
IS_DEV = True
|
||||
else:
|
||||
IS_DEV = False
|
||||
|
||||
|
||||
# 尝试导入包
|
||||
def import_or_install(package_name, import_name=None):
|
||||
# 如果传入了 import_name,则使用它来检查模块,否则默认与包名相同
|
||||
import_name = import_name or package_name
|
||||
try:
|
||||
# 检查模块是否已安装
|
||||
package_spec = importlib.util.find_spec(import_name)
|
||||
if package_spec is None:
|
||||
print(f"{package_name} 模块未安装. 开始安装...")
|
||||
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package_name])
|
||||
print(f"{package_name} 模块安装完成。")
|
||||
else:
|
||||
print(f"{package_name} 模块已安装。")
|
||||
# 尝试导入模块检查是否安装成功
|
||||
__import__(import_name)
|
||||
module = importlib.import_module(import_name)
|
||||
print(f"{import_name} 模块导入成功.")
|
||||
return module
|
||||
except ImportError as e:
|
||||
print(f"无法导入 {import_name} 模块. 错误信息: {e}")
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"安装 {package_name} 模块时出错. 错误信息: {e}")
|
||||
except Exception as e:
|
||||
print(f"处理 {package_name} 模块时发生错误. 错误信息: {e}")
|
||||
|
||||
|
||||
def SAVE_INVITE_CODE(file_name, new_data):
|
||||
# 读取现有JSON文件(如果存在)
|
||||
try:
|
||||
with open(file_name, 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
except FileNotFoundError:
|
||||
# 如果文件不存在,创建所需目录并一个新的空JSON文件
|
||||
directory = os.path.dirname(file_name)
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
data = {}
|
||||
# 检查是否已存在相同的键,如果存在,合并数据
|
||||
for key, value in new_data.items():
|
||||
if key in data:
|
||||
# 如果键已存在,将新数据合并到现有数据中
|
||||
data[key].update(value)
|
||||
else:
|
||||
# 如果键不存在,直接插入新数据
|
||||
data[key] = value
|
||||
# 将更新后的数据写入JSON文件
|
||||
with open(file_name, 'w', encoding='utf-8') as file:
|
||||
json.dump(data, file, indent=4)
|
||||
|
||||
|
||||
# 将参数转换为字典
|
||||
def create_dict_from_string(self, data_string):
|
||||
params = {}
|
||||
key_value_pairs = data_string.split(',')
|
||||
for pair in key_value_pairs:
|
||||
key, value = pair.split('=')
|
||||
params[key] = value
|
||||
return params
|
||||
|
||||
|
||||
def compare_versions(local_version, server_version):
|
||||
local_parts = local_version.split('.') # 将本地版本号拆分成数字部分
|
||||
server_parts = server_version.split('.') # 将服务器版本号拆分成数字部分
|
||||
for l, s in zip(local_parts, server_parts):
|
||||
if int(l) < int(s):
|
||||
return True
|
||||
# 当前版本低于服务器版本
|
||||
elif int(l) > int(s):
|
||||
return False
|
||||
# 当前版本高于服务器版本
|
||||
# 如果上述循环没有返回结果,则表示当前版本与服务器版本的数字部分完全相同
|
||||
if len(local_parts) < len(server_parts):
|
||||
return True # 当前版本位数较短,即版本号形如 x.y 比 x.y.z 低
|
||||
else:
|
||||
return False # 当前版本与服务器版本相同或更高
|
||||
|
||||
|
||||
def CHECK_UPDATE_NEW(local_version, server_version, server_script_url, script_filename, server_version_url=None,
|
||||
APP_NAME=None):
|
||||
"""
|
||||
检查版本并更新
|
||||
|
||||
Args:
|
||||
local_version (str): 本地版本号
|
||||
server_version_url (str): 服务器版本文件地址
|
||||
server_script_url (str): 服务器脚本地址
|
||||
script_filename (str): 要保存的脚本文件名
|
||||
|
||||
Returns:
|
||||
bool: 是否进行了更新操作
|
||||
"""
|
||||
print(f'当前检测:【{script_filename}】')
|
||||
try:
|
||||
if server_version_url:
|
||||
# 获取服务器版本号
|
||||
response = requests.get(server_version_url, verify=False)
|
||||
response.raise_for_status() # Raises an HTTPError for bad responses
|
||||
# print(response.text)
|
||||
server_version = response.text.strip() # 去除首尾空格
|
||||
if "code" in server_version:
|
||||
print('【获取远程版本号失败,设为本地同版本】')
|
||||
server_version = local_version
|
||||
if not server_version: server_version = NOW_TOOLS_VERSION
|
||||
print(f'本地版本:【{local_version}】')
|
||||
print(f'服务器版本:【{server_version}】')
|
||||
if compare_versions(local_version, server_version):
|
||||
# 需要更新,下载服务器脚本
|
||||
AUTO_UPDATE = os.getenv("SCRIPT_UPDATE", "True").lower() != "false"
|
||||
# print(AUTO_UPDATE)
|
||||
if AUTO_UPDATE:
|
||||
print(">>>>>>>发现新版本的脚本,默认自动更新,准备更新...")
|
||||
print(">>>>>>>禁用更新请定义变量export SCRIPT_UPDATE = 'False'")
|
||||
if down_file(script_filename, server_script_url):
|
||||
print(f'请重新运行新脚本\n')
|
||||
return True
|
||||
else:
|
||||
print(">>>>>>>发现新版本的脚本,您禁用了自动更新,如需启用请删除变量SCRIPT_UPDATE\n")
|
||||
else:
|
||||
print(f'无需更新\n')
|
||||
return False
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f'发生网络错误:{e}')
|
||||
server_base_url = f"https://py.cherwin.cn/{APP_NAME}/"
|
||||
server_script_url = f"{server_base_url}{script_filename}"
|
||||
CHECK_UPDATE_NEW(local_version, server_version, server_script_url, script_filename, APP_NAME=APP_NAME)
|
||||
except Exception as e:
|
||||
print(f'发生未知错误:{e}')
|
||||
return False # 返回 False 表示没有进行更新操作
|
||||
|
||||
|
||||
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 get_AuthorInviteCode(url):
|
||||
global AuthorCode
|
||||
try:
|
||||
response = requests.get(url, verify=False, timeout=10)
|
||||
if response.status_code == 200:
|
||||
content = json.loads(response.text)
|
||||
AuthorCode = list(content.values())
|
||||
# print(f'获取到作者邀请码:{AuthorCode}')
|
||||
return AuthorCode
|
||||
else:
|
||||
# print("无法获取文件。状态代码:", response.status_code)
|
||||
return {}
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
return {}
|
||||
|
||||
|
||||
def CHECK_PARAMENTERS(index, input_string, required_parameters):
|
||||
# required_parameters = ['deviceid', 'jysessionid', 'shopid', 'memberid', 'access_token', 'sign']
|
||||
|
||||
# 记录缺少的参数
|
||||
missing_parameters = []
|
||||
# 将输入字符串和参数列表中的所有字符都转换为小写
|
||||
input_string_lower = input_string.lower()
|
||||
required_parameters_lower = [param.lower() for param in required_parameters]
|
||||
# 判断字符串中是否包含所有必需的参数
|
||||
for param in required_parameters_lower:
|
||||
if param not in input_string_lower:
|
||||
missing_parameters.append(param)
|
||||
if missing_parameters:
|
||||
print(f"\n第【{index + 1}】个账号,缺少以下参数:【{missing_parameters}】")
|
||||
return False
|
||||
else:
|
||||
print(f"\n第【{index + 1}】个账号,URL包含所有必需的参数,开始执行脚本")
|
||||
return True
|
||||
|
||||
|
||||
def QIANWEN(tongyiSysPromt, content, api_key):
|
||||
print('开始调用通义千问')
|
||||
# 检查dashscope库是否已安装
|
||||
dashscope = import_or_install('dashscope')
|
||||
if dashscope:
|
||||
dashscope.api_key = api_key
|
||||
response = dashscope.Generation.call(
|
||||
model='qwen-max',
|
||||
messages=[
|
||||
{"role": "system",
|
||||
"content": tongyiSysPromt},
|
||||
{"role": "user", "content": content}],
|
||||
seed=1234,
|
||||
top_p=0.8,
|
||||
result_format='message',
|
||||
enable_search=False,
|
||||
max_tokens=1500,
|
||||
temperature=1.0,
|
||||
repetition_penalty=1.0,
|
||||
)
|
||||
if response.status_code == HTTPStatus.OK:
|
||||
# print(response)
|
||||
video_info = response.output['choices'][0]['message']['content']
|
||||
print('通义生成【成功】!')
|
||||
return video_info
|
||||
else:
|
||||
print(f"无法解析通义返回的信息:{response}")
|
||||
return None
|
||||
else:
|
||||
print('dashscope 模块无法导入,函数无法执行。')
|
||||
|
||||
|
||||
# 取环境变量,并分割
|
||||
def ENV_SPLIT(input_str):
|
||||
parts = []
|
||||
if '&' in input_str:
|
||||
amp_parts = input_str.split('&')
|
||||
for part in amp_parts:
|
||||
if '#' in part:
|
||||
hash_parts = part.split('#')
|
||||
for hash_part in hash_parts:
|
||||
parts.append(hash_part)
|
||||
else:
|
||||
parts.append(part)
|
||||
# print(parts)
|
||||
return (parts)
|
||||
|
||||
elif '#' in input_str:
|
||||
hash_parts = input_str.split('#')
|
||||
# print(hash_parts)
|
||||
return (hash_parts)
|
||||
else:
|
||||
out_str = str(input_str)
|
||||
# print([out_str])
|
||||
return ([out_str])
|
||||
|
||||
|
||||
# 使用导入的模块进行验证码识别
|
||||
def CAPCODE(captcha_slider, captcha_bg):
|
||||
ddddocr = import_or_install('ddddocr')
|
||||
if ddddocr:
|
||||
slide = ddddocr.DdddOcr(det=False, ocr=False)
|
||||
with open(captcha_slider, 'rb') as f:
|
||||
target_bytes = f.read()
|
||||
with open(captcha_bg, 'rb') as f:
|
||||
background_bytes = f.read()
|
||||
res = slide.slide_match(target_bytes, background_bytes, simple_target=True)
|
||||
# print(res['target'][0])
|
||||
# print(type(res['target'][0]))
|
||||
return res['target'][0]
|
||||
else:
|
||||
print('ddddocr 模块无法导入,函数无法执行。')
|
||||
return False
|
||||
|
||||
|
||||
def send_wxpusher(UID, one_msg, APP_NAME, help=False):
|
||||
WXPUSHER = os.environ.get('WXPUSHER', False)
|
||||
if WXPUSHER:
|
||||
if help:
|
||||
push_res = wxpusher(WXPUSHER, APP_NAME + '互助', one_msg, UID, TIPS_HTML)
|
||||
else:
|
||||
push_res = wxpusher(WXPUSHER, APP_NAME, one_msg, UID, TIPS_HTML)
|
||||
print(push_res)
|
||||
|
||||
|
||||
def wxpusher(UID, msg, title, help=False):
|
||||
"""利用 wxpusher 的 web api 发送 json 数据包,实现微信信息的发送"""
|
||||
WXPUSHER = os.environ.get('WXPUSHER', False)
|
||||
if WXPUSHER:
|
||||
if help: title = title + '互助'
|
||||
print('\n------开始wxpusher推送------')
|
||||
print(f'标题:【{title}】\n内容:{msg}')
|
||||
webapi = 'http://wxpusher.zjiecode.com/api/send/message'
|
||||
msg = msg.replace("\n", "<br>")
|
||||
# tips = TIPS_HTML.replace("\n", "<br>")
|
||||
data = {
|
||||
"appToken": WXPUSHER,
|
||||
"content": f'{title}<br>{msg}<br>{TIPS_HTML}',
|
||||
# "summary": msg[:99], # 该参数可选,默认为 msg 的前10个字符
|
||||
"summary": title,
|
||||
"contentType": 2,
|
||||
"uids": [UID],
|
||||
"url": "https://gj.cherwin.cn"
|
||||
}
|
||||
try:
|
||||
result = requests.post(url=webapi, json=data)
|
||||
result.raise_for_status() # 对于非2xx状态码,抛出异常
|
||||
response_json = result.json()
|
||||
if response_json["success"]:
|
||||
return "------消息发送成功------\n"
|
||||
else:
|
||||
return f"消息发送失败。错误信息:{response_json['msg']}"
|
||||
except requests.exceptions.RequestException as e:
|
||||
return f"发送消息时发生错误:{str(e)}"
|
||||
except Exception as e:
|
||||
return f"发生意外错误:{str(e)}"
|
||||
|
||||
|
||||
def RESTART_SCRIPT(RESTART_SCRIPT_NAME):
|
||||
python = sys.executable
|
||||
os.execl(python, RESTART_SCRIPT_NAME, *sys.argv[1:])
|
||||
|
||||
|
||||
def CHECK():
|
||||
global CHERWIN_SCRIPT_CONFIG
|
||||
print('>>>>>>>开始获取版本信息...')
|
||||
baseurl = 'https://py.cherwin.cn/'
|
||||
TOOLS_NAME = 'CHERWIN_TOOLS.py'
|
||||
server_script_url = f'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/{TOOLS_NAME}'
|
||||
try:
|
||||
response = requests.get(f'{baseurl}CHERWIN_SCRIPT_CONFIG.json', verify=False)
|
||||
response.encoding = 'utf-8'
|
||||
# 读取内容
|
||||
CHERWIN_SCRIPT_CONFIG = response.json()
|
||||
if 'code' in CHERWIN_SCRIPT_CONFIG:
|
||||
CHERWIN_SCRIPT_CONFIG = None
|
||||
TOOLS_VERSION = CHERWIN_SCRIPT_CONFIG.get('TOOLS_VERSION', NOW_TOOLS_VERSION)
|
||||
|
||||
if CHECK_UPDATE_NEW(NOW_TOOLS_VERSION, TOOLS_VERSION, server_script_url, TOOLS_NAME):
|
||||
print('更新脚本完成')
|
||||
# print(f'重新检测[{TOOLS_NAME}]版本')
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
except:
|
||||
print('获取CHERWIN_SCRIPT_CONFIG.json失败')
|
||||
return False
|
||||
|
||||
|
||||
def GJJJ_SIGN():
|
||||
app_id = "667516"
|
||||
app_crypto = "FH3yRrHG2RfexND8"
|
||||
timestamp = int(time.time() * 1000)
|
||||
# timestamp = 1715180892075
|
||||
text = f"{app_id}{app_crypto}{timestamp}"
|
||||
sign = hashlib.md5(text.encode()).hexdigest()
|
||||
new_data = {
|
||||
'timestamp': str(timestamp),
|
||||
"sign": sign
|
||||
}
|
||||
return new_data
|
||||
|
||||
|
||||
def KWW_SIGN(memberId):
|
||||
timestamp = int(time.time() * 1000)
|
||||
random_num = random.randint(0, 31)
|
||||
u = [
|
||||
"A", "Z", "B", "Y", "C", "X", "D", "T", "E", "S", "F", "R", "G", "Q", "H", "P", "I", "O", "J", "N", "k",
|
||||
"M", "L", "a", "c", "d", "f", "h", "k", "p", "y", "n"]
|
||||
r = f"{timestamp}{memberId}{u[random_num]}"
|
||||
sign = hashlib.md5(r.encode()).hexdigest()
|
||||
update_headers = {
|
||||
"user-sign": sign,
|
||||
"user-paramname": "memberId",
|
||||
"user-timestamp": str(timestamp),
|
||||
"user-random": str(random_num)
|
||||
}
|
||||
return update_headers
|
||||
|
||||
|
||||
def TYQH_SIGN(parameters={}, body=None):
|
||||
sorted_keys = sorted(parameters.keys())
|
||||
parameter_strings = []
|
||||
for key in sorted_keys:
|
||||
if isinstance(parameters[key], dict):
|
||||
parameter_strings.append(f"{key}={json.dumps(parameters[key])}")
|
||||
else:
|
||||
parameter_strings.append(f"{key}={parameters[key]}")
|
||||
|
||||
current_time = int(datetime.now().timestamp() * 1000)
|
||||
secret_chars = list('BxzTx45uIGT25TTHIIBU2')
|
||||
last_three_digits = str(current_time)[-3:]
|
||||
for digit in last_three_digits:
|
||||
secret_chars.insert(int(digit), digit)
|
||||
|
||||
secret = hashlib.md5(''.join(secret_chars).encode()).hexdigest()
|
||||
nonce_str = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
|
||||
|
||||
sign_data = {
|
||||
'client_id': 'game',
|
||||
'nonstr': nonce_str,
|
||||
'timestamp': current_time,
|
||||
'body': json.dumps(body) if body else '',
|
||||
'query': '&'.join(parameter_strings) if parameter_strings else '',
|
||||
'secret': secret
|
||||
}
|
||||
|
||||
sign_string = '|'.join([str(v) for v in sign_data.values()])
|
||||
sign = hashlib.md5(sign_string.encode()).hexdigest().upper()
|
||||
sign_header = {
|
||||
'client_id': 'game',
|
||||
'timestamp': str(current_time),
|
||||
'nonstr': sign_data['nonstr'],
|
||||
'sign': sign
|
||||
}
|
||||
return sign_header
|
||||
|
||||
|
||||
def YDXQ_SIGN():
|
||||
sign_nonce = "tnFWIEFpVPJkOuNX4zdsKeBEMIakLS1RsnS7cH0Id6MjEEBGO"
|
||||
n = str(int(time.time()))
|
||||
# 拼接字符串并使用md5哈希。注意在Python中,需要对字符串编码才能生成哈希。
|
||||
sign_string = f"sign_{n}_sign{sign_nonce}"
|
||||
sign_hash = hashlib.md5(sign_string.encode()).hexdigest()
|
||||
return sign_hash, n
|
||||
|
||||
|
||||
def HXEK_SIGN(memberId, appid):
|
||||
# appid = "wxa1f1fa3785a47c7d"
|
||||
secret = 'damogic8888'
|
||||
# 获取GMT+8的当前时间戳
|
||||
timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||
# timestamp = '2024-05-22 16:07:54'
|
||||
# 生成随机数
|
||||
random_int = random.randint(1000000, 9999999)
|
||||
# random_int = 4270745
|
||||
# 构建待加密字符串
|
||||
raw_string = f"timestamp={timestamp}transId={appid}{timestamp}secret={secret}random={random_int}memberId={memberId}"
|
||||
# 使用MD5进行加密
|
||||
md5_hash = hashlib.md5(raw_string.encode())
|
||||
sign = md5_hash.hexdigest()
|
||||
return sign, random_int, timestamp
|
||||
|
||||
|
||||
def KPL_SIGN(url, params):
|
||||
secret_key = "d19b9f22f5aac41ac0b56a1947f82bce"
|
||||
# 提取URL路径(去掉域名部分)
|
||||
url_path = url.replace("https://app.tv.kohesport.qq.com", "")
|
||||
# 如果params是对象,转换为JSON字符串
|
||||
if isinstance(params, dict):
|
||||
params_str = json.dumps(params, separators=(',', ':'))
|
||||
else:
|
||||
params_str = params
|
||||
# 拼接路径、参数和密钥
|
||||
string_to_hash = f"{url_path}{params_str}{secret_key}"
|
||||
# 计算SHA256哈希值
|
||||
signature = hashlib.sha256(string_to_hash.encode('utf-8')).hexdigest()
|
||||
sign_header = {
|
||||
"X-TGATV-SignatureMethod": "sha256",
|
||||
"X-TGATV-SignatureVersion": "3",
|
||||
"X-TGATV-Signature": signature
|
||||
}
|
||||
return sign_header
|
||||
|
||||
def get_ip():
|
||||
response = requests.get('https://cdn.jsdelivr.net/gh/parserpp/ip_ports/proxyinfo.json',verify=False)
|
||||
# 使用正则表达式提取 IP 地址和端口号
|
||||
data = response.text
|
||||
lines = data.strip().split('\n')
|
||||
# json_objects = [json.loads(line) for line in lines]
|
||||
json_objects = [json.loads(line) for line in lines if json.loads(line)["country"] == "CN"]
|
||||
# json_array = json.dumps(json_objects, indent=4)
|
||||
if json_objects:
|
||||
selected = random.choice(json_objects)
|
||||
result = f"{selected['type']}://{selected['host']}:{selected['port']}"
|
||||
|
||||
proxies = {
|
||||
selected['type']: result,
|
||||
}
|
||||
print(f"当前代理:{result}")
|
||||
return proxies
|
||||
else:
|
||||
print("没匹配到CN的ip")
|
||||
return None
|
||||
|
||||
def main(APP_NAME, local_script_name, ENV_NAME, local_version, need_invite=False):
|
||||
global APP_INFO, TIPS, TIPS_HTML
|
||||
git_url = f'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/{local_script_name}'
|
||||
if CHECK():
|
||||
APP_INFO = CHERWIN_SCRIPT_CONFIG.get("APP_CONFIG", {}).get(ENV_NAME, {})
|
||||
# print(APP_INFO)
|
||||
server_version = APP_INFO.get('NEW_VERSION', '')
|
||||
if CHECK_UPDATE_NEW(local_version, server_version, git_url, local_script_name, APP_NAME=APP_NAME):
|
||||
print('更新成功,请重新运行脚本!')
|
||||
|
||||
if not APP_INFO.get('ENABLE', False) and not IS_DEV:
|
||||
print('当前脚本未开放')
|
||||
exit()
|
||||
TIPS = APP_INFO.get('NTC', '') if APP_INFO.get('NTC', '') else CHERWIN_SCRIPT_CONFIG.get('GLOBAL_NTC', '')
|
||||
TIPS_HTML = APP_INFO.get('NTC', '') if APP_INFO.get('NTC', '') else CHERWIN_SCRIPT_CONFIG.get('GLOBAL_NTC_HTML','')
|
||||
ENV = os.environ.get(ENV_NAME)
|
||||
if need_invite:
|
||||
AuthorCode = get_AuthorInviteCode(f'https://yhsh.ziyuand.cn/{ENV_NAME}_INVITE_CODE.json')
|
||||
else:
|
||||
AuthorCode = ''
|
||||
return ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode
|
||||
else:
|
||||
exit()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(NOW_TOOLS_VERSION)
|
||||
63
脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js
Normal file
63
脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js
Normal file
@@ -0,0 +1,63 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/DQ%E7%82%B9%E5%8D%95.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/DQ%E7%82%B9%E5%8D%95.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: DQ点单.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 5316110176df2c840df02f273bac74a7a52b8016fad19a4ec41d6a654fe2ec99
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
微信小程序DQ点单安卓版
|
||||
抓包wechat.dairyqueen.com.cn域名下的cookie
|
||||
变量名=dqdd
|
||||
多账号用&分开或者添加多个变量名
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709
|
||||
|
||||
*/
|
||||
|
||||
|
||||
const axios = require('axios');
|
||||
const dqdd = process.env.dqdd.split('&');
|
||||
|
||||
const url = 'https://wechat.dairyqueen.com.cn/memSignIn/signIn';
|
||||
|
||||
async function fetchSignInfo(cookie, accountIndex) {
|
||||
const headers = {
|
||||
'Host': 'wechat.dairyqueen.com.cn',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Length': '0',
|
||||
'charset': 'utf-8',
|
||||
'cookie': dqdd,
|
||||
'channel': '202',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/3628 MicroMessenger/8.0.50.2701(0x28003252) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'content-type': 'application/json',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'tenant': '1',
|
||||
'Referer': 'https://servicewechat.com/wx22e5ce7c766b4b78/149/page-frame.html'
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await axios.post(url, {}, { headers: headers });
|
||||
if (response.data.code === 200 && response.data.message === 'success') {
|
||||
console.log(`账号${accountIndex}签到成功`);
|
||||
return { success: true, message: `账号${accountIndex}签到成功` };
|
||||
} else {
|
||||
console.log(`账号${accountIndex}签到失败`);
|
||||
return { success: false, message: `账号${accountIndex}签到失败` };
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return { success: false, message: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
dqdd.forEach((dqdd, index) => {
|
||||
fetchSignInfo(dqdd, index + 1).then(result => {
|
||||
console.log(result);
|
||||
});
|
||||
});
|
||||
190
脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py
Normal file
190
脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py
Normal file
@@ -0,0 +1,190 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/KSOEUR.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/KSOEUR.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: KSOEUR.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: dff489d354c1462787fdedee1bd44f007984f36251621852b94afdd500410ad0
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#入口:小程序KSOEUR女装
|
||||
#抓包域名smp-api.iyouke.com下Authorization值,多账号换行分割
|
||||
#by:哆啦A梦
|
||||
|
||||
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
# 获取公告信息
|
||||
def get_proclamation():
|
||||
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||
try:
|
||||
response = requests.get(primary_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("\n" + "=" * 45)
|
||||
print("📢 公告信息")
|
||||
print("=" * 45)
|
||||
print(response.text)
|
||||
print("=" * 45 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
return
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"获取公告时发生错误: {e}, 尝试备用链接...")
|
||||
|
||||
try:
|
||||
response = requests.get(backup_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("\n" + "=" * 45)
|
||||
print("📢 公告信息")
|
||||
print("=" * 45)
|
||||
print(response.text)
|
||||
print("=" * 45 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
else:
|
||||
print(f"⚠️ 获取公告失败,状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。")
|
||||
|
||||
|
||||
# 查询账号信息和积分,并处理返回值
|
||||
def get_account_info_and_points(authorization):
|
||||
# 查询账号信息
|
||||
user_info_url = "https://smp-api.iyouke.com/dtapi/p/user/userInfo"
|
||||
user_info_headers = {
|
||||
"Host": "smp-api.iyouke.com",
|
||||
"Authorization": authorization,
|
||||
"Appid": "wx00796053aa93af0c",
|
||||
"Version": "2.9.40",
|
||||
"EnvVersion": "release",
|
||||
"Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007",
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Accept-Encoding": "gzip, deflate, br"
|
||||
}
|
||||
try:
|
||||
user_info_response = requests.get(user_info_url, headers=user_info_headers)
|
||||
if user_info_response.status_code == 200:
|
||||
user_info = user_info_response.json()
|
||||
|
||||
else:
|
||||
print(f"查询账号信息失败,状态码:{user_info_response.status_code}")
|
||||
print(f"返回内容:{user_info_response.text}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"查询账号信息时发生错误:{e}")
|
||||
print(f"返回内容:{user_info_response.text}") if 'user_info_response' in locals() else print("无法获取返回内容")
|
||||
return None
|
||||
|
||||
# 查询积分
|
||||
points_url = "https://smp-api.iyouke.com/dtapi/points/user/centerInfo"
|
||||
points_headers = {
|
||||
"Host": "smp-api.iyouke.com",
|
||||
"Authorization": authorization,
|
||||
"Appid": "wx00796053aa93af0c",
|
||||
"Version": "2.9.40",
|
||||
"EnvVersion": "release",
|
||||
"Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007",
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Accept-Encoding": "gzip, deflate, br"
|
||||
}
|
||||
try:
|
||||
points_response = requests.get(points_url, headers=points_headers)
|
||||
if points_response.status_code == 200:
|
||||
points_info = points_response.json()
|
||||
|
||||
else:
|
||||
print(f"查询积分失败,状态码:{points_response.status_code}")
|
||||
print(f"返回内容:{points_response.text}")
|
||||
points_info = None
|
||||
except Exception as e:
|
||||
print(f"查询积分时发生错误:{e}")
|
||||
print(f"返回内容:{points_response.text}") if 'points_response' in locals() else print("无法获取返回内容")
|
||||
points_info = None
|
||||
|
||||
# 处理并打印账号和积分信息
|
||||
mobile = user_info.get("userMobile", "")
|
||||
nick_name = user_info.get("nickName", "")
|
||||
print(f"账号:{mobile}(昵称:{nick_name})")
|
||||
if points_info and points_info.get("success"):
|
||||
points_balance = points_info.get("data", {}).get("pointsBalance", 0)
|
||||
print(f"当前积分:{points_balance}")
|
||||
else:
|
||||
print("无法获取积分信息")
|
||||
|
||||
return {
|
||||
"mobile": mobile,
|
||||
"nick_name": nick_name,
|
||||
"points_balance": points_info.get("data", {}).get("pointsBalance", "查询失败") if points_info else "查询失败"
|
||||
}
|
||||
|
||||
|
||||
# 签到功能
|
||||
def check_in(authorization):
|
||||
current_date = datetime.now().strftime("%Y-%m-%d")
|
||||
formatted_date = current_date.replace('-', '%2F')
|
||||
url = f"https://smp-api.iyouke.com/dtapi/pointsSign/user/sign?date={formatted_date}"
|
||||
headers = {
|
||||
"Host": "smp-api.iyouke.com",
|
||||
"Authorization": authorization,
|
||||
"Appid": "wx00796053aa93af0c",
|
||||
"Version": "2.9.40",
|
||||
"EnvVersion": "release",
|
||||
"Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007",
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Referer": "https://servicewechat.com/wx00796053aa93af0c/52/page-frame.html",
|
||||
"Accept-Encoding": "gzip, deflate, br"
|
||||
}
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 200:
|
||||
|
||||
return response.json()
|
||||
else:
|
||||
print(f"签到失败,状态码:{response.status_code}")
|
||||
print(f"返回内容:{response.text}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"签到时发生错误:{e}")
|
||||
print(f"返回内容:{response.text}") if 'response' in locals() else print("无法获取返回内容")
|
||||
return None
|
||||
|
||||
|
||||
# 主程序
|
||||
if __name__ == "__main__":
|
||||
# 获取公告
|
||||
get_proclamation()
|
||||
|
||||
# 从环境变量获取 authorization 值,支持多账号(换行分割)
|
||||
tokens = os.getenv("KSOEUR", "").split("\n")
|
||||
if not tokens or all(not token.strip() for token in tokens):
|
||||
print("❌ 未找到环境变量 KSOEUR 或其值为空,任务终止。")
|
||||
exit(1)
|
||||
|
||||
# 遍历每个账号执行任务
|
||||
for token in tokens:
|
||||
token = token.strip()
|
||||
if not token:
|
||||
continue
|
||||
|
||||
print(f"\n{'=' * 45}")
|
||||
print(f"正在执行任务中")
|
||||
print(f"{'=' * 45}\n")
|
||||
|
||||
account_data = get_account_info_and_points(token)
|
||||
if account_data:
|
||||
# 签到
|
||||
check_in_result = check_in(token)
|
||||
if check_in_result and check_in_result.get("success"):
|
||||
print(f"签到成功,获得奖励:{check_in_result.get('data', {}).get('signReward', 0)}")
|
||||
else:
|
||||
if check_in_result and check_in_result.get("errorMsg"):
|
||||
print(f"签到失败,原因:{check_in_result.get('errorMsg')}")
|
||||
else:
|
||||
print("签到失败")
|
||||
else:
|
||||
print("跳过该账号。")
|
||||
|
||||
print(f"\n{'-' * 45}\n")
|
||||
|
||||
print("所有任务执行完成!")
|
||||
134
脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js
Normal file
134
脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js
Normal file
@@ -0,0 +1,134 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/babycare.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/babycare.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/babycare.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 46258113afa13a0aa29d97ac2d6ba2b28ef58e8ff67ab1d7580a670ef603d5ba
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: babycare
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
微信小程序抓包的https://api.bckid.com.cn请求头authorization
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("babycare");
|
||||
let ckName = `babycare`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.info()
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://api.bckid.com.cn/operation/front/bonus/userSign/v3/sign`,
|
||||
headers: {
|
||||
'Host': 'api.bckid.com.cn',
|
||||
'authorization': this.token,
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129',
|
||||
},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊当前已签到${result.body.signDaysCountMod}天🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.message}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async info() {
|
||||
let options = {
|
||||
url: 'https://api.bckid.com.cn/operation/front/bonus/userBonus/getUserBonus',
|
||||
headers: {
|
||||
'Host': 'api.bckid.com.cn',
|
||||
'authorization': this.token,
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129',
|
||||
},
|
||||
method: 'POST',
|
||||
data: {}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊账户当前积分[${result.body.userBonus}],历史积分[${result.body.sumBonus}]💰`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}]积分查询失败:${result.message}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
231
脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js
Normal file
231
脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js
Normal file
@@ -0,0 +1,231 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/colorful.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/colorful.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/colorful.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: cf4ee821d1cebbbb8468b4a7c252b98a5e1b39d9a10f6089bdd659994878055c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 七彩虹微信小程序 签到&点赞
|
||||
cron: 30 10 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名:colorful
|
||||
抓取
|
||||
https://interface.skycolorful.com/api 请求头的authorization去掉Bearer # x-authorization去掉Bearer
|
||||
多账户&或换行
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("colorful七彩虹");
|
||||
let ckName = `colorful`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.token2 = this.user[1];
|
||||
this.signStatus = false;
|
||||
this.expireFlag = false;
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.getTokenExpireTime()
|
||||
await this.getUserInfo()
|
||||
await this.getSignInfo()
|
||||
|
||||
if (this.signStatus) {
|
||||
$.log(`账号[${this.index}]已签到`)
|
||||
return
|
||||
}
|
||||
await this.signInV2()
|
||||
}
|
||||
async getTokenExpireTime() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://interface.skycolorful.com/api/User/RefreshLoginTime`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
},
|
||||
data: { "phone": "" }
|
||||
}
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.Code != 0) {
|
||||
this.expireFlag = true
|
||||
}
|
||||
|
||||
}
|
||||
async refreshToken(DATA) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://interface.skycolorful.com/api/User/DecryptPhoneNumber`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
},
|
||||
data: DATA
|
||||
}
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.Code != 0) {
|
||||
this.expireFlag = true
|
||||
} else {
|
||||
this.token = result.Data.Token
|
||||
}
|
||||
}
|
||||
MD5(str) {
|
||||
const crypto = require('crypto');
|
||||
return crypto.createHash('md5').update(str).digest('hex');
|
||||
}
|
||||
request(options) {
|
||||
let appid = "815d8026-9a52-4445-a42c-a5443134232e"
|
||||
let uuid = $.uuid()
|
||||
let timestamp = Date.now()
|
||||
let sign = this.MD5(appid + timestamp + uuid + '2b5c01fb-7640-401a-8188-43a13190a626')
|
||||
let baseHeaders = {
|
||||
"User-Agent": defaultUserAgent,
|
||||
"requestid": uuid,
|
||||
"appid": appid,
|
||||
"ticks": "" + timestamp,
|
||||
"sign": sign,
|
||||
"authorization": "Bearer " + this.token,
|
||||
"x-authorization": "Bearer " + this.token2,
|
||||
"source": "Wx",
|
||||
"ucsource": "30",
|
||||
"user-from": "xcx",
|
||||
|
||||
|
||||
}
|
||||
options.headers = Object.assign(baseHeaders, options.headers)
|
||||
return axios.request(options)
|
||||
}
|
||||
|
||||
async signInV2() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://interface.skycolorful.com/api/User/SignV2`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊签到${result.Message}🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.Message}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getSignInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://interface.skycolorful.com/api/User/IsSignV2`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
}
|
||||
}
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
//打印签到结果
|
||||
this.signStatus = result.Data.IsSign
|
||||
|
||||
} else {
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://interface.skycolorful.com/api/User/GetUserInfo`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
}
|
||||
}
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `昵称:${result.Data.NickName}` + `积分:${result.Data.Point}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
708
脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js
Normal file
708
脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js
Normal file
@@ -0,0 +1,708 @@
|
||||
// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/golo.js
|
||||
// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/golo.js
|
||||
// # Repo: imoki/sign_script
|
||||
// # Path: polymerization/golo.js
|
||||
// # UploadedAt: 2025-08-25T21:29:14+08:00
|
||||
// # SHA256: 6d8c719f794ba28ac9f4e910cbcb6a4ad51d2898b88417781747992f35518128
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
name: "golo汽修大师"
|
||||
cron: 45 0 9 * * *
|
||||
脚本兼容: 金山文档(1.0),金山文档(2.0)
|
||||
更新时间:20241226
|
||||
环境变量名:无
|
||||
环境变量值:无
|
||||
备注:需要用户名和密码。
|
||||
golo汽修大师app或网页的密码。
|
||||
使用此脚本时app会自动退出登录,网站和app的积分是互通的。
|
||||
golo汽修大师网址:https://cicp.cnlaunch.com
|
||||
*/
|
||||
|
||||
var sheetNameSubConfig = "golo"; // 分配置表名称
|
||||
var pushHeader = "【golo汽修大师】";
|
||||
var sheetNameConfig = "CONFIG"; // 总配置表
|
||||
var sheetNamePush = "PUSH"; // 推送表名称
|
||||
var sheetNameEmail = "EMAIL"; // 邮箱表
|
||||
var flagSubConfig = 0; // 激活分配置工作表标志
|
||||
var flagConfig = 0; // 激活主配置工作表标志
|
||||
var flagPush = 0; // 激活推送工作表标志
|
||||
var line = 21; // 指定读取从第2行到第line行的内容
|
||||
var message = ""; // 待发送的消息
|
||||
var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置
|
||||
var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。
|
||||
var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识
|
||||
var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息
|
||||
var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】
|
||||
var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta)
|
||||
var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送
|
||||
var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送
|
||||
var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行
|
||||
|
||||
var jsonPush = [
|
||||
{ name: "bark", key: "xxxxxx", flag: "0" },
|
||||
{ name: "pushplus", key: "xxxxxx", flag: "0" },
|
||||
{ name: "ServerChan", key: "xxxxxx", flag: "0" },
|
||||
{ name: "email", key: "xxxxxx", flag: "0" },
|
||||
{ name: "dingtalk", key: "xxxxxx", flag: "0" },
|
||||
{ name: "discord", key: "xxxxxx", flag: "0" },
|
||||
]; // 推送数据,flag=1则推送
|
||||
var jsonEmail = {
|
||||
server: "",
|
||||
port: "",
|
||||
sender: "",
|
||||
authorizationCode: "",
|
||||
}; // 有效邮箱配置
|
||||
|
||||
// =================青龙适配开始===================
|
||||
|
||||
qlSwitch = 0
|
||||
|
||||
// =================青龙适配结束===================
|
||||
|
||||
// =================金山适配开始===================
|
||||
// airscript检测版本
|
||||
function checkVesion(){
|
||||
try{
|
||||
let temp = Application.Range("A1").Text;
|
||||
Application.Range("A1").Value = temp
|
||||
console.log("😶🌫️ 检测到当前airscript版本为1.0,进行1.0适配")
|
||||
}catch{
|
||||
console.log("😶🌫️ 检测到当前airscript版本为2.0,进行2.0适配")
|
||||
version = 2
|
||||
}
|
||||
}
|
||||
|
||||
// 推送相关
|
||||
// 获取时间
|
||||
function getDate(){
|
||||
let currentDate = new Date();
|
||||
currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString();
|
||||
return currentDate
|
||||
}
|
||||
|
||||
// 将消息写入CONFIG表中作为消息队列,之后统一发送
|
||||
function writeMessageQueue(message){
|
||||
// 当天时间
|
||||
let todayDate = getDate()
|
||||
flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表
|
||||
// 主配置工作表存在
|
||||
if (flagConfig == 1) {
|
||||
console.log("✨ 开始将结果写入主配置表");
|
||||
for (let i = 2; i <= 100; i++) {
|
||||
if(version == 1){
|
||||
// 找到指定的表行
|
||||
if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){
|
||||
// 写入更新的时间
|
||||
Application.Range("F" + (i + 2)).Value = todayDate
|
||||
// 写入消息
|
||||
Application.Range("G" + (i + 2)).Value = message
|
||||
console.log("✨ 写入结果完成");
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
// 找到指定的表行
|
||||
if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){
|
||||
// 写入更新的时间
|
||||
Application.Range("F" + (i + 2)).Value2 = todayDate
|
||||
// 写入消息
|
||||
Application.Range("G" + (i + 2)).Value2 = message
|
||||
console.log("✨ 写入结果完成");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 总推送
|
||||
function push(message) {
|
||||
writeMessageQueue(message) // 将消息写入CONFIG表中
|
||||
// if (message != "") {
|
||||
// // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】
|
||||
// let length = jsonPush.length;
|
||||
// let name;
|
||||
// let key;
|
||||
// for (let i = 0; i < length; i++) {
|
||||
// if (jsonPush[i].flag == 1) {
|
||||
// name = jsonPush[i].name;
|
||||
// key = jsonPush[i].key;
|
||||
// if (name == "bark") {
|
||||
// bark(message, key);
|
||||
// } else if (name == "pushplus") {
|
||||
// pushplus(message, key);
|
||||
// } else if (name == "ServerChan") {
|
||||
// serverchan(message, key);
|
||||
// } else if (name == "email") {
|
||||
// email(message);
|
||||
// } else if (name == "dingtalk") {
|
||||
// dingtalk(message, key);
|
||||
// } else if (name == "discord") {
|
||||
// discord(message, key);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// console.log("🍳 消息为空不推送");
|
||||
// }
|
||||
}
|
||||
|
||||
// 推送bark消息
|
||||
function bark(message, key) {
|
||||
if (key != "") {
|
||||
message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】
|
||||
message = encodeURIComponent(message)
|
||||
BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png"
|
||||
let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON;
|
||||
// 若需要修改推送的分组,则将上面一行改为如下的形式
|
||||
// let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名";
|
||||
let resp = HTTP.get(url, {
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
});
|
||||
sleep(5000);
|
||||
}
|
||||
}
|
||||
|
||||
// 推送pushplus消息
|
||||
function pushplus(message, key) {
|
||||
if (key != "") {
|
||||
message = encodeURIComponent(message)
|
||||
// url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message;
|
||||
url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题
|
||||
let resp = HTTP.fetch(url, {
|
||||
method: "get",
|
||||
});
|
||||
sleep(5000);
|
||||
}
|
||||
}
|
||||
|
||||
// 推送serverchan消息
|
||||
function serverchan(message, key) {
|
||||
if (key != "") {
|
||||
url =
|
||||
"https://sctapi.ftqq.com/" +
|
||||
key +
|
||||
".send" +
|
||||
"?title=" + messagePushHeader +
|
||||
"&desp=" +
|
||||
message;
|
||||
let resp = HTTP.fetch(url, {
|
||||
method: "get",
|
||||
});
|
||||
sleep(5000);
|
||||
}
|
||||
}
|
||||
|
||||
// email邮箱推送
|
||||
function email(message) {
|
||||
var myDate = new Date(); // 创建一个表示当前时间的 Date 对象
|
||||
var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示
|
||||
let server = jsonEmail.server;
|
||||
let port = parseInt(jsonEmail.port); // 转成整形
|
||||
let sender = jsonEmail.sender;
|
||||
let authorizationCode = jsonEmail.authorizationCode;
|
||||
|
||||
let mailer;
|
||||
mailer = SMTP.login({
|
||||
host: server,
|
||||
port: port,
|
||||
username: sender,
|
||||
password: authorizationCode,
|
||||
secure: true,
|
||||
});
|
||||
mailer.send({
|
||||
from: pushHeader + "<" + sender + ">",
|
||||
to: sender,
|
||||
subject: pushHeader + " - " + data_time,
|
||||
text: message,
|
||||
});
|
||||
// console.log("🍳 已发送邮件至:" + sender);
|
||||
console.log("🍳 已发送邮件");
|
||||
sleep(5000);
|
||||
}
|
||||
|
||||
// 邮箱配置
|
||||
function emailConfig() {
|
||||
console.log("🍳 开始读取邮箱配置");
|
||||
let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历
|
||||
let name;
|
||||
for (let i = 0; i < length; i++) {
|
||||
name = jsonPush[i].name;
|
||||
if (name == "email") {
|
||||
if (jsonPush[i].flag == 1) {
|
||||
let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表
|
||||
// 邮箱表存在
|
||||
// var email = {
|
||||
// 'email':'', 'port':'', 'sender':'', 'authorizationCode':''
|
||||
// } // 有效配置
|
||||
if (flag == 1) {
|
||||
console.log("🍳 开始读取邮箱表");
|
||||
for (let i = 2; i <= 2; i++) {
|
||||
// 从工作表中读取推送数据
|
||||
jsonEmail.server = Application.Range("A" + i).Text;
|
||||
jsonEmail.port = Application.Range("B" + i).Text;
|
||||
jsonEmail.sender = Application.Range("C" + i).Text;
|
||||
jsonEmail.authorizationCode = Application.Range("D" + i).Text;
|
||||
if (Application.Range("A" + i).Text == "") {
|
||||
// 如果为空行,则提前结束读取
|
||||
break;
|
||||
}
|
||||
}
|
||||
// console.log(jsonEmail)
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 推送钉钉机器人
|
||||
function dingtalk(message, key) {
|
||||
message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】
|
||||
let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key;
|
||||
let resp = HTTP.post(url, { msgtype: "text", text: { content: message } });
|
||||
// console.log(resp.text())
|
||||
sleep(5000);
|
||||
}
|
||||
|
||||
// 推送Discord机器人
|
||||
function discord(message, key) {
|
||||
message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】
|
||||
let url = key;
|
||||
let resp = HTTP.post(url, { content: message });
|
||||
//console.log(resp.text())
|
||||
sleep(5000);
|
||||
}
|
||||
|
||||
// =================金山适配结束===================
|
||||
// =================共用开始===================
|
||||
// main() // 入口
|
||||
|
||||
// function main(){
|
||||
checkVesion() // 版本检测,以进行不同版本的适配
|
||||
|
||||
flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表
|
||||
// 主配置工作表存在
|
||||
if (flagConfig == 1) {
|
||||
console.log("🍳 开始读取主配置表");
|
||||
let name; // 名称
|
||||
let onlyError;
|
||||
let nickname;
|
||||
for (let i = 2; i <= 100; i++) {
|
||||
// 从工作表中读取推送数据
|
||||
name = Application.Range("A" + i).Text;
|
||||
onlyError = Application.Range("C" + i).Text;
|
||||
nickname = Application.Range("D" + i).Text;
|
||||
if (name == "") {
|
||||
// 如果为空行,则提前结束读取
|
||||
break; // 提前退出,提高效率
|
||||
}
|
||||
if (name == sheetNameSubConfig) {
|
||||
if (onlyError == "是") {
|
||||
messageOnlyError = 1;
|
||||
console.log("🍳 只推送错误消息");
|
||||
}
|
||||
|
||||
if (nickname == "是") {
|
||||
messageNickname = 1;
|
||||
console.log("🍳 单元格用昵称替代");
|
||||
}
|
||||
|
||||
break; // 提前退出,提高效率
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flagPush = ActivateSheet(sheetNamePush); // 激活推送表
|
||||
// 推送工作表存在
|
||||
if (flagPush == 1) {
|
||||
console.log("🍳 开始读取推送工作表");
|
||||
let pushName; // 推送类型
|
||||
let pushKey;
|
||||
let pushFlag; // 是否推送标志
|
||||
for (let i = 2; i <= line; i++) {
|
||||
// 从工作表中读取推送数据
|
||||
pushName = Application.Range("A" + i).Text;
|
||||
pushKey = Application.Range("B" + i).Text;
|
||||
pushFlag = Application.Range("C" + i).Text;
|
||||
if (pushName == "") {
|
||||
// 如果为空行,则提前结束读取
|
||||
break;
|
||||
}
|
||||
jsonPushHandle(pushName, pushFlag, pushKey);
|
||||
}
|
||||
// console.log(jsonPush)
|
||||
}
|
||||
|
||||
// 邮箱配置函数
|
||||
emailConfig();
|
||||
|
||||
flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表
|
||||
if (flagSubConfig == 1) {
|
||||
console.log("🍳 开始读取分配置表");
|
||||
|
||||
if(qlSwitch != 1){ // 金山文档
|
||||
for (let i = 2; i <= line; i++) {
|
||||
var cookie = Application.Range("A" + i).Text;
|
||||
var exec = Application.Range("B" + i).Text;
|
||||
if (cookie == "") {
|
||||
// 如果为空行,则提前结束读取
|
||||
break;
|
||||
}
|
||||
if (exec == "是") {
|
||||
execHandle(cookie, i);
|
||||
}
|
||||
}
|
||||
message = messageMerge()// 将消息数组融合为一条总消息
|
||||
push(message); // 推送消息
|
||||
}else{
|
||||
for (let i = 2; i <= line; i++) {
|
||||
var cookie = Application.Range("A" + i).Text;
|
||||
var exec = Application.Range("B" + i).Text;
|
||||
if (cookie == "") {
|
||||
// 如果为空行,则提前结束读取
|
||||
break;
|
||||
}
|
||||
if (exec == "是") {
|
||||
console.log("🧑 开始执行用户:" + "1" )
|
||||
execHandle(cookie, i);
|
||||
break; // 只取一个
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// }
|
||||
|
||||
// 激活工作表函数
|
||||
function ActivateSheet(sheetName) {
|
||||
let flag = 0;
|
||||
try {
|
||||
// 激活工作表
|
||||
let sheet = Application.Sheets.Item(sheetName);
|
||||
sheet.Activate();
|
||||
console.log("🥚 激活工作表:" + sheet.Name);
|
||||
flag = 1;
|
||||
} catch {
|
||||
flag = 0;
|
||||
console.log("🍳 无法激活工作表,工作表可能不存在");
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
// 对推送数据进行处理
|
||||
function jsonPushHandle(pushName, pushFlag, pushKey) {
|
||||
let length = jsonPush.length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
if (jsonPush[i].name == pushName) {
|
||||
if (pushFlag == "是") {
|
||||
jsonPush[i].flag = 1;
|
||||
jsonPush[i].key = pushKey;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 将消息数组融合为一条总消息
|
||||
function messageMerge(){
|
||||
// console.log(messageArray)
|
||||
let message = ""
|
||||
for(i=0; i<messageArray.length; i++){
|
||||
if(messageArray[i] != "" && messageArray[i] != null)
|
||||
{
|
||||
message += "\n" + messageHeader[i] + messageArray[i] + ""; // 加上推送头
|
||||
}
|
||||
}
|
||||
if(message != "")
|
||||
{
|
||||
console.log("✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨")
|
||||
console.log(message + "\n") // 打印总消息
|
||||
console.log("✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨")
|
||||
}
|
||||
return message
|
||||
}
|
||||
|
||||
function sleep(d) {
|
||||
for (var t = Date.now(); Date.now() - t <= d; );
|
||||
}
|
||||
|
||||
// 获取sign,返回小写
|
||||
function getsign(data) {
|
||||
var sign = Crypto.createHash("md5")
|
||||
.update(data, "utf8")
|
||||
.digest("hex")
|
||||
// .toUpperCase() // 大写
|
||||
.toString();
|
||||
return sign;
|
||||
}
|
||||
|
||||
// =================共用结束===================
|
||||
|
||||
// cookie字符串转json格式
|
||||
function cookie_to_json(cookies) {
|
||||
var cookie_text = cookies;
|
||||
var arr = [];
|
||||
var text_to_split = cookie_text.split(";");
|
||||
for (var i in text_to_split) {
|
||||
var tmp = text_to_split[i].split("=");
|
||||
arr.push('"' + tmp.shift().trim() + '":"' + tmp.join(":").trim() + '"');
|
||||
}
|
||||
var res = "{\n" + arr.join(",\n") + "\n}";
|
||||
return JSON.parse(res);
|
||||
}
|
||||
|
||||
// 获取10 位时间戳
|
||||
function getts10() {
|
||||
var ts = Math.round(new Date().getTime() / 1000).toString();
|
||||
return ts;
|
||||
}
|
||||
|
||||
// 获取13位时间戳
|
||||
function getts13(){
|
||||
// var ts = Math.round(new Date().getTime()/1000).toString() // 获取10 位时间戳
|
||||
let ts = new Date().getTime()
|
||||
return ts
|
||||
}
|
||||
|
||||
// 符合UUID v4规范的随机字符串 b9ab98bb-b8a9-4a8a-a88a-9aab899a88b9
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = Math.random() * 16 | 0,
|
||||
v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
function getUUIDDigits(length) {
|
||||
var uuid = generateUUID();
|
||||
return uuid.replace(/-/g, '').substr(16, length);
|
||||
}
|
||||
|
||||
|
||||
// 登录获取token
|
||||
function login(url, headers, data){
|
||||
messageSuccess = ""
|
||||
messageFail = ""
|
||||
token = ""
|
||||
resp = HTTP.post(
|
||||
url,
|
||||
// JSON.stringify(data),
|
||||
data,
|
||||
{ headers: headers }
|
||||
);
|
||||
|
||||
// {"code":1,"msg":"登录成功","time":"","data":{"userinfo":{"id":,"username":"","nickname":"","intelligence":1,"mobile":"","avatar":"","score":0,"status":"normal","time_zone":{"key":"Asia\/Shanghai","show_name":"上海、北京"},"lang":"zh-cn","cicp_type":0,"is_yz":0,"token":"","user_id":,"createtime":,"expiretime":1717736728,"expires_in":,"is_store":0,"is_sub_store":0,"store":null,"is_operate":0,"money":{"balance":"0.00","task_reward":"0.00","credit":"0.00"},"golo_user_id":"","roles":{"store_role_name":"","other_role_names":[],"role_ids":[1005]},"is_lead_ranking":0,"need_bind":0,"xmpp":{"user_id":,"token":"","xmpp":{"ip":"","port":10105,"domain":"192.168.30.60:10205"}}}}}
|
||||
// {"code":0,"msg":"账户不正确","time":"","data":{}}
|
||||
if (resp.status == 200) {
|
||||
resp = resp.json();
|
||||
console.log(resp)
|
||||
code = resp["code"]
|
||||
|
||||
if(code == 1)
|
||||
{
|
||||
// nickname = resp["data"]["userinfo"]["nickname"]
|
||||
token = resp["data"]["userinfo"]["token"]
|
||||
console.log(token)
|
||||
respmsg = resp["msg"]
|
||||
content = "📢 " + respmsg + "\n"
|
||||
messageSuccess += content;
|
||||
console.log(content)
|
||||
}else
|
||||
{
|
||||
respmsg = resp["msg"]
|
||||
content = "📢 " + respmsg + "\n"
|
||||
messageFail += content;
|
||||
console.log(content);
|
||||
}
|
||||
} else {
|
||||
content = "❌ " + "登录失败\n"
|
||||
messageFail += content;
|
||||
console.log(content);
|
||||
}
|
||||
|
||||
msg = [messageSuccess, messageFail, token]
|
||||
return msg
|
||||
}
|
||||
|
||||
// 签到
|
||||
function sign(url, headers, data){
|
||||
messageSuccess = ""
|
||||
messageFail = ""
|
||||
flagstatus = 0 // 记录成功状态。0代表失败,1代表成功
|
||||
|
||||
// {"code":1,"msg":"签到成功","time":"","data":{"score":1}}
|
||||
// {"code":0,"msg":"参数不正确","time":"","data":{}}
|
||||
// {"code":0,"msg":"今天已签到,明天再来吧","time":"","data":{}}
|
||||
resp = HTTP.post(
|
||||
url,
|
||||
// JSON.stringify(data),
|
||||
data,
|
||||
{ headers: headers }
|
||||
);
|
||||
|
||||
if (resp.status == 200) {
|
||||
resp = resp.json();
|
||||
console.log(resp)
|
||||
code = resp["code"]
|
||||
|
||||
if(code == 1)
|
||||
{
|
||||
respmsg = resp["msg"]
|
||||
score = resp["data"]["score"]
|
||||
content = "🎉 " + respmsg + "获得" + score + "积分\n"
|
||||
messageSuccess += content;
|
||||
console.log(content)
|
||||
flagstatus = 1 // 签到成功
|
||||
}else
|
||||
{
|
||||
respmsg = resp["msg"]
|
||||
if(respmsg == "今天已签到,明天再来吧")
|
||||
{
|
||||
content = "📢 " + respmsg + "\n"
|
||||
messageSuccess += content;
|
||||
console.log(content)
|
||||
flagstatus = 1 // 签到成功,已签到
|
||||
}else
|
||||
{
|
||||
content = "📢 " + respmsg + "\n"
|
||||
messageFail += content;
|
||||
console.log(content);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
content = "❌ " + "签到失败\n"
|
||||
messageFail += content;
|
||||
console.log(content);
|
||||
}
|
||||
|
||||
// console.log(messageSuccess)
|
||||
msg = [messageSuccess, messageFail,flagstatus]
|
||||
return msg
|
||||
|
||||
}
|
||||
|
||||
// 具体的执行函数
|
||||
function execHandle(cookie, pos) {
|
||||
let messageSuccess = "";
|
||||
let messageFail = "";
|
||||
let messageName = "";
|
||||
// 推送昵称或单元格,还是不推送位置标识
|
||||
if (messageNickname == 1) {
|
||||
// 推送昵称或单元格
|
||||
messageName = Application.Range("C" + pos).Text;
|
||||
if(messageName == "")
|
||||
{
|
||||
messageName = "单元格A" + pos + "";
|
||||
}
|
||||
}
|
||||
|
||||
posLabel = pos-2 ; // 存放下标,从0开始
|
||||
messageHeader[posLabel] = "👨🚀 " + messageName
|
||||
// try {
|
||||
var url1 = "https://cicp.cnlaunch.com/api/user/login"; // 账户密码登录,得token
|
||||
var url2 = "https://cicp.cnlaunch.com/api/user/sign" // 签到,根据token签到
|
||||
// token = "75b67774-36ae-420b-8d21-cdcbb5def713"
|
||||
token = cookie
|
||||
username = Application.Range("D" + pos).Text;
|
||||
password = Application.Range("E" + pos).Text;
|
||||
|
||||
headers= {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586",
|
||||
// 'Cookie': cookie,
|
||||
"Content-Type":"application/x-www-form-urlencoded",
|
||||
}
|
||||
|
||||
|
||||
// 如果有token,先用token进行签到
|
||||
// 如果签到失败则用账密登录获取新token,然后签到
|
||||
flagstatus = 0 // 记录签到成功状态。0代表签到失败,1代表签到成功
|
||||
if(token != "" )
|
||||
{
|
||||
data = {
|
||||
"token":token
|
||||
}
|
||||
msg = sign(url2, headers, data) // 签到
|
||||
if(msg[2] == 1){ // 第三个元素存放签到状态,1为签到成功
|
||||
// 签到成功了,不用重新获取新token了
|
||||
flagstatus = 1 // 签到成功
|
||||
content = msg[0]
|
||||
messageSuccess += content;
|
||||
console.log(content)
|
||||
}else
|
||||
{
|
||||
console.log("🍳 此token签到失败,尝试登录获取新token")
|
||||
}
|
||||
}else
|
||||
{
|
||||
console.log("🍳 token为空,开始进行登录获取token")
|
||||
}
|
||||
|
||||
// 未签到时得执行流程
|
||||
if(flagstatus != 1)
|
||||
{
|
||||
// 登录获取token
|
||||
// openid=&parent_id=&username=&password=&token=
|
||||
data = {
|
||||
"openid":"",
|
||||
"parent_id":"",
|
||||
"username":username,
|
||||
"password":password,
|
||||
"token":"",
|
||||
}
|
||||
msg = login(url1, headers, data)
|
||||
if(msg[2] != ""){ // 第三个元素存放token
|
||||
// 签到成功了,已获取新token了
|
||||
token = msg[2]
|
||||
console.log("🍳 登录成功,已获得最新token:" + token)
|
||||
Application.Range("A" + pos).Value = token // 将token写入单元格内,可下次使用
|
||||
data = {
|
||||
"token":token
|
||||
}
|
||||
msg = sign(url2, headers, data) // 签到
|
||||
if(msg[2] == 1){ // 第三个元素存放签到状态,1为签到成功
|
||||
// 签到成功
|
||||
content = msg[0]
|
||||
messageSuccess += content;
|
||||
console.log(content)
|
||||
}else{
|
||||
// 签到失败
|
||||
content = msg[1]
|
||||
messageFail += content;
|
||||
console.log(content)
|
||||
}
|
||||
}else
|
||||
{
|
||||
console.log("❌ 获取最新token为空")
|
||||
// 未获取到token,登录失败
|
||||
content = msg[1]
|
||||
messageFail += content;
|
||||
console.log(content)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// } catch {
|
||||
// messageFail += messageName + "失败";
|
||||
// }
|
||||
|
||||
sleep(2000);
|
||||
if (messageOnlyError == 1) {
|
||||
messageArray[posLabel] = messageFail;
|
||||
} else {
|
||||
if(messageFail != ""){
|
||||
messageArray[posLabel] = messageFail + " " + messageSuccess;
|
||||
}else{
|
||||
messageArray[posLabel] = messageSuccess;
|
||||
}
|
||||
}
|
||||
|
||||
if(messageArray[posLabel] != "")
|
||||
{
|
||||
console.log(messageArray[posLabel]);
|
||||
}
|
||||
}
|
||||
326
脚本库/微信小程序/抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js
Normal file
326
脚本库/微信小程序/抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js
Normal file
@@ -0,0 +1,326 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/iqoo.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/iqoo.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/iqoo.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 43b07ea6d2f3f5b0a428cb2e5a0fce75e64589151300405fe4d9e6627a107548
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: IQOO社区小程序 积分脚本
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名iqoo
|
||||
抓取方法:https://bbs-api.iqoo.com请求头authorization 去掉Bearer
|
||||
多账户&或换行
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("iqoo社区");
|
||||
let ckName = `iqoo`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.postId = ''
|
||||
this.threadId = ''
|
||||
|
||||
}
|
||||
request(options) {
|
||||
let baseHeaders = {
|
||||
sign: this.getSign(options.method, options.url.split('https://bbs-api.iqoo.com')[1].split("?")[0], options.data ? options.data : ''),
|
||||
'authorization': 'Bearer ' + this.token,
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027",
|
||||
"x-platform": "mini",
|
||||
"x-visitor": "b89d8b0ffa920e96f3cb4c1f69ec2c66"
|
||||
}
|
||||
|
||||
options.headers = Object.assign(baseHeaders, options.headers)
|
||||
|
||||
|
||||
return axios.request(options)
|
||||
}
|
||||
async userInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/v3/user?userId=${this.id}`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: {
|
||||
userId: this.id
|
||||
}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 获取用户信息成功`)
|
||||
}
|
||||
}
|
||||
async run() {
|
||||
await this.getTreadList()
|
||||
if (this.threadId && this.postId) {
|
||||
await this.likePost(this.threadId, this.postId)
|
||||
await $.wait(5000)
|
||||
await this.sharePost(this.threadId)
|
||||
await $.wait(5000)
|
||||
|
||||
await this.viewPost(this.threadId)
|
||||
await $.wait(5000)
|
||||
|
||||
await this.commonPost(this.threadId)
|
||||
}
|
||||
await this.getDrawNum()
|
||||
await this.signIn()
|
||||
}
|
||||
async getDrawNum() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/today.draw.count`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: {}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0' && result.Data.count == 0) {
|
||||
//可以免费抽一次
|
||||
await this.draw()
|
||||
} else {
|
||||
//已签到
|
||||
$.log(`${this.index}账号[${this.index}] 抽奖过`)
|
||||
|
||||
}
|
||||
}
|
||||
async draw() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/luck.draw`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: {}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 抽奖成功 获得${result.Data.prize_name}`)
|
||||
}
|
||||
}
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/sign`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "from": "group" }
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊当前已签到${result.Data.serialDays}天🎉 获得积分${result.Data.score} 当前积分${result.Data.scoreCount}`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.Message}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async likePost(threadId, postId) {
|
||||
let { data: likeResult } = await this.request({
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/posts.update`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "id": threadId, "postId": postId, "data": { "attributes": { "isLiked": true } } }
|
||||
});
|
||||
if (likeResult?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子点赞成功`)
|
||||
} else {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子点赞失败:${likeResult.Message}❌`)
|
||||
}
|
||||
let { data: unlikeResult } = await this.request({
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/posts.update`,
|
||||
headers: {
|
||||
},
|
||||
data: { "id": threadId, "postId": postId, "data": { "attributes": { "isLiked": false } } }
|
||||
});
|
||||
if (unlikeResult?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子取消点赞成功`)
|
||||
} else {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子取消点赞失败:${unlikeResult.Message}❌`)
|
||||
}
|
||||
}
|
||||
async sharePost(threadId) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/thread.share`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "threadId": threadId }
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子分享成功`)
|
||||
} else {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子分享失败:${result.Message}❌`)
|
||||
}
|
||||
|
||||
}
|
||||
async viewPost(threadId) {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/view.count?threadId=` + threadId + `&type=0`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "threadId": threadId, "type": 0 }
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子浏览成功`)
|
||||
} else {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子浏览失败:${result.Message}❌`)
|
||||
}
|
||||
|
||||
}
|
||||
async commonPost(threadId) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/posts.create`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "id": threadId, "type": 0, "content": "666", "source": "", "attachments": [] }
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.Code == '0') {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子评论成功`)
|
||||
} else {
|
||||
$.log(`${this.index}账号[${this.index}] 帖子评论失败:${result.Message}❌`)
|
||||
}
|
||||
|
||||
}
|
||||
async getTreadList() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://bbs-api.iqoo.com/api/v3/thread.list?scope=5&page=1&perPage=10&filter[sort]=4&filter[essence]=1&sequence=0`,
|
||||
headers: {
|
||||
|
||||
},
|
||||
data: { "filter[essence]": 1, "filter[sort]": 4, "page": 1, "perPage": 10, "scope": 5, "sequence": 0 }
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
|
||||
this.threadId = result.Data.pageData[0].threadId
|
||||
this.postId = result.Data.pageData[0].postId
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} e method
|
||||
* @param {*} t path
|
||||
* @param {*} n data
|
||||
* @returns
|
||||
*/
|
||||
getSign(e, t, n) {
|
||||
|
||||
const time = Math.floor(Date.now() / 1e3);
|
||||
const crypto = require("crypto-js");
|
||||
var o, s, r, a = `${time}`,
|
||||
c = "GET" == e ? function (e) {
|
||||
var t, o = "", r;
|
||||
if (typeof e === 'object' && e !== null) {
|
||||
if (Array.isArray(e)) {
|
||||
r = e.entries();
|
||||
} else {
|
||||
r = Object.entries(e);
|
||||
}
|
||||
try {
|
||||
for (var entry of r) {
|
||||
var a = encodeURIComponent(entry[0]), c = encodeURIComponent(entry[1]);
|
||||
o += "".concat(a, "=").concat(c, "&");
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
return o.slice(0, -1);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}(n) : "";
|
||||
let l = "GET" == e ? "" : JSON.stringify(n);
|
||||
o = "2618194b0ebb620055e19cf9811d3c13"
|
||||
s = e + "&" + t + "&" + c + "&" + l + "&appid=1002×tamp=" + a
|
||||
r = crypto.HmacSHA256(s, o)
|
||||
let sign = crypto.enc.Base64.stringify(r)
|
||||
return `IQOO-HMAC-SHA256 appid=1002,timestamp=${time},signature=${sign}`
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,847 @@
|
||||
# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/quanmianshidai.py
|
||||
# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/quanmianshidai.py
|
||||
# Repo: smallfawn/QLScriptPublic
|
||||
# Path: wxapp/quanmianshidai.py
|
||||
# UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
# SHA256: 56f3c63c9d017a36fce2f78f3b461dcf8fb453537a300b8da039ff71d568c9a1
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
|
||||
"""
|
||||
项目 全棉时代种棉花
|
||||
入口 #小程序://全棉时代
|
||||
变量 code #token#备注 多账号换行
|
||||
变量名 qmzmh
|
||||
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
|
||||
|
||||
# 配置参数
|
||||
base_url = "https://hxxxy.gov.cn"
|
||||
user_agent = "Mozilla/5.0 (Linux; Android 11; ONEPLUS A6000 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231201 MMWEBID/2930 MicroMessenger/8.0.45.2521(0x28002D3D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxdfcaa44b1aa891a7"
|
||||
|
||||
def get_beijing_date():
|
||||
beijing_time = datetime.now(timezone(timedelta(hours=8)))
|
||||
return beijing_time.date()
|
||||
|
||||
def dq_time():
|
||||
dqsj = int(time.time())
|
||||
dysj = datetime.fromtimestamp(dqsj).strftime('%Y-%m-%d %H:%M:%S')
|
||||
print("当前时间戳:", dqsj)
|
||||
print("转换后的时间:", dysj)
|
||||
return dqsj, dysj
|
||||
|
||||
def get_env_variable(var_name):
|
||||
value = os.getenv(var_name)
|
||||
if value is None:
|
||||
print(f'环境变量{var_name}未设置,请检查。')
|
||||
return None
|
||||
accounts = value.strip().split('\n')
|
||||
print(f'-----------本次账号运行数量:{len(accounts)}-----------')
|
||||
print(f'------全棉时代种棉花-----1.2------')
|
||||
return accounts
|
||||
|
||||
def create_headers(code, token):
|
||||
headers = {
|
||||
'host': 'sg01.purcotton.com',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'app-id': 'wxdfcaa44b1aa891a7',
|
||||
'user-agent': user_agent,
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'origin': 'https://sg01.purcotton.com',
|
||||
'x-requested-with': 'com.tencent.mm',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'accept-encoding': 'gzip, deflate',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'cookie': 'sajssdk_2015_cross_new_user=1',
|
||||
'code': code,
|
||||
'token': token,
|
||||
}
|
||||
return headers
|
||||
|
||||
|
||||
def jscz(code, token): # 浇水
|
||||
# 调用hqid函数并获取树木ID及其他信息
|
||||
tree_id, sunshine, total_sunshine = hqid(code, token)
|
||||
|
||||
if tree_id is not None:
|
||||
#print(f"获得的树木ID: {tree_id}")
|
||||
# 可以在这里打印阳光信息,如果需要
|
||||
#print(f"当前阳光: {sunshine}, 总阳光: {total_sunshine}")
|
||||
|
||||
while True: # 开始一个无限循环
|
||||
url = "https://sg01.purcotton.com/api/watering"
|
||||
data = {"tree_user_id": tree_id, "water_cnt": 1} # 使用动态获取的树木ID
|
||||
headers = create_headers(code, token)
|
||||
#print(data)
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
# 提取剩余水滴数
|
||||
remaining_water = response_data["data"]["info"]["sy_water"]
|
||||
print(f"剩余水滴数: {remaining_water}")
|
||||
|
||||
# 根据剩余水滴数决定是否继续
|
||||
if remaining_water < 30: # 如果剩余水滴数小于30,则停止
|
||||
print("水滴不足,停止浇水。")
|
||||
break
|
||||
|
||||
print("执行浇水操作...")
|
||||
# 暂停1到3秒
|
||||
time.sleep(random.randint(1, 3))
|
||||
|
||||
elif response_data.get("code") == 400:
|
||||
print(response_data.get("msg", "未知错误"))
|
||||
break # 遇到错误时停止循环
|
||||
else:
|
||||
print("未知的响应code:", response_data.get("code"))
|
||||
print("完整响应:", response_data)
|
||||
break # 如果响应码不是200或400,停止循环
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
break # 请求异常时停止循环
|
||||
else:
|
||||
print("未能获取树木ID,无法执行浇水操作。")
|
||||
|
||||
|
||||
def llhmp(code, token, action, tid): # 添加了tid参数
|
||||
phone, _ = login(code, token) # 调用login函数,获取电话号码,忽略user_id
|
||||
|
||||
url = "https://nmp.pureh2b.com/api/purcotton/completetask"
|
||||
headers = {
|
||||
'Host': 'nmp.pureh2b.com',
|
||||
'XWeb-Xhr': '1',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
'code': code,
|
||||
'token': token,
|
||||
}
|
||||
data = {
|
||||
'action': action,
|
||||
'phone': phone,
|
||||
'from': 'guoyuan'
|
||||
}
|
||||
#print(data)
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json() # 解析响应数据为JSON
|
||||
|
||||
action_descriptions = {
|
||||
'browse_venue': '逛甄选好棉品',
|
||||
'browse_new_user_zone': '浏览新用户专区',
|
||||
'browse_community': '社区送福利',
|
||||
'subscibe': '订阅奖励提醒'
|
||||
|
||||
}
|
||||
action_description = action_descriptions.get(action, '执行任务')
|
||||
|
||||
#print(f"执行任务 '{action_description}' 响应内容:", response.text) # 打印响应内容
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
print(f"{action_description} 任务成功,暂停一段时间再继续...")
|
||||
time.sleep(random.randint(15, 20))
|
||||
tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||||
elif response_data.get("code") == 400:
|
||||
#print() # 打印响应内容
|
||||
print(f"{action_description} :{response_data.get('msg')}")
|
||||
#tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||||
else:
|
||||
print("{action_description} 收到未预期的响应,响应内容如下:")
|
||||
print(response_data)
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def tjlq_mpjl(code, token, tid): # 添加了tid参数来指定任务ID 提交 任务 领取奖励
|
||||
url = "https://sg01.purcotton.com/api/task/receive-task-water"
|
||||
headers = create_headers(code, token)
|
||||
data = {"tid": tid} # 使用传入的任务ID
|
||||
#print(data)
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data) # 发送POST请求
|
||||
response.raise_for_status() # 检查响应状态码
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("奖励领取成功。")
|
||||
# 打印sy_water和get_water
|
||||
data = response_data.get("data", {})
|
||||
sy_water = data.get("sy_water", "未知") #
|
||||
get_water = data.get("get_water", "未知") # 同上
|
||||
print(f"剩余水量:{sy_water}, 获取水量:{get_water}")
|
||||
else:
|
||||
print(f"奖励领取失败,错误信息:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def task_list(code, token): # 任务列表
|
||||
url = "https://sg01.purcotton.com/api/task/list"
|
||||
headers = create_headers(code, token)
|
||||
today_date = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期,格式为YYYY-MM-DD
|
||||
|
||||
# 任务ID到任务名称的映射
|
||||
task_names = {
|
||||
1: "签到, 1",
|
||||
2: "不知道1, 0",
|
||||
4: "三餐福袋, 3",
|
||||
6: "逛甄选好棉品, 4",
|
||||
10: "订阅奖励提醒, 1",
|
||||
13: "浏览新用户, 2",
|
||||
14: "庄园小课堂, 3",
|
||||
15: "棉花工厂, 1",
|
||||
16: "社区送福利, 1"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
today_tasks = [] # 用于存储今天的任务信息
|
||||
if response_data.get("code") == 200:
|
||||
task_user_info = response_data.get("data", {}).get("task_user_info", [])
|
||||
print("------任务进度条-----------")
|
||||
for task in task_user_info:
|
||||
task_id = task.get('task_id')
|
||||
complete_num = task.get('complete_num')
|
||||
complete_date = task.get('complete_date')
|
||||
# 比较任务完成日期是否为今天
|
||||
#print("------任务进度条-----------")
|
||||
if complete_date == today_date:
|
||||
task_name = task_names.get(task_id, f"未知任务 {task_id}") # 获取任务名称,如果未知则显示未知任务和ID
|
||||
|
||||
print(f"任务ID: {task_id} {task_name}/{complete_num}, 任务时间: {complete_date}")
|
||||
#print(f"{task_name}/{complete_num} 时间: {complete_date}")
|
||||
today_tasks.append(task)
|
||||
print("-----------------")
|
||||
print()
|
||||
return today_tasks
|
||||
|
||||
else:
|
||||
print(f"获取任务列表失败,错误信息:{response_data.get('msg')}")
|
||||
return []
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return []
|
||||
|
||||
|
||||
|
||||
def pdrw(code, token): # 判断任务
|
||||
"""根据任务完成情况执行任务"""
|
||||
try:
|
||||
task_user_info = task_list(code, token)
|
||||
|
||||
task_completion_limits = {
|
||||
6: 4,# 任务ID为6的任务只能完成4次 逛甄选好棉品
|
||||
13: 2, # 任务ID为13的任务只能完成2次 浏览新用户专区
|
||||
15: 1, # 假设任务ID为15的任务只能完成1次 棉花工厂
|
||||
4: 3, # 4 3次三餐福袋 7-12 14-17 18-22
|
||||
16: 1, # ID 16 社区送福利
|
||||
10: 1, # ID 10 订阅奖励提醒
|
||||
14: 1, #ID14 #庄园小课堂
|
||||
1: 1, #ID #签到
|
||||
}
|
||||
|
||||
# 先检查所有指定的任务是否已经存在于任务列表中
|
||||
existing_task_ids = [task['task_id'] for task in task_user_info]
|
||||
#print(existing_task_ids)
|
||||
# 遍历每个任务ID,检查是否需要执行任务
|
||||
for task_id, max_completes in task_completion_limits.items():
|
||||
task_info = next((task for task in task_user_info if task['task_id'] == task_id), None)
|
||||
|
||||
if task_info:
|
||||
complete_num = task_info['complete_num']
|
||||
if complete_num < max_completes:
|
||||
#print(f"任务ID: {task_id}, 当前完成次数: {complete_num}, 将执行任务并尝试领取奖励。")
|
||||
print()
|
||||
if task_id == 6:
|
||||
llhmp(code, token, 'browse_venue', '6')
|
||||
#today_water(code, token)
|
||||
elif task_id == 13:
|
||||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||||
today_water(code, token)
|
||||
sj_yg(code, token)#收集阳光
|
||||
syyg(code, token)#使用阳光
|
||||
# 这里可以添加其他任务ID的逻辑
|
||||
elif task_id == 15:
|
||||
# 对于任务ID 15的特定处理
|
||||
complete_task(code, token, '15')
|
||||
elif task_id == 16:
|
||||
llhmp(code, token, 'browse_community', '16')
|
||||
|
||||
elif task_id == 10:
|
||||
llhmp(code, token, 'subscibe', '10')
|
||||
elif task_id == 14:
|
||||
hdwt_box(code, token, '14')
|
||||
elif task_id == 4:
|
||||
# 对于任务ID 15的特定处理
|
||||
lq_fd(code, token, '4')
|
||||
|
||||
elif task_id == 1:
|
||||
lq_fd(code, token, '1')
|
||||
time.sleep(random.randint(1, 5))
|
||||
|
||||
|
||||
elif task_id not in existing_task_ids:
|
||||
#print(f"任务ID: {task_id}, 未在列表中,将尝试执行并领取奖励。")
|
||||
print()
|
||||
if task_id == 6:
|
||||
llhmp(code, token, 'browse_venue', '6')
|
||||
today_water(code, token)
|
||||
elif task_id == 13:
|
||||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||||
sj_yg(code, token)#收集阳光
|
||||
syyg(code, token)#使用阳光
|
||||
elif task_id == 15:
|
||||
complete_task(code, token, '15')
|
||||
elif task_id == 16:
|
||||
llhmp(code, token, 'browse_community', '16')
|
||||
elif task_id == 10:
|
||||
llhmp(code, token, 'subscibe', '10')
|
||||
elif task_id == 14:
|
||||
hdwt_box(code, token, '14')
|
||||
elif task_id == 1:
|
||||
lq_fd(code, token, '1')
|
||||
|
||||
elif task_id == 4:
|
||||
lq_fd(code, token, '4')
|
||||
|
||||
|
||||
time.sleep(random.randint(1, 5))
|
||||
|
||||
|
||||
|
||||
|
||||
# 添加其他任务ID和类型的逻辑
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 任务 数据
|
||||
def complete_task(code, token, tid): # 棉花工厂
|
||||
url = "https://sg01.purcotton.com/api/task/complete-manual-task"
|
||||
headers = create_headers(code, token)
|
||||
payload = {
|
||||
"tid": tid,
|
||||
"relate_id": 0,
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status() # 检查HTTP响应状态码,如果不是200系列,则抛出异常
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("奖励领取成功。")
|
||||
tjlq_mpjl(code, token, tid)
|
||||
else:
|
||||
# 如果响应中的code不是200,打印错误信息
|
||||
print(f"任务失败:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
# 如果请求过程中发生异常,打印异常信息
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
def lq_fd(code, token, tid): # 三餐福袋和签到
|
||||
# 确保tid为整数类型
|
||||
tid = int(tid) # 将tid转换为整型以确保与整数进行比较
|
||||
|
||||
task_name = "未知任务"
|
||||
if tid == 4:
|
||||
task_name = "三餐福袋" #7-12 14-17 18-22
|
||||
elif tid == 1:
|
||||
task_name = "签到"
|
||||
|
||||
url = "https://sg01.purcotton.com/api/task/complete-task"
|
||||
headers = create_headers(code, token)
|
||||
data = {"tid": tid} # 使用传入的任务ID
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查响应状态码
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print(f"{task_name} 奖励领取成功。")
|
||||
# 打印sy_water和get_water
|
||||
data = response_data.get("data", {})
|
||||
sy_water = data.get("sy_water", "未知")
|
||||
get_water = data.get("get_water", "未知")
|
||||
print(f"{task_name} 剩余水量:{sy_water}, 获取水量:{get_water}")
|
||||
else:
|
||||
print(f"{task_name}:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
# 任务 完
|
||||
|
||||
# 提取数据 开始
|
||||
|
||||
def hqid(code, token): # 获取树木ID和阳光信息
|
||||
url = "https://sg01.purcotton.com/api/index"
|
||||
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
# print("Response JSON:", response_data) # 用于调试
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
tree_data = response_data['data']['tree']
|
||||
user_data = response_data['data']['user'] # 获取用户相关数据
|
||||
|
||||
# 获取树木ID
|
||||
tree_id = tree_data.get('id')
|
||||
|
||||
# 获取阳光相关数据
|
||||
sunshine = user_data.get('sunshine', 0) # 如果不存在,则默认为0
|
||||
total_sunshine = user_data.get('total_sunshine', 0) # 如果不存在,则默认为0
|
||||
|
||||
# 可以选择打印这些信息
|
||||
#print(f"树木ID: {tree_id} 当前阳光: {sunshine} 总阳光: {total_sunshine} ")
|
||||
|
||||
|
||||
# 根据需要返回所需的数据,这里返回一个包含所有信息的元组
|
||||
return tree_id, sunshine, total_sunshine
|
||||
else:
|
||||
print(f"请求失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
return None, None, None # 如果请求失败,返回包含None的元组
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None, None, None # 如果发生异常,返回包含None的元组
|
||||
|
||||
|
||||
def login(code, token): # 提取的号码
|
||||
url = "https://sg01.purcotton.com/api/login"
|
||||
headers = create_headers(code, token)
|
||||
data = {
|
||||
"invite_source": "task",
|
||||
"channel": "" # "channel": "zmh_assist"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查HTTP响应状态
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
phone = response_data["data"]["phone"]
|
||||
user_id = response_data["data"]["id"] # 提取id
|
||||
#print("提取的电话号码:", phone)
|
||||
#print("提取的用户ID:", user_id) # 打印id
|
||||
return phone, user_id # 返回电话号码和用户ID
|
||||
else:
|
||||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||||
return None, None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None, None
|
||||
|
||||
# 提取数据 完
|
||||
|
||||
# 回答问题
|
||||
def hdwt_box(code, token, tid): #庄园小课堂
|
||||
url = "https://sg01.purcotton.com/api/answer"
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
exams = response_data.get("data", {}).get("exams", [])
|
||||
#print(response.json())
|
||||
for exam in exams:
|
||||
exam_id = exam.get('id')
|
||||
print(f"正在处理问题ID: {exam_id}")
|
||||
|
||||
# 这里是你提交答案的代码逻辑
|
||||
url_submit_answer = "https://sg01.purcotton.com/api/answer/complete"
|
||||
payload = {
|
||||
"tid": tid, # 假设任务ID为14
|
||||
"exam_id": exam_id,
|
||||
"win": 1 # 假设标记为正确
|
||||
}
|
||||
submit_response = requests.post(url_submit_answer, headers=headers, json=payload)
|
||||
submit_response.raise_for_status()
|
||||
|
||||
if submit_response.status_code == 200:
|
||||
submit_response_data = submit_response.json()
|
||||
#print(submit_response_data) # 打印完整的响应体
|
||||
|
||||
# 提取并打印get_water, complete_num, 和 box_id
|
||||
get_water = submit_response_data.get("data", {}).get("get_water", 0)
|
||||
complete_num = submit_response_data.get("data", {}).get("complete_num", 0)
|
||||
box_id = submit_response_data.get("data", {}).get("box_id", 0)
|
||||
print(f"获取水量:{get_water}, 完成数量:{complete_num}, 宝箱ID:{box_id}")
|
||||
|
||||
# 如果box_id大于0,则打开宝箱
|
||||
if box_id > 0:
|
||||
print(f"检测到宝箱ID: {box_id},尝试打开宝箱...")
|
||||
url_open_box = "https://sg01.purcotton.com/api/answer/open-box"
|
||||
box_payload = {"box_id": box_id}
|
||||
box_response = requests.post(url_open_box, headers=headers, json=box_payload)
|
||||
box_response.raise_for_status()
|
||||
|
||||
if box_response.status_code == 200:
|
||||
box_response_data = box_response.json()
|
||||
# print(f"宝箱 {box_id} 打开成功,响应内容:", box_response_data)
|
||||
# 提取sy_water和get_water
|
||||
sy_water = box_response_data.get("data", {}).get("sy_water", 0)
|
||||
get_water = box_response_data.get("data", {}).get("get_water", 0)
|
||||
print(f"宝箱 剩余水量:{sy_water}, 宝箱水量:{get_water}")
|
||||
|
||||
|
||||
# 随机停止3-5秒
|
||||
time.sleep(random.randint(3, 5))
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
def today_water(code, token):#
|
||||
url = "https://sg01.purcotton.com/api/get-today-water"
|
||||
headers = create_headers(code, token) # 确保 create_headers 函数正确定义并返回所需的头部信息
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers)
|
||||
response.raise_for_status() # 确保响应状态为200
|
||||
|
||||
# 解析响应体为JSON
|
||||
response_data = response.json()
|
||||
|
||||
# 检查响应中的code字段
|
||||
if response_data.get("code") == 200:
|
||||
#print("完整响应体:", response_data) # 打印完整的响应体
|
||||
|
||||
# 提取所需数据
|
||||
sy_water = response_data.get("data", {}).get("sy_water", "未知")
|
||||
get_water = response_data.get("data", {}).get("get_water", "未知")
|
||||
tomorrow_get_water_num = response_data.get("data", {}).get("tomorrow_get_water_num", "未知")
|
||||
|
||||
#print(f"剩余水量(sy_water): {sy_water}")
|
||||
print(f"今日获取水量: {get_water}")
|
||||
print(f"明日可获取水量: {tomorrow_get_water_num}")
|
||||
print(f"今日获取水量: {get_water} 明日可获取水量: {tomorrow_get_water_num}")
|
||||
else:
|
||||
# 打印错误消息
|
||||
print(f"水瓶 {response_data.get('msg', '未知错误')}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def cscscs(code, token):
|
||||
url = "https://sg01.purcotton.com/api/statistics/store"
|
||||
headers = create_headers(code, token)
|
||||
_, user_id = login(code, token) # 调用login函数,忽略电话号码,只获取user_id
|
||||
data = {
|
||||
"uid": user_id,
|
||||
"type": 301 # 确保这里的值符合API的要求
|
||||
}
|
||||
#print(data) # 打印整个响应数据
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查HTTP响应状态
|
||||
|
||||
response_data = response.json()
|
||||
#print(response_data) # 打印整个响应数据
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
# 阳光
|
||||
|
||||
def sj_yg(code, token):
|
||||
success = False
|
||||
while not success:
|
||||
url = "https://sg01.purcotton.com/api/get-sunshine"
|
||||
headers = create_headers(code, token)
|
||||
# 使用当前时间戳
|
||||
payload = {"time": int(time.time() * 1000)}
|
||||
#print(f"请求负载: {payload}")
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response_data = response.json()
|
||||
|
||||
if response.status_code == 200:
|
||||
if response_data["code"] == 200:
|
||||
sy_sunshine = response_data['data'].get('sy_sunshine')
|
||||
get_sunshine = response_data['data'].get('get_sunshine')
|
||||
print(f"成功领取阳光: 剩余阳光: {sy_sunshine}, 获得阳光: {get_sunshine}")
|
||||
success = True # 标记成功领取,退出循环
|
||||
elif response_data["code"] == 400:
|
||||
print("没有可领取的阳光")
|
||||
break # 如果没有可领取的阳光,跳出循环
|
||||
else:
|
||||
print(f"阳光操作响应: {response_data}")
|
||||
else:
|
||||
print(f"请求失败,HTTP状态码: {response.status_code}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
if success:
|
||||
# 如果成功领取阳光,则暂停1到3秒后继续
|
||||
sleep_time = random.randint(1, 3)
|
||||
print(f"暂停{sleep_time}秒后重新领取...")
|
||||
time.sleep(sleep_time)
|
||||
success = False # 重置成功标志,继续领取
|
||||
|
||||
def syyg(code, token):
|
||||
"""当阳光值大于100时,完成阳光任务"""
|
||||
# 假设hqid返回树木ID,sunshine,和其他信息
|
||||
_, sunshine, _ = hqid(code, token)
|
||||
|
||||
if sunshine > 99:
|
||||
url = "https://sg01.purcotton.com/api/sunshine-task/complete-task"
|
||||
headers = create_headers(code, token) # 使用create_headers函数创建请求头
|
||||
payload = {"tid": 1} # 固定payload,可能需要根据API文档调整
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status() # 检查响应是否成功
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("成功完成阳光任务。")
|
||||
# 这里可以根据响应体进一步处理,如打印信息或记录日志
|
||||
else:
|
||||
print(f"完成阳光任务失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求完成阳光任务时出错: {e}")
|
||||
else:
|
||||
print(f"阳光值未达到{sunshine}/100,不执行任务。")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 好友?
|
||||
|
||||
|
||||
def hyid(code, token):
|
||||
url = "https://sg01.purcotton.com/api/friend/list?page=1&page_size=50"
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status() # 确保响应状态为200
|
||||
|
||||
# 解析响应体为JSON
|
||||
response_data = response.json()
|
||||
|
||||
friend_user_ids = [] # 用于存储符合条件的朋友的用户ID
|
||||
if response_data.get("code") == 200:
|
||||
friends_list = response_data.get("data", {}).get("list", [])
|
||||
for friend in friends_list:
|
||||
friend_user_id = friend.get("friend_user_id")
|
||||
help_water_cnt = friend.get("help_water_cnt")
|
||||
be_help_water_cnt = friend.get("friend_user_info", {}).get("be_help_water_cnt")
|
||||
#print(f"朋友用户ID: {friend_user_id}, 帮忙浇水次数: {help_water_cnt}, 被帮忙浇水次数: {be_help_water_cnt}")
|
||||
|
||||
# 只有当帮忙浇水次数小于1时,才收集该朋友的用户ID
|
||||
if help_water_cnt < 1:
|
||||
friend_user_ids.append(friend_user_id)
|
||||
|
||||
return friend_user_ids # 返回所有符合条件收集到的用户ID
|
||||
else:
|
||||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
|
||||
def access_friend_detail(code, token, friend_user_id):
|
||||
"""访问朋友的详细信息,并尝试对其树进行浇水操作"""
|
||||
url = "https://sg01.purcotton.com/api/friend/index"
|
||||
headers = create_headers(code, token)
|
||||
headers['friend-id'] = str(friend_user_id)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
tree_info = response_data.get('data', {}).get('tree', {})
|
||||
if isinstance(tree_info, list) and tree_info:
|
||||
tree_info = tree_info[0]
|
||||
|
||||
tree_id = tree_info.get('id') if isinstance(tree_info, dict) else None
|
||||
help_water_info = response_data.get('data', {}).get('help_water', {})
|
||||
help_water_code = help_water_info.get('code')
|
||||
help_water_msg = help_water_info.get('msg')
|
||||
|
||||
#print(f"{friend_user_id}朋友树ID: {tree_id}, 帮忙浇水代码: {help_water_code}, 信息: '{help_water_msg}'")
|
||||
|
||||
if tree_id is not None:
|
||||
success = water_friend_tree(code, token, tree_id, friend_user_id)
|
||||
if not success:
|
||||
print(f"由于操作失败,停止处理朋友{friend_user_id}的后续操作。")
|
||||
return False
|
||||
else:
|
||||
print(f"获取朋友{friend_user_id}的详细信息失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def water_friend_tree(code, token, tree_id, friend_user_id):
|
||||
"""执行给定朋友的树浇水操作"""
|
||||
url = "https://sg01.purcotton.com/api/friend/water"
|
||||
headers = create_headers(code, token)
|
||||
payload = {"tree_user_id": tree_id}
|
||||
headers['friend-id'] = str(friend_user_id)
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
#print(response_data) # 打印整个响应体,用于调试
|
||||
|
||||
if response_data["code"] == 200:
|
||||
# 检查response_data['data']是否为字典,以此判断是否可以安全访问'info'
|
||||
if isinstance(response_data['data'], dict):
|
||||
use_water = response_data['data']['info'].get('use_water', '未知')
|
||||
reward_water = response_data['data']['info'].get('reward_water', '未知')
|
||||
print(f"对树ID {tree_id} 的浇水操作成功: 使用水量: {use_water}, 奖励水量: {reward_water}")
|
||||
else:
|
||||
# 如果data不是字典,直接打印data字段,这里可能是错误消息或其他说明
|
||||
print(f"操作结果: {response_data['data']}")
|
||||
return False
|
||||
elif response_data["code"] == 400:
|
||||
#print(f"{response_data.get('msg', '未知错误')}. 完整响应体: {response_data}")
|
||||
print(f"{response_data.get('msg', '未知错误')}. ")
|
||||
return False
|
||||
else:
|
||||
print(f"对树ID {tree_id} 的浇水操作响应: {response_data}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def process_all_friends(friends_user_ids, code, token):
|
||||
"""遍历朋友列表,尝试对每个朋友的树进行浇水操作,并在首次失败时停止"""
|
||||
for friend_user_id in friends_user_ids:
|
||||
if not access_friend_detail(code, token, friend_user_id):
|
||||
#print(f"由于操作失败,停止对所有后续朋友的处理。")
|
||||
break # 遇到第一个失败,立即跳出循环
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
var_name = 'qmzmh'
|
||||
tokens = get_env_variable(var_name)
|
||||
if not tokens:
|
||||
return
|
||||
|
||||
total_tokens = len(tokens)
|
||||
|
||||
if total_tokens > 20:
|
||||
print("账号数量超过20个,不执行操作。")
|
||||
return
|
||||
|
||||
|
||||
for index, token_info in enumerate(tokens, start=1):
|
||||
parts = token_info.split('#')
|
||||
if len(parts) < 2:
|
||||
print("令牌格式不正确。跳过处理。")
|
||||
continue
|
||||
|
||||
code = parts[0]
|
||||
token = parts[1]
|
||||
remark = parts[2] if len(parts) > 2 else ""
|
||||
print()
|
||||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||||
|
||||
phone, user_id = login(code, token)
|
||||
if phone and user_id: # 检查是否成功获取电话号码和用户ID
|
||||
# 进行后续任务
|
||||
cscscs(code, token)
|
||||
#sj_yg(code, token)#收集阳光
|
||||
#syyg(code, token)#使用阳光
|
||||
jscz(code, token) #浇水
|
||||
pdrw(code, token) #任务判断
|
||||
friend_user_ids = hyid(code, token)
|
||||
if friend_user_ids:
|
||||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||||
else:
|
||||
print("登录失败或获取用户信息失败,跳过当前账号的后续操作。")
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
'''
|
||||
def main():
|
||||
var_name = 'qmzmh'
|
||||
tokens = get_env_variable(var_name)
|
||||
if not tokens:
|
||||
return
|
||||
|
||||
total_tokens = len(tokens)
|
||||
|
||||
if total_tokens > 20:
|
||||
print("账号数量超过20个,不执行操作。")
|
||||
return
|
||||
|
||||
for index, token_info in enumerate(tokens, start=1):
|
||||
parts = token_info.split('#')
|
||||
if len(parts) < 2:
|
||||
print("令牌格式不正确。跳过处理。")
|
||||
continue
|
||||
|
||||
code = parts[0]
|
||||
token = parts[1]
|
||||
remark = parts[2] if len(parts) > 2 else ""
|
||||
|
||||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||||
|
||||
|
||||
login(code, token)#判断要手机号码/提取的电话号码: 才运行下面的任务
|
||||
cscscs(code, token)#更新
|
||||
#sj_yg(code, token)#收集阳光
|
||||
#syyg(code, token)#使用阳光
|
||||
jscz(code, token) #浇水
|
||||
pdrw(code, token) #任务判断
|
||||
friend_user_ids = hyid(code, token)
|
||||
if friend_user_ids:
|
||||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
'''
|
||||
@@ -0,0 +1,387 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 爱奇艺.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 857e96745c59151247fd475ff5a59f974c26d8d4fdac7db5e0938d1241378509
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
# @env : iqyck
|
||||
# 功能:爱奇艺签到 刷观影时长 做任务领取奖励
|
||||
# -------------------------------
|
||||
"""
|
||||
cookie为爱奇艺整个cookie
|
||||
export iqyck = "cookie"
|
||||
"""
|
||||
from datetime import datetime
|
||||
from hashlib import md5 as md5Encode
|
||||
from json import dumps
|
||||
from time import sleep, time
|
||||
from os import environ, system, path
|
||||
from random import randint, choice
|
||||
from re import findall
|
||||
from string import digits, ascii_lowercase, ascii_uppercase
|
||||
from sys import exit, stdout
|
||||
from uuid import uuid4
|
||||
import requests
|
||||
response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt")
|
||||
response.encoding = 'utf-8'
|
||||
txt = response.text
|
||||
print(txt)
|
||||
|
||||
def load_send():
|
||||
cur_path = path.abspath(path.dirname(__file__))
|
||||
if path.exists(cur_path + "/notify.py"):
|
||||
try:
|
||||
from notify import send
|
||||
return send
|
||||
except ImportError:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
try:
|
||||
from requests import Session, get, post
|
||||
from fake_useragent import UserAgent
|
||||
except:
|
||||
print(
|
||||
"你还没有安装requests库和TL库_useragent库 正在尝试自动安装 请在安装结束后重新执行此脚本\n若还是提示本条消息 请自行运行pip3 install requests和pip3 install fake-useragent或者在青龙的依赖管理里安装python的requests和fake-useragent")
|
||||
system("pip3 install fake-useragent")
|
||||
system("pip3 install requests")
|
||||
print("安装完成 脚本退出 请重新执行")
|
||||
exit(0)
|
||||
iqyck = environ.get("iqyck") if environ.get("iqyck") else ""
|
||||
P00001 = P00003 = dfp = qyid = ""
|
||||
if iqyck == "":
|
||||
print("未找到iqy_ck,请填写iqy_ck变量")
|
||||
exit(0)
|
||||
|
||||
check_items = ["P00001", "P00003", "QC005", "__dfp"]
|
||||
|
||||
for item in check_items:
|
||||
try:
|
||||
found = findall(rf"{item}=(.*?)(;|$)", iqyck)
|
||||
|
||||
if found:
|
||||
value = found[0][0]
|
||||
|
||||
if item == "P00001":
|
||||
P00001 = value
|
||||
elif item == "P00003":
|
||||
P00003 = value
|
||||
elif item == "QC005":
|
||||
qyid = value
|
||||
elif item == "__dfp":
|
||||
dfp = value
|
||||
dfp = dfp.split("@")[0]
|
||||
else:
|
||||
print(f"{item}未在iqyck中找到")
|
||||
except IndexError:
|
||||
print(f"{item}存在但无法被正确解析")
|
||||
|
||||
class IQiYi:
|
||||
name = "爱奇艺"
|
||||
def __init__(self):
|
||||
self.P00001 = P00001
|
||||
self.userId = P00003
|
||||
self.dfp = dfp
|
||||
self.qyid = qyid
|
||||
self.platform = str(uuid4())[:16],
|
||||
self.session = Session()
|
||||
self.user_agent = UserAgent().chrome
|
||||
self.headers = {
|
||||
"User-Agent": self.user_agent,
|
||||
"Cookie": f"P00001={self.P00001}",
|
||||
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||
'sec-fetch-site': "none",
|
||||
'sec-fetch-dest': "document",
|
||||
'accept-language': "zh-CN,zh-Hans;q=0.9",
|
||||
'sec-fetch-mode': "navigate"
|
||||
}
|
||||
self.msg = ""
|
||||
self.user_info = ""
|
||||
self.task_info = ""
|
||||
self.msg = ""
|
||||
self.taskList = []
|
||||
self.lotteryList = []
|
||||
self.shakeLotteryList = []
|
||||
self.gift_list = []
|
||||
self.sleep_await = environ.get("sleep_await") if environ.get("sleep_await") else 1
|
||||
|
||||
"""工具"""
|
||||
def req(self, url, req_method="GET", body=None):
|
||||
data = {}
|
||||
method = req_method.upper()
|
||||
if method not in ["GET", "POST", "OTHER"]:
|
||||
self.print_now(f"错误:不支持的请求方法:{method}")
|
||||
return
|
||||
|
||||
try:
|
||||
if method == "GET":
|
||||
response = self.session.get(url, headers=self.headers, params=body)
|
||||
elif method == "POST":
|
||||
response = self.session.post(url, headers=self.headers, data=dumps(body))
|
||||
elif method == "OTHER":
|
||||
response = self.session.get(url, headers=self.headers, params=dumps(body))
|
||||
|
||||
if method in ["GET", "POST"]:
|
||||
data = response.json()
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
self.print_now(f"请求发送失败,可能为网络异常,异常详细信息:{str(e)}")
|
||||
|
||||
return data
|
||||
|
||||
def timestamp(self, short=False):
|
||||
if (short):
|
||||
return int(time())
|
||||
return int(time() * 1000)
|
||||
|
||||
def md5(self, str):
|
||||
m = md5Encode(str.encode(encoding='utf-8'))
|
||||
return m.hexdigest()
|
||||
|
||||
def uuid(self, num, upper=False):
|
||||
str = ''
|
||||
if upper:
|
||||
for i in range(num):
|
||||
str += choice(digits + ascii_lowercase + ascii_uppercase)
|
||||
else:
|
||||
for i in range(num):
|
||||
str += choice(digits + ascii_lowercase)
|
||||
return str
|
||||
|
||||
def print_now(self, content):
|
||||
print(content)
|
||||
stdout.flush()
|
||||
|
||||
def sign(self):
|
||||
# lequ-qfe.iqiyi.com
|
||||
time_stamp = self.timestamp()
|
||||
data = f'agenttype=20|agentversion=15.5.5|appKey=lequ_rn|appver=15.5.5|authCookie={self.P00001}|qyid={self.qyid}|srcplatform=20|task_code=natural_month_sign|timestamp={time_stamp}|userId={self.userId}|cRcFakm9KSPSjFEufg3W'
|
||||
url = f'https://community.iqiyi.com/openApi/task/execute?task_code=natural_month_sign×tamp={time_stamp}&appKey=lequ_rn&userId={self.userId}&authCookie={self.P00001}&agenttype=20&agentversion=15.5.5&srcplatform=20&appver=15.5.5&qyid={self.qyid}&sign={self.md5(data)}'
|
||||
headers = {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
body = {
|
||||
"natural_month_sign": {
|
||||
"verticalCode": "iQIYI",
|
||||
"agentVersion": "15.4.6",
|
||||
"authCookie": self.P00001,
|
||||
"taskCode": "iQIYI_mofhr",
|
||||
"dfp": self.dfp,
|
||||
"qyid": self.qyid,
|
||||
"agentType": 20,
|
||||
"signFrom": 1
|
||||
}
|
||||
}
|
||||
data = post(url, headers=headers, data=dumps(body)).json()
|
||||
signDays = None
|
||||
if 'code' in data and data['code'] == 'A0003':
|
||||
self.print_now("iqyck已失效,请重新获取")
|
||||
exit(0)
|
||||
elif 'code' in data and data['code'] == 'A00000':
|
||||
data_data = data.get('data', {})
|
||||
msg = data_data.get('msg')
|
||||
|
||||
if data_data.get('data'):
|
||||
signDays = data_data.get('data', {}).get('signDays')
|
||||
if msg and '已经到达上限' in msg:
|
||||
self.print_now(f"签到失败,今天已签到")
|
||||
self.task_info += f"签到失败,今天已签到\n"
|
||||
elif signDays is not None:
|
||||
self.print_now(f"签到成功, 本月累计签到{signDays}天")
|
||||
self.task_info += f"签到成功, 本月累计签到{signDays}天\n"
|
||||
|
||||
if data_data['code'] != 'A0000' and data_data['code'] != 'A0014' and not (data_data.get('success')):
|
||||
self.print_now(f"签到失败:{msg}")
|
||||
self.task_info += f"签到失败:{msg}\n"
|
||||
else:
|
||||
self.print_now(f"签到失败:{data}")
|
||||
self.task_info += f"签到失败:{data}\n"
|
||||
|
||||
def get_watch_time(self):
|
||||
url = "https://tc.vip.iqiyi.com/growthAgency/watch-film-duration"
|
||||
data = self.req(url)
|
||||
watch_time = data['data']['viewtime']['time']
|
||||
return watch_time
|
||||
|
||||
def watchVideo(self):
|
||||
totalTime = self.get_watch_time()
|
||||
if totalTime >= 7200:
|
||||
self.print_now(f"您的账号今日观影时长大于2小时,不执行刷观影时长")
|
||||
self.task_info += f"今日观影任务已完成\n"
|
||||
return
|
||||
self.print_now("正在刷观影时长,为减少风控,本过程运行大概1个小时")
|
||||
for i in range(1, 121):
|
||||
Time = randint(70, 90)
|
||||
url = f"https://msg.qy.net/b?u=f600a23f03c26507f5482e6828cfc6c5&pu={self.userId}&p1=1_10_101&v=5.2.66&ce={self.uuid(32)}&de=1616773143.1639632721.1639653680.29&c1=2&ve={self.uuid(32)}&ht=0&pt={randint(1000000000, 9999999999) / 1000000}&isdm=0&duby=0&ra=5&clt=&ps2=DIRECT&ps3=&ps4=&br=mozilla%2F5.0%20(windows%20nt%2010.0%3B%20win64%3B%20x64)%20applewebkit%2F537.36%20(khtml%2C%20like%20gecko)%20chrome%2F96.0.4664.110%20safari%2F537.36&mod=cn_s&purl=https%3A%2F%2Fwww.iqiyi.com%2Fv_1eldg8u3r08.html%3Fvfrm%3Dpcw_home%26vfrmblk%3D712211_cainizaizhui%26vfrmrst%3D712211_cainizaizhui_image1%26r_area%3Drec_you_like%26r_source%3D62%2540128%26bkt%3DMBA_PW_T3_53%26e%3Db3ec4e6c74812510c7719f7ecc8fbb0f%26stype%3D2&tmplt=2&ptid=01010031010000000000&os=window&nu=0&vfm=&coop=&ispre=0&videotp=0&drm=&plyrv=&rfr=https%3A%2F%2Fwww.iqiyi.com%2F&fatherid={randint(1000000000000000, 9999999999999999)}&stauto=1&algot=abr_v12-rl&vvfrom=&vfrmtp=1&pagev=playpage_adv_xb&engt=2&ldt=1&krv=1.1.85&wtmk=0&duration={randint(1000000, 9999999)}&bkt=&e=&stype=&r_area=&r_source=&s4={randint(100000, 999999)}_dianshiju_tbrb_image2&abtest=1707_B%2C1550_B&s3={randint(100000, 999999)}_dianshiju_tbrb&vbr={randint(100000, 999999)}&mft=0&ra1=2&wint=3&s2=pcw_home&bw=10&ntwk=18&dl={randint(10, 999)}.27999999999997&rn=0.{randint(1000000000000000, 9999999999999999)}&dfp={dfp}&stime={self.timestamp()}&r={randint(1000000000000000, 9999999999999999)}&hu=1&t=2&tm={Time}&_={self.timestamp()}"
|
||||
self.req(url, 'other')
|
||||
totalTime += Time
|
||||
sleep(randint(30, 50))
|
||||
if i % 30 == 0:
|
||||
self.print_now(f"现在已经刷到了{totalTime}秒, 数据同步有延迟, 仅供参考")
|
||||
if totalTime >= 7200:
|
||||
sleep(60)
|
||||
self.print_now(f"今日观影任务已完成")
|
||||
self.task_info += f"今日观影任务已完成\n"
|
||||
break
|
||||
|
||||
def dailyTask(self):
|
||||
# 查询任务
|
||||
"""
|
||||
status: 0 已完成,未领奖 1 已完成,已领奖 2 未完成
|
||||
"""
|
||||
url = f'https://tc.vip.iqiyi.com/taskCenter/task/queryUserTask?P00001={self.P00001}'
|
||||
data = self.req(url)
|
||||
if data['code'] == 'A00000':
|
||||
for item in data["data"].get("tasks", {}).get("daily", []):
|
||||
if item["taskCode"] != "WatchVideo60mins" and item["status"] != 1:
|
||||
self.taskList.append(
|
||||
{
|
||||
"taskTitle": item["taskTitle"],
|
||||
"taskCode": item["taskCode"],
|
||||
"status": item["status"]
|
||||
}
|
||||
)
|
||||
if self.taskList:
|
||||
for item in self.taskList:
|
||||
if item["status"] == 2:
|
||||
# 领任务
|
||||
url = f'https://tc.vip.iqiyi.com/taskCenter/task/joinTask?P00001={self.P00001}&taskCode={item["taskCode"]}&platform={self.platform}&lang=zh_CN&app_lm=cn'
|
||||
if self.req(url)['code'] == 'A00000':
|
||||
sleep(10)
|
||||
# 完成任务
|
||||
url = f'https://tc.vip.iqiyi.com/taskCenter/task/notify?taskCode={item["taskCode"]}&P00001={self.P00001}&platform={self.platform}&lang=cn&bizSource=component_browse_timing_tasks&_={self.timestamp()}'
|
||||
if self.req(url)['code'] == 'A00000':
|
||||
sleep(2)
|
||||
if item["status"] == 2 or item["status"] == 0:
|
||||
# 领取奖励
|
||||
url = f"https://tc.vip.iqiyi.com/taskCenter/task/getTaskRewards?P00001={self.P00001}&taskCode={item['taskCode']}&lang=zh_CN&platform={self.platform}"
|
||||
data = self.req(url)
|
||||
if data['code'] == 'A00000':
|
||||
price = data['dataNew'][0]["value"]
|
||||
self.print_now(f"{item['taskTitle']}任务已完成, 获得{int(price[1:])}点成长值")
|
||||
self.task_info += f"{item['taskTitle']}任务已完成, 获得{int(price[1:])}点成长值\n"
|
||||
sleep(5)
|
||||
else:
|
||||
self.print_now("今日日常浏览任务已全部完成")
|
||||
self.task_info += "今日日常浏览任务已全部完成\n"
|
||||
|
||||
def lottery(self):
|
||||
url = "https://iface2.iqiyi.com/aggregate/3.0/lottery_activity"
|
||||
lottery_params = {
|
||||
"app_k": 0,
|
||||
"app_v": 0,
|
||||
"platform_id": 10,
|
||||
"dev_os": 0,
|
||||
"dev_ua": 0,
|
||||
"net_sts": 0,
|
||||
"qyid": self.qyid,
|
||||
"psp_uid": self.userId,
|
||||
"psp_cki": self.P00001,
|
||||
"psp_status": 3,
|
||||
"secure_v": 1,
|
||||
"secure_p": 0,
|
||||
"req_sn": self.timestamp()
|
||||
}
|
||||
params = lottery_params
|
||||
data = self.req(url, "get", params)
|
||||
if data.get("code") == 0:
|
||||
daysurpluschance = int(data.get("daysurpluschance"))
|
||||
if daysurpluschance == 0:
|
||||
if self.lotteryList:
|
||||
self.print_now(f"抽奖奖品:{'、'.join(self.lotteryList)}")
|
||||
self.task_info += f"抽奖奖品:{'、'.join(self.lotteryList)}\n"
|
||||
else:
|
||||
self.print_now(f"抽奖次数已用完, 明日再来吧")
|
||||
self.task_info += f"抽奖次数已用完, 明日再来吧\n"
|
||||
else:
|
||||
award_info = data.get("awardName")
|
||||
self.lotteryList.append(award_info)
|
||||
sleep(2)
|
||||
self.lottery()
|
||||
else:
|
||||
self.print_now(f"抽奖接口请求失败:{data}\n")
|
||||
|
||||
def shake_lottery(self):
|
||||
url = f'https://act.vip.iqiyi.com/shake-api/lottery?P00001={self.P00001}&dfp={self.dfp}&qyid={self.qyid}&deviceID={self.qyid}&version=15.4.6&agentType=12&platform=bb35a104d95490f6&ptid=02030031010000000000&fv=afc0b50ed49e732d&source=afc0b50ed49e732d&_={self.timestamp()}&vipType=1&lotteryType=0&actCode=0k9GkUcjqqj4tne8&freeLotteryNum=3&extendParams={{"appIds":"iqiyi_pt_vip_iphone_video_autorenew_12m_348yuan_v2","supportSk2Identity":true,"testMode":"0","iosSystemVersion":"17.4.1","bundleId":"com.qiyi.iphone"}}'
|
||||
data = self.req(url)
|
||||
if data.get("code") == 'A00000':
|
||||
award_info = data.get("data", {}).get("title")
|
||||
self.shakeLotteryList.append(award_info)
|
||||
sleep(2)
|
||||
self.shake_lottery()
|
||||
elif data.get("msg") == "抽奖次数用完":
|
||||
if self.shakeLotteryList:
|
||||
self.print_now(f"每天摇一摇奖品:{'、'.join(self.shakeLotteryList)}")
|
||||
self.task_info += f"每天摇一摇奖品:{'、'.join(self.shakeLotteryList)}\n"
|
||||
else:
|
||||
self.print_now(f"每天摇一摇次数已用完, 明日再来吧")
|
||||
self.task_info += f"每天摇一摇次数已用完, 明日再来吧\n"
|
||||
else:
|
||||
self.print_now(f'每天摇一摇:{data.get("msg")}\n')
|
||||
|
||||
def giveTimes(self):
|
||||
times_code_list = ["browseWeb", "browseWeb", "bookingMovie"]
|
||||
for times_code in times_code_list:
|
||||
url = f"https://pcell.iqiyi.com/lotto/giveTimes?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c×Code={times_code}&P00001={self.P00001}"
|
||||
data = self.req(url)
|
||||
|
||||
def queryTimes(self):
|
||||
url = f"https://pcell.iqiyi.com/lotto/queryTimes?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c&P00001={self.P00001}"
|
||||
data = self.req(url)
|
||||
if data.get("code") == 'A00000':
|
||||
times = data["data"]["times"]
|
||||
return times
|
||||
|
||||
def lotto_lottery(self):
|
||||
self.giveTimes()
|
||||
times = self.queryTimes()
|
||||
if times == 0:
|
||||
self.print_now(f"白金抽奖次数已用完, 明日再来吧")
|
||||
self.task_info += f"白金抽奖次数已用完, 明日再来吧"
|
||||
for _ in range(times):
|
||||
url = f"https://pcell.iqiyi.com/lotto/lottery?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c&P00001={self.P00001}"
|
||||
data = self.req(url)
|
||||
gift_name = data["data"]["giftName"]
|
||||
if gift_name and "未中奖" not in gift_name:
|
||||
self.gift_list.append(gift_name)
|
||||
if self.gift_list:
|
||||
self.print_now(f"白金抽奖奖品:{'、'.join(self.gift_list)}")
|
||||
self.task_info += f"白金抽奖奖品:{'、'.join(self.gift_list)}"
|
||||
elif times != 0:
|
||||
self.print_now(f"很遗憾,白金抽奖未中奖")
|
||||
self.task_info += f"很遗憾,白金抽奖未中奖"
|
||||
|
||||
def get_userinfo(self):
|
||||
url = f"https://tc.vip.iqiyi.com/growthAgency/v2/growth-aggregation?messageId=b7d48dbba64c4fd0f9f257dc89de8e25&platform=97ae2982356f69d8&P00001={self.P00001}&responseNodes=duration,growth,upgrade,viewTime,growthAnnualCard&_={self.timestamp()}"
|
||||
data = self.req(url)
|
||||
growth_info = data['data']['growth']
|
||||
if data.get("code") == 'A00000':
|
||||
self.user_info += f"用户昵称:{ data['data']['user']['nickname']}\nVIP等级:{growth_info['level']}\nVIP到期时间:{growth_info['deadline']}\n今日成长:{growth_info['todayGrowthValue']}\n当前成长:{growth_info['growthvalue']}\n升级还需:{growth_info['distance']}\n"
|
||||
else:
|
||||
self.user_info = f"查询失败,未获取到用户信息\n"
|
||||
|
||||
def main(self):
|
||||
self.sign()
|
||||
self.watchVideo()
|
||||
self.dailyTask()
|
||||
self.lottery()
|
||||
self.shake_lottery()
|
||||
self.lotto_lottery()
|
||||
self.print_now(f"任务已经执行完成,因爱奇艺观影时间同步较慢,这里等待1分钟再查询今日成长值信息\n若不需要等待直接查询,请设置环境变量名 sleep_await = 0")
|
||||
if int(self.sleep_await) == 1:
|
||||
sleep(60)
|
||||
self.get_userinfo()
|
||||
self.msg = self.user_info + self.task_info
|
||||
send = load_send()
|
||||
if callable(send):
|
||||
send("爱奇艺", self.msg)
|
||||
else:
|
||||
print('\n加载通知服务失败')
|
||||
|
||||
if __name__ == '__main__':
|
||||
iqiyi = IQiYi()
|
||||
iqiyi.main()
|
||||
647
脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js
Normal file
647
脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js
Normal file
File diff suppressed because one or more lines are too long
216
脚本库/微信小程序/抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js
Normal file
216
脚本库/微信小程序/抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js
Normal file
@@ -0,0 +1,216 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/stokke.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/stokke.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/stokke.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 1e4d7ea79b5853ad7ec5db7de29a5a427f36451ddc33e75cb713e2cefda272ad
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * 1
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
stokke 微信小程序 每周签到得积分
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:stokke
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("stokke小程序");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `stokke`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wxe232c36aaca3dc1a',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
await this.getUserInfo()
|
||||
await this.doSign()
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let data = ({
|
||||
"code": code,
|
||||
"spread_spid": 0,
|
||||
"type": "routine",
|
||||
"inviteCode": "",
|
||||
"inviteTime": ""
|
||||
});
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: 'https://www.stokkeshop.cn/api/front/wechat/authorize/program/login?code=' + code,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'Authori-zation': '',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wxe232c36aaca3dc1a/54/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '200') {
|
||||
this.token = result.data.token
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.message}❌`)
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://www.stokkeshop.cn/api/front/user`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'Authori-zation': '' + this.token + '',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wxe232c36aaca3dc1a/54/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `[${result.data.nickname}] 积分[${result.data.integral}]🎉`);
|
||||
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.message}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
async doSign() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://www.stokkeshop.cn/api/front/integral-task/finishWeekSign`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'Authori-zation': '' + this.token + '',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wxe232c36aaca3dc1a/54/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
},
|
||||
data: {}
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
|
||||
$.log(`签到成功 🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.message}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,973 @@
|
||||
# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/tianyi.py
|
||||
# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tianyi.py
|
||||
# Repo: smallfawn/QLScriptPublic
|
||||
# Path: tianyi.py
|
||||
# UploadedAt: 2026-04-01T11:27:33Z
|
||||
# SHA256: b953df84d60d64163160620c6cddf66ccca375f3794ca42dff66c46d48401660
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
中国电信首页 → 天翼智铃
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
import ssl
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
import string
|
||||
import base64
|
||||
import hashlib
|
||||
import datetime
|
||||
import requests
|
||||
from hashlib import md5
|
||||
from http import cookiejar
|
||||
from Crypto.Cipher import AES, DES3
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Cipher import PKCS1_v1_5
|
||||
from Crypto.Util.Padding import pad, unpad
|
||||
|
||||
ACTIVITY_MODE = os.environ.get("ACTIVITY_MODE", "new_year")
|
||||
|
||||
CHANNEL_ID = "156000007489"
|
||||
INVITATION_CODE = ""
|
||||
ACTIVITY_ID = "ai089"
|
||||
VIDEO_ID = ""
|
||||
|
||||
# 账号配置:格式 "手机号#密码" 或 "手机号@密码"
|
||||
ACCOUNTS_STR = os.environ.get("chinaTelecomAccount", "")
|
||||
|
||||
MAKE_COUNT = 3
|
||||
|
||||
MIN_SCORE_TO_LOTTERY = 0
|
||||
context = ssl.create_default_context()
|
||||
context.set_ciphers('DEFAULT@SECLEVEL=1')
|
||||
context.check_hostname = False
|
||||
context.verify_mode = ssl.CERT_NONE
|
||||
|
||||
class DESAdapter(requests.adapters.HTTPAdapter):
|
||||
def init_poolmanager(self, *args, **kwargs):
|
||||
kwargs['ssl_context'] = context
|
||||
return super().init_poolmanager(*args, **kwargs)
|
||||
|
||||
class BlockAll(cookiejar.CookiePolicy):
|
||||
return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False
|
||||
netscape = True
|
||||
rfc2965 = hide_cookie2 = False
|
||||
|
||||
key = b'1234567`90koiuyhgtfrdews'
|
||||
iv = 8 * b'\0'
|
||||
public_key_b64 = '''-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBkLT15ThVgz6/NOl6s8GNPofdWzWbCkWnkaAm7O2LjkM1H7dMvzkiqdxU02jamGRHLX/ZNMCXHnPcW/sDhiFCBN18qFvy8g6VYb9QtroI09e176s+ZCtiv7hbin2cCTj99iUpnEloZm19lwHyo69u5UMiPMpq0/XKBO8lYhN/gwIDAQAB
|
||||
-----END PUBLIC KEY-----'''
|
||||
|
||||
requests.packages.urllib3.disable_warnings()
|
||||
ss = requests.session()
|
||||
ss.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 13; 22081212C) AppleWebKit/537.36"}
|
||||
ss.mount('https://', DESAdapter())
|
||||
ss.cookies.set_policy(BlockAll())
|
||||
|
||||
def encrypt_3des(text):
|
||||
cipher = DES3.new(key, DES3.MODE_CBC, iv)
|
||||
ciphertext = cipher.encrypt(pad(text.encode(), DES3.block_size))
|
||||
return ciphertext.hex()
|
||||
|
||||
def decrypt_3des(text):
|
||||
ciphertext = bytes.fromhex(text)
|
||||
cipher = DES3.new(key, DES3.MODE_CBC, iv)
|
||||
plaintext = unpad(cipher.decrypt(ciphertext), DES3.block_size)
|
||||
return plaintext.decode()
|
||||
|
||||
def b64_rsa(plaintext):
|
||||
public_key = RSA.import_key(public_key_b64)
|
||||
cipher = PKCS1_v1_5.new(public_key)
|
||||
ciphertext = cipher.encrypt(plaintext.encode())
|
||||
return base64.b64encode(ciphertext).decode()
|
||||
|
||||
def encode_phone(text):
|
||||
return ''.join(chr(ord(char) + 2) for char in text)
|
||||
|
||||
def generate_random_string(length=16):
|
||||
return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(length))
|
||||
|
||||
def md5_hash(data):
|
||||
return hashlib.md5(data.encode('utf-8')).hexdigest()
|
||||
|
||||
def encryptmd5(timestamp, randomnum):
|
||||
md5_e = md5_hash(str(timestamp))
|
||||
base64_encoded = base64.b64encode((md5_e + randomnum).encode()).decode()
|
||||
return md5_hash(base64_encoded + randomnum)
|
||||
|
||||
def encrypt_request(data, t, e, i):
|
||||
n = json.dumps({k: v for k, v in data.items() if v is not None}, separators=(',', ':'))
|
||||
encoded_t = base64.b64encode(t.encode()).decode()
|
||||
encoded_e = base64.b64encode(e.encode()).decode()
|
||||
s = md5((encoded_t + md5(e.encode()).hexdigest() + i).encode()).hexdigest()[:16]
|
||||
o = md5((encoded_e + md5(t.encode()).hexdigest() + i).encode()).hexdigest()[:16]
|
||||
cipher = AES.new(s.encode(), AES.MODE_CBC, iv=o.encode())
|
||||
padded_data = pad(n.encode(), AES.block_size)
|
||||
encrypted_data = cipher.encrypt(padded_data)
|
||||
return base64.b64encode(encrypted_data).decode()
|
||||
|
||||
def decrypt_response(encrypted_base64, t, e, i):
|
||||
encoded_t = base64.b64encode(t.encode()).decode()
|
||||
encoded_e = base64.b64encode(e.encode()).decode()
|
||||
n = md5((encoded_e + i + md5(t.encode()).hexdigest()).encode()).hexdigest()[:16]
|
||||
s = md5((encoded_t + i + md5(e.encode()).hexdigest()).encode()).hexdigest()[:16]
|
||||
cipher = AES.new(n.encode(), AES.MODE_CBC, iv=s.encode())
|
||||
encrypted_data = base64.b64decode(encrypted_base64)
|
||||
decrypted_data = cipher.decrypt(encrypted_data)
|
||||
unpadded_data = unpad(decrypted_data, AES.block_size)
|
||||
return json.loads(unpadded_data.decode())
|
||||
|
||||
def parse_accounts(accounts_str: str) -> list:
|
||||
accounts = []
|
||||
for part in accounts_str.replace("\n", "&").replace("\r", "").split("&"):
|
||||
part = part.strip()
|
||||
if "#" in part:
|
||||
phone, pwd = part.split("#", 1)
|
||||
elif "@" in part:
|
||||
phone, pwd = part.split("@", 1)
|
||||
else:
|
||||
continue
|
||||
phone, pwd = phone.strip(), pwd.strip()
|
||||
if phone and pwd:
|
||||
accounts.append((phone, pwd))
|
||||
return accounts
|
||||
|
||||
def userLoginNormal(phone, password):
|
||||
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
rdmstr = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=16))
|
||||
login_cipher = f'iPhone 14 15.4.{rdmstr[:12]}{phone}{timestamp}{password}0$$$0.'
|
||||
payload = {
|
||||
"headerInfos": {
|
||||
"code": "userLoginNormal", "timestamp": timestamp, "broadAccount": "", "broadToken": "",
|
||||
"clientType": "#11.3.0#channel50#iPhone 14 Pro Max#", "shopId": "20002",
|
||||
"source": "110003", "sourcePassword": "Sid98s", "token": "", "userLoginName": encode_phone(phone)
|
||||
},
|
||||
"content": {
|
||||
"attach": "test",
|
||||
"fieldData": {
|
||||
"loginType": "4", "accountType": "", "loginAuthCipherAsymmertric": b64_rsa(login_cipher),
|
||||
"deviceUid": rdmstr, "phoneNum": encode_phone(phone), "isChinatelecom": "0",
|
||||
"systemVersion": "15.4.0", "authentication": encode_phone(password)
|
||||
}
|
||||
}
|
||||
}
|
||||
r = ss.post('https://appgologin.189.cn:9031/login/client/userLoginNormal', json=payload)
|
||||
data = r.json()
|
||||
response_data = data.get('responseData')
|
||||
if response_data:
|
||||
data_inner = response_data.get('data')
|
||||
if data_inner:
|
||||
login_result = data_inner.get('loginSuccessResult')
|
||||
if login_result:
|
||||
return login_result
|
||||
print(f"登录响应: {data}")
|
||||
return None
|
||||
|
||||
def get_ticket(phone, userId, token):
|
||||
import re
|
||||
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
xml_data = f'<Request><HeaderInfos><Code>getSingle</Code><Timestamp>{timestamp}</Timestamp>' \
|
||||
f'<BroadAccount></BroadAccount><BroadToken></BroadToken>' \
|
||||
f'<ClientType>#9.6.1#channel50#iPhone 14 Pro Max#</ClientType><ShopId>20002</ShopId>' \
|
||||
f'<Source>110003</Source><SourcePassword>Sid98s</SourcePassword><Token>{token}</Token>' \
|
||||
f'<UserLoginName>{phone}</UserLoginName></HeaderInfos><Content><Attach>test</Attach>' \
|
||||
f'<FieldData><TargetId>{encrypt_3des(userId)}</TargetId>' \
|
||||
f'<Url>4a6862274835b451</Url></FieldData></Content></Request>'
|
||||
r = ss.post('https://appgologin.189.cn:9031/map/clientXML', data=xml_data,
|
||||
headers={'user-agent': 'CtClient;10.4.1;Android;13;22081212C;NTQzNzgx!#!MTgwNTg1'})
|
||||
tk = re.findall('<Ticket>(.*?)</Ticket>', r.text)
|
||||
if tk:
|
||||
return decrypt_3des(tk[0])
|
||||
return None
|
||||
|
||||
def sso_login_v2(ticket):
|
||||
payload = {"portal": "45", "channelId": CHANNEL_ID, "ticket": ticket}
|
||||
headers = {
|
||||
'User-Agent': "CtClient;11.3.0;Android;12;Redmi K30 Pro;MDAyNDUy!#!MTgwMjQ",
|
||||
'Content-Type': "application/json"
|
||||
}
|
||||
r = requests.post("https://ai.imusic.cn/vapi/vue_login/sso_login_v2",
|
||||
data=json.dumps(payload), headers=headers)
|
||||
if r.status_code == 200:
|
||||
data = r.json()
|
||||
if data.get("token"):
|
||||
return data.get("token"), r.cookies.get_dict()
|
||||
return None, None
|
||||
|
||||
|
||||
class InviteAPI:
|
||||
BASE_URL = "https://ai.imusic.cn"
|
||||
|
||||
def __init__(self, token: str, cookies: dict = None):
|
||||
self.token = token
|
||||
self.session = requests.Session()
|
||||
self.session.mount('https://', DESAdapter())
|
||||
if cookies:
|
||||
self.session.cookies.update(cookies)
|
||||
self.session.headers.update({
|
||||
"User-Agent": "CtClient;11.3.0;Android;12;Redmi K30 Pro;ODAwODUw!#!MTg2MDg",
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Encoding": "gzip, deflate, br, zstd",
|
||||
"Origin": self.BASE_URL,
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Referer": f"{self.BASE_URL}/h5v/fusion/ai-luck-flow?ca=AP3V&cc={CHANNEL_ID}&utm_scha=utm_ch-010001002009.utm_sch-hg_xx_qlxx-1-104705800001-105782800001.utm_af-1000000037.utm_as-158492900001.utm_sd1-default",
|
||||
"X-Requested-With": "com.ct.client",
|
||||
"sec-ch-ua": '"Chromium";v="140", "Not=A?Brand";v="24", "Android WebView";v="140"',
|
||||
"sec-ch-ua-mobile": "?1",
|
||||
"sec-ch-ua-platform": '"Android"',
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||
})
|
||||
|
||||
|
||||
|
||||
def request_plain(self, endpoint: str, params: dict = None) -> dict:
|
||||
url = f"{self.BASE_URL}{endpoint}"
|
||||
response = self.session.post(url, params=params, timeout=30)
|
||||
return response.json()
|
||||
|
||||
def request_encrypted(self, endpoint: str, params: dict) -> dict:
|
||||
self.session.headers["imencrypt"] = "1"
|
||||
imrandomnum = generate_random_string(16)
|
||||
imtimestamp = str(int(time.time() * 1000))
|
||||
imencryptkey = encryptmd5(imtimestamp, imrandomnum)
|
||||
|
||||
form_data = {"channelId": CHANNEL_ID, "portal": "45"}
|
||||
form_data.update(params)
|
||||
encrypted_form = encrypt_request(form_data, imrandomnum, imtimestamp, imencryptkey)
|
||||
|
||||
headers = {
|
||||
"imencryptkey": imencryptkey,
|
||||
"imrandomnum": imrandomnum,
|
||||
"imtimestamp": imtimestamp,
|
||||
}
|
||||
url = f"{self.BASE_URL}{endpoint}"
|
||||
response = self.session.post(url, params={"formData": encrypted_form}, headers=headers, timeout=30)
|
||||
|
||||
new_auth = response.headers.get("Authorization")
|
||||
if new_auth:
|
||||
self.token = new_auth
|
||||
self.session.headers["Authorization"] = f"Bearer {new_auth}"
|
||||
|
||||
try:
|
||||
return decrypt_response(response.text, imrandomnum, imtimestamp, imencryptkey)
|
||||
except:
|
||||
return {"raw": response.text}
|
||||
|
||||
def get_user_info(self, mobile: str) -> dict:
|
||||
params = {"channelId": CHANNEL_ID, "portal": "45", "mobile": mobile}
|
||||
return self.request_plain("/vapi/new_member/get_user_info", params)
|
||||
|
||||
def check_user_state(self, mobile: str) -> dict:
|
||||
params = {"mobile": mobile, "is4G": "1", "is5G": "1", "isDX": "1", "channelId": CHANNEL_ID, "portal": "45"}
|
||||
return self.request_plain("/vapi/vrbt/check_user_state", params)
|
||||
|
||||
def query_template_list(self, page_no: int = 1, page_size: int = 10) -> dict:
|
||||
params = {
|
||||
"pageNo": page_no, "pageSize": page_size, "activityId": ACTIVITY_ID,
|
||||
"apiName": "diy/DiyVideoApi/queryActRecommendTemplateList",
|
||||
"channelId": CHANNEL_ID, "portal": "45"
|
||||
}
|
||||
return self.request_plain("/hapi/de/api", params)
|
||||
|
||||
def send_stat_message(self, mobile: str, actname: str, actparam: str) -> dict:
|
||||
params = {
|
||||
"mobile": mobile,
|
||||
"actname": actname,
|
||||
"actparam": actparam
|
||||
}
|
||||
return self.request_encrypted("/vapi/vue_stat/sendMessage", params)
|
||||
|
||||
def template_make(self, mobile: str, template_id: str, template_conf_id: str,
|
||||
template_name: str, user_words: str = "", arrange_id: str = "", **kwargs) -> dict:
|
||||
params = {
|
||||
"channelId": CHANNEL_ID,
|
||||
"portal": "45",
|
||||
"mobile": mobile,
|
||||
"openId": "",
|
||||
"makeId": "",
|
||||
"background": "",
|
||||
"userPhotos": "",
|
||||
"userWords": user_words,
|
||||
"templateName": template_name,
|
||||
"videoName": template_name,
|
||||
"templateId": template_id,
|
||||
"templateConfId": template_conf_id,
|
||||
"aid": ACTIVITY_ID,
|
||||
"aiPack": 0,
|
||||
"arrangeId": arrange_id,
|
||||
"autoOrderUgc": 0,
|
||||
"aiGatewayImagMakeId": "",
|
||||
"fromType": "",
|
||||
"sessionId": ""
|
||||
}
|
||||
params.update(kwargs)
|
||||
return self.request_encrypted("/hapi/diy_video/au/template_make_add_v2", params)
|
||||
|
||||
def get_score(self, mobile: str, score_type: int = 1) -> dict:
|
||||
params = {
|
||||
"activityId": ACTIVITY_ID,
|
||||
"mobile": mobile,
|
||||
"type": score_type,
|
||||
"apiName": "act/ActApi/getDoubleTotalScoreOrRemainingScore"
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def do_lottery(self, mobile: str) -> dict:
|
||||
params = {
|
||||
"activityId": ACTIVITY_ID,
|
||||
"mobile": mobile,
|
||||
"apiName": "act/ActApi/doubleFestivalLottery"
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def do_egg_lottery(self, mobile: str, activity_id: str = "1611") -> dict:
|
||||
params = {
|
||||
"activityId": activity_id,
|
||||
"mobile": mobile,
|
||||
"apiName": "act/ActApi/doubleEggLottery"
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def get_lottery_times(self, mobile: str, activity_id: str = "1611") -> dict:
|
||||
params = {
|
||||
"mobile": mobile,
|
||||
"activityId": activity_id
|
||||
}
|
||||
return self.request_encrypted("/hapi/activity/au/get_act_lottery_times", params)
|
||||
|
||||
def query_new_year_templates(self, page_no: int = 1, page_size: int = 500) -> dict:
|
||||
params = {
|
||||
"pageNo": page_no,
|
||||
"pageSize": page_size,
|
||||
"activityId": "0090_2",
|
||||
"apiName": "diy/DiyVideoApi/queryActRecommendTemplateList",
|
||||
"channelId": CHANNEL_ID,
|
||||
"portal": "45"
|
||||
}
|
||||
return self.request_plain("/hapi/de/api", params)
|
||||
|
||||
def make_new_year_video(self, mobile: str, template_data: dict) -> dict:
|
||||
|
||||
template_id = template_data.get("templateId", "")
|
||||
template_conf_id = template_data.get("templateConfId", "")
|
||||
video_name = template_data.get("videoName", "")
|
||||
user_words = template_data.get("userWords", "")
|
||||
random_suffix = random.randint(100000, 999999)
|
||||
video_name_with_suffix = f"{video_name}{random_suffix}"
|
||||
|
||||
params = {
|
||||
"mobile": mobile,
|
||||
"openId": "",
|
||||
"background": template_id,
|
||||
"userPhotos": "",
|
||||
"userWords": user_words,
|
||||
"templateName": "",
|
||||
"videoName": video_name_with_suffix,
|
||||
"templateId": template_id,
|
||||
"templateConfId": template_conf_id,
|
||||
"aid": "ai090",
|
||||
"inviterMobile": "",
|
||||
"arrangeId": "",
|
||||
"autoOrderUgc": 0,
|
||||
"aiGatewayImagMakeId": "",
|
||||
"fromType": "",
|
||||
"sessionId": ""
|
||||
}
|
||||
return self.request_encrypted("/hapi/diy_video/au/template_make_add_v2", params)
|
||||
|
||||
def ai_agent_chat(self, mobile: str, content: str, agent_id: str = "", from_act: str = "cny", session_id: str = "") -> dict:
|
||||
params = {
|
||||
"apiName": "diy/AiAgentChatApi/aiAgentChat",
|
||||
"content": content,
|
||||
"mobile": mobile,
|
||||
"agentId": agent_id,
|
||||
"fromAct": from_act,
|
||||
"sessionId": session_id
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def control_confirm_submit(self, mobile: str, session_id: str, confirm_id: int, text_list: list,
|
||||
agent_id: str = "text_to_image", from_act: str = "cny") -> dict:
|
||||
params = {
|
||||
"apiName": "diy/AiAgentChatApi/controlConfirmSubmit",
|
||||
"content": "",
|
||||
"mobile": mobile,
|
||||
"sessionId": session_id,
|
||||
"confirmId": confirm_id,
|
||||
"channelId": "",
|
||||
"portal": "45",
|
||||
"agentId": agent_id,
|
||||
"triggerSource": "card_submit",
|
||||
"textList": text_list,
|
||||
"fromAct": from_act
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def check_ai_agent_result(self, mobile: str, task_id: str) -> dict:
|
||||
params = {
|
||||
"apiName": "diy/AiAgentChatApi/checkAiAgentResult",
|
||||
"mobile": mobile,
|
||||
"taskId": task_id
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def query_person_tasks(self, mobile: str, activity_id: str = "ai090") -> dict:
|
||||
params = {
|
||||
"apiName": "act/ActApi/queryPersonTasks",
|
||||
"mobile": mobile,
|
||||
"activityId": activity_id
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def query_red_packet_balance(self, mobile: str, activity_id: str = "1611") -> dict:
|
||||
params = {
|
||||
"apiName": "act/ActApi/doubleEggCostRedeemInfo",
|
||||
"mobile": mobile,
|
||||
"activityId": activity_id
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
def redeem_red_packet(self, mobile: str, cost_value: float, activity_id: str = "1611") -> dict:
|
||||
params = {
|
||||
"apiName": "act/ActApi/doubleEggCostRedeem",
|
||||
"mobile": mobile,
|
||||
"activityId": activity_id,
|
||||
"costValue": cost_value
|
||||
}
|
||||
return self.request_encrypted("/hapi/en/api", params)
|
||||
|
||||
|
||||
def process_new_year_lottery(phone: str, password: str, account_idx: int = 0, total_accounts: int = 0):
|
||||
print(f"\n{'='*50}")
|
||||
print(f"处理账号: {phone} ({account_idx}/{total_accounts})")
|
||||
print(f"活动: 2026新年星辰")
|
||||
print(f"{'='*50}")
|
||||
|
||||
print("\n[1] 账密登录...")
|
||||
login_result = userLoginNormal(phone, password)
|
||||
if not login_result:
|
||||
print("❌ 登录失败")
|
||||
return False
|
||||
print("✓ 登录成功")
|
||||
print("\n[2] 获取ticket...")
|
||||
ticket = get_ticket(phone, login_result['userId'], login_result['token'])
|
||||
if not ticket:
|
||||
print("❌ 获取ticket失败")
|
||||
return False
|
||||
print("✓ 获取ticket成功")
|
||||
print("\n[3] SSO登录...")
|
||||
token, cookies = sso_login_v2(ticket)
|
||||
if not token:
|
||||
print("❌ SSO登录失败")
|
||||
return False
|
||||
print(f"✓ SSO登录成功")
|
||||
|
||||
api = InviteAPI(token, cookies)
|
||||
|
||||
print("\n[4] 查询任务状态...")
|
||||
tasks_result = api.query_person_tasks(phone)
|
||||
|
||||
task1_completed = False
|
||||
task2_completed = False
|
||||
|
||||
if tasks_result.get("code") == "0000":
|
||||
tasks = tasks_result.get("data", {}).get("tasks", [])
|
||||
print(f"✓ 获取到 {len(tasks)} 个任务\n")
|
||||
|
||||
for task in tasks:
|
||||
task_name = task.get("taskName", "")
|
||||
task_type = task.get("taskType", "")
|
||||
task_state = task.get("taskState", 0) # 0=未完成, 1=已完成
|
||||
current_progress = task.get("currentProgress", 0)
|
||||
target_progress = task.get("targetProgress", 0)
|
||||
lottery_count = task.get("lotteryCount", 0)
|
||||
|
||||
state_text = "✓ 已完成" if task_state == 1 else "○ 未完成"
|
||||
print(f" {state_text} {task_name} ({current_progress}/{target_progress}) - 奖励: +{lottery_count}次")
|
||||
|
||||
if task_type == "video_make":
|
||||
task1_completed = (task_state == 1)
|
||||
elif task_type == "ai_agent_chat":
|
||||
task2_completed = (task_state == 1)
|
||||
|
||||
print()
|
||||
else:
|
||||
print(f"⚠ 查询失败,继续执行任务\n")
|
||||
|
||||
print("[5] 查询初始抽奖次数...")
|
||||
lottery_times_result = api.get_lottery_times(phone)
|
||||
if lottery_times_result.get("code") == "0000":
|
||||
initial_times = lottery_times_result.get("data", 0)
|
||||
print(f"✓ 当前抽奖次数: {initial_times}")
|
||||
else:
|
||||
print(f"⚠ 查询失败")
|
||||
initial_times = 0
|
||||
|
||||
print("\n" + "="*50)
|
||||
print("【任务1】制作同款视频(获得抽奖次数)")
|
||||
print("="*50)
|
||||
|
||||
if task1_completed:
|
||||
print("\n✓ 任务1已完成,跳过")
|
||||
task1_success = True
|
||||
else:
|
||||
print("\n[6] 查询新年模板列表...")
|
||||
templates_result = api.query_new_year_templates()
|
||||
if templates_result.get("code") != "0000":
|
||||
print(f"❌ 获取模板列表失败: {templates_result}")
|
||||
task1_success = False
|
||||
else:
|
||||
template_list = templates_result.get("data", {}).get("list", [])
|
||||
if not template_list:
|
||||
print("❌ 模板列表为空")
|
||||
task1_success = False
|
||||
else:
|
||||
print(f"✓ 获取到 {len(template_list)} 个模板")
|
||||
|
||||
print(f"\n[7] 开始制作视频 (共3次)...")
|
||||
task1_success_count = 0
|
||||
available_templates = template_list.copy()
|
||||
|
||||
success_count = 0
|
||||
attempt_count = 0
|
||||
max_attempts = min(len(available_templates), 10) # 最多尝试10次
|
||||
|
||||
while success_count < 3 and attempt_count < max_attempts and available_templates:
|
||||
attempt_count += 1
|
||||
|
||||
template = random.choice(available_templates)
|
||||
video_name = template.get("videoName", "")
|
||||
template_id = template.get("templateId", "")
|
||||
user_words = template.get("userWords", "")
|
||||
|
||||
print(f"\n 制作第 {success_count + 1}/3 次 (尝试 {attempt_count})...")
|
||||
print(f" 模板: {video_name} (ID: {template_id})")
|
||||
if not template_id or not user_words:
|
||||
print(f" ⚠ 模板缺少必要字段,跳过此模板")
|
||||
available_templates.remove(template)
|
||||
continue
|
||||
|
||||
result = api.make_new_year_video(phone, template)
|
||||
code = result.get("code", "")
|
||||
msg = result.get("message", result.get("desc", str(result)))
|
||||
|
||||
available_templates.remove(template)
|
||||
|
||||
if code == "0000":
|
||||
data = result.get("data", {})
|
||||
add_lottery_times = data.get("addLotteryTimes", 0)
|
||||
add_huango_times = data.get("addHuanGoLotteryTimes", "0")
|
||||
print(f" ✓ 制作成功! 获得抽奖次数: {add_lottery_times}, 换购次数: {add_huango_times}")
|
||||
success_count += 1
|
||||
task1_success_count += 1
|
||||
else:
|
||||
print(f" ✗ 制作失败: {msg},尝试下一个模板")
|
||||
|
||||
if success_count < 3 and available_templates:
|
||||
time.sleep(1)
|
||||
|
||||
print(f"\n任务1完成: {success_count}/3 成功 (共尝试 {attempt_count} 次)")
|
||||
task1_success = success_count > 0
|
||||
|
||||
lottery_times_result = api.get_lottery_times(phone)
|
||||
if lottery_times_result.get("code") == "0000":
|
||||
after_task1_times = lottery_times_result.get("data", 0)
|
||||
print(f"✓ 当前抽奖次数: {after_task1_times}")
|
||||
else:
|
||||
print(f"⚠ 查询失败")
|
||||
after_task1_times = initial_times
|
||||
|
||||
print("\n" + "="*50)
|
||||
print("【任务2】去智能体创作(获得抽奖次数)")
|
||||
print("="*50)
|
||||
|
||||
if task2_completed:
|
||||
print("\n✓ 任务2已完成,跳过")
|
||||
task2_success_count = 3
|
||||
else:
|
||||
ai_prompts = [
|
||||
"生成一张马年春节窗花剪纸的图片",
|
||||
"生成一张新年祝福的中国风图片",
|
||||
"生成一张春节喜庆氛围的图片"
|
||||
]
|
||||
|
||||
print(f"\n[9] 开始AI对话生成图片 (共3次)...")
|
||||
task2_success_count = 0
|
||||
session_id = ""
|
||||
|
||||
for chat_idx in range(3):
|
||||
prompt = ai_prompts[chat_idx % len(ai_prompts)]
|
||||
print(f"\n === 第 {chat_idx + 1}/3 次生成 ===")
|
||||
print(f" 提示词: {prompt}")
|
||||
|
||||
print(f" [1/3] 发起AI对话...")
|
||||
result1 = api.ai_agent_chat(phone, prompt, session_id=session_id)
|
||||
code1 = result1.get("code", "")
|
||||
|
||||
if code1 != "0000":
|
||||
msg = result1.get("desc", result1.get("message", "未知错误"))
|
||||
print(f" ✗ 对话失败: {msg}")
|
||||
continue
|
||||
|
||||
data1 = result1.get("data", {})
|
||||
session_id = data1.get("sessionId", "")
|
||||
confirm_id = data1.get("id", 0)
|
||||
card_params = data1.get("cardParameterList", {})
|
||||
text_list = card_params.get("textList", [])
|
||||
|
||||
print(f" ✓ 对话成功,confirmId: {confirm_id}")
|
||||
|
||||
if not text_list:
|
||||
print(f" ⚠ textList为空,跳过此次生成")
|
||||
continue
|
||||
|
||||
print(f" [2/3] 确认提交生成...")
|
||||
result2 = api.control_confirm_submit(phone, session_id, confirm_id, text_list)
|
||||
code2 = result2.get("code", "")
|
||||
|
||||
if code2 != "0000":
|
||||
msg = result2.get("desc", result2.get("message", "未知错误"))
|
||||
print(f" ✗ 提交失败: {msg}")
|
||||
continue
|
||||
|
||||
data2 = result2.get("data", {})
|
||||
task_id = data2.get("taskId", "")
|
||||
content = data2.get("content", "")
|
||||
|
||||
print(f" ✓ 提交成功,taskId: {task_id}")
|
||||
print(f" 响应: {content[:80]}..." if len(content) > 80 else f" 响应: {content}")
|
||||
|
||||
print(f" [3/3] 等待生成完成...这步冗余,保留了")
|
||||
max_check_times = 15
|
||||
check_interval = 2
|
||||
|
||||
for check_idx in range(max_check_times):
|
||||
time.sleep(check_interval)
|
||||
|
||||
result3 = api.check_ai_agent_result(phone, task_id)
|
||||
code3 = result3.get("code", "")
|
||||
desc3 = result3.get("desc", "")
|
||||
|
||||
if code3 == "0000":
|
||||
print(f" ✓ 生成完成! ({check_idx + 1}次检查)")
|
||||
task2_success_count += 1
|
||||
break
|
||||
elif code3 == "10008":
|
||||
print(f" ⏳ 制作中... ({check_idx + 1}/{max_check_times})")
|
||||
continue
|
||||
else:
|
||||
print(f" ✗ 生成失败: {desc3}")
|
||||
break
|
||||
else:
|
||||
print(f" ⚠ 等待超时,跳过")
|
||||
|
||||
if chat_idx < 2:
|
||||
print(f" 等待2秒后进行下一次生成...")
|
||||
time.sleep(2)
|
||||
|
||||
print(f"\n任务2完成: {task2_success_count}/3 成功")
|
||||
|
||||
print("\n" + "="*50)
|
||||
print("【抽奖环节】")
|
||||
print("="*50)
|
||||
print("\n[9] 查询最终抽奖次数...")
|
||||
lottery_times_result = api.get_lottery_times(phone)
|
||||
if lottery_times_result.get("code") == "0000":
|
||||
final_times = lottery_times_result.get("data", 0)
|
||||
print(f"✓ 最终抽奖次数: {final_times}")
|
||||
else:
|
||||
print(f"⚠ 查询失败,跳过抽奖")
|
||||
final_times = 0
|
||||
|
||||
total_red_packet = 0.0 # 累计红包金额
|
||||
if final_times > 0:
|
||||
print(f"\n开始抽奖 (共{final_times}次)...")
|
||||
lottery_success = 0
|
||||
awards = []
|
||||
|
||||
for lottery_idx in range(final_times):
|
||||
print(f"\n 第 {lottery_idx + 1}/{final_times} 次抽奖...")
|
||||
lottery_result = api.do_egg_lottery(phone)
|
||||
|
||||
if lottery_result.get("code") == "0000":
|
||||
data = lottery_result.get("data", {})
|
||||
award_name = data.get("awardName", "未知奖品")
|
||||
awards.append(award_name)
|
||||
print(f" ✓ {award_name}")
|
||||
lottery_success += 1
|
||||
money_match = re.search(r'(\d+\.?\d*)元', award_name)
|
||||
if money_match:
|
||||
money = float(money_match.group(1))
|
||||
total_red_packet += money
|
||||
else:
|
||||
msg = lottery_result.get("desc", lottery_result.get("message", "未知错误"))
|
||||
print(f" ✗ 抽奖失败: {msg}")
|
||||
|
||||
if lottery_idx < final_times - 1:
|
||||
time.sleep(0.5) # 抽奖间隔
|
||||
|
||||
print(f"\n抽奖完成: {lottery_success}/{final_times} 成功")
|
||||
if awards:
|
||||
print(f"获得奖品: {', '.join(awards)}")
|
||||
if total_red_packet > 0:
|
||||
print(f"累计红包: {total_red_packet:.2f}元")
|
||||
else:
|
||||
print(f"\n跳过抽奖 (抽奖次数为0)")
|
||||
|
||||
print(f"\n查询红包余额...")
|
||||
|
||||
balance_result = api.query_red_packet_balance(phone)
|
||||
if balance_result.get("code") == "0000":
|
||||
data = balance_result.get("data", {})
|
||||
already_redeem = data.get("alreadyRedeemValue", "0")
|
||||
balance_cost = data.get("balanceCostValue", "0")
|
||||
already_redeem_costs = data.get("alreadyRedeemCosts", [])
|
||||
|
||||
print(f" ✓ 查询成功!")
|
||||
print(f" 累计已兑换: {already_redeem}元")
|
||||
print(f" 剩余可兑换: {balance_cost}元")
|
||||
|
||||
if already_redeem_costs:
|
||||
print(f" 已兑换记录:")
|
||||
for record in already_redeem_costs:
|
||||
award_name = record.get("awardName", "")
|
||||
update_date = record.get("updateDate", "")
|
||||
print(f" - {award_name} ({update_date})")
|
||||
|
||||
try:
|
||||
balance_float = float(balance_cost)
|
||||
if balance_float >= 2.0:
|
||||
print(f"\n 💰 可兑换金额已满2元,开始兑换...")
|
||||
|
||||
redeem_result = api.redeem_red_packet(phone, balance_float)
|
||||
if redeem_result.get("code") == "0000":
|
||||
redeem_data = redeem_result.get("data", {})
|
||||
extract_value = redeem_data.get("extractValue", "0")
|
||||
new_already_redeem = redeem_data.get("alreadyRedeemValue", "0")
|
||||
new_balance = redeem_data.get("balanceCostValue", "0")
|
||||
|
||||
print(f" ✓ 兑换成功!")
|
||||
print(f" 本次提取: {extract_value}元")
|
||||
print(f" 累计已兑换: {new_already_redeem}元")
|
||||
print(f" 剩余可兑换: {new_balance}元")
|
||||
else:
|
||||
msg = redeem_result.get("desc", redeem_result.get("message", "未知错误"))
|
||||
print(f" ✗ 兑换失败: {msg}")
|
||||
else:
|
||||
print(f" ℹ️ 需满2元才能兑换(还差{2.0 - balance_float:.2f}元)")
|
||||
except Exception as e:
|
||||
print(f" ⚠ 处理失败: {e}")
|
||||
else:
|
||||
msg = balance_result.get("desc", balance_result.get("message", "未知错误"))
|
||||
print(f" ✗ 查询失败: {msg}")
|
||||
stat_result = api.send_stat_message(
|
||||
phone,
|
||||
"activity_2512new-year-2026_30.1",
|
||||
"activityID_ai090_ca_dljA"
|
||||
)
|
||||
if stat_result.get("code") == "0000":
|
||||
pass
|
||||
else:
|
||||
print(f"发送失败: {stat_result.get('desc', '')}")
|
||||
|
||||
print(f"\n{'='*50}")
|
||||
print(f"账号 {phone} 处理完成")
|
||||
print(f"{'='*50}")
|
||||
|
||||
return task1_success or task2_success_count > 0
|
||||
|
||||
|
||||
def process_account(phone: str, password: str, account_idx: int = 0, total_accounts: int = 0):
|
||||
print(f"\n{'='*50}")
|
||||
print(f"处理账号: {phone} ({account_idx}/{total_accounts})")
|
||||
print(f": {INVITATION_CODE[:20]}...")
|
||||
print(f"{'='*50}")
|
||||
print("\n[1] 账密登录...")
|
||||
login_result = userLoginNormal(phone, password)
|
||||
if not login_result:
|
||||
print("❌ 登录失败")
|
||||
return False
|
||||
print("✓ 登录成功")
|
||||
|
||||
print("\n[2] 获取ticket...")
|
||||
ticket = get_ticket(phone, login_result['userId'], login_result['token'])
|
||||
if not ticket:
|
||||
print("❌ 获取ticket失败")
|
||||
return False
|
||||
print("✓ 获取ticket成功")
|
||||
|
||||
print("\n[3] SSO登录...")
|
||||
token, cookies = sso_login_v2(ticket)
|
||||
if not token:
|
||||
print("❌ SSO登录失败")
|
||||
return False
|
||||
print(f"✓ SSO登录成功,token: {token[:50]}...")
|
||||
|
||||
api = InviteAPI(token, cookies)
|
||||
|
||||
print("\n获取用户信息...")
|
||||
user_info = api.get_user_info(phone)
|
||||
if user_info.get("code") == "0000":
|
||||
print(f"✓ 用户信息获取成功")
|
||||
else:
|
||||
print(f"用户信息: {user_info}")
|
||||
|
||||
# Step 7: 检查用户状态
|
||||
print("\n[6] 检查用户状态...")
|
||||
user_state = api.check_user_state(phone)
|
||||
print(f"用户状态: {user_state}")
|
||||
|
||||
# Step 8: 查询推荐模板列表
|
||||
print("\n[8] 查询推荐模板列表...")
|
||||
templates = api.query_template_list()
|
||||
template_list = templates.get("data", {}).get("list", [])
|
||||
if not template_list:
|
||||
print("❌ 未获取到模板列表")
|
||||
return False
|
||||
print(f"✓ 获取到 {len(template_list)} 个模板")
|
||||
|
||||
# Step 9: 选择第一个模板进行制作
|
||||
tpl = template_list[0]
|
||||
template_id = tpl.get("templateId", "")
|
||||
template_conf_id = tpl.get("templateConfId", "")
|
||||
video_name = tpl.get("videoName", "")
|
||||
user_words = tpl.get("userWords1", "1234")
|
||||
arrange_id = str(tpl.get("arrangeId", ""))
|
||||
|
||||
# 如果有输入限制,生成符合要求的内容
|
||||
word_min = tpl.get("wordMinCount", 0)
|
||||
limit_regular = tpl.get("limitRegular", "")
|
||||
|
||||
if limit_regular == "/^\\d+$/" and word_min > 0:
|
||||
# 数字输入(如手机尾号)
|
||||
user_words = phone[-word_min:] if len(phone) >= word_min else phone
|
||||
elif word_min > 0 and not user_words:
|
||||
user_words = "接福" # 默认文字
|
||||
|
||||
print(f"\n[9] 开始制作模板 (共{MAKE_COUNT}次)...")
|
||||
print(f" 模板: {video_name}")
|
||||
print(f" 模板ID: {template_id}")
|
||||
print(f" 配置ID: {template_conf_id}")
|
||||
print(f" 用户输入: {user_words}")
|
||||
print(f" : {INVITATION_CODE[:20]}...")
|
||||
|
||||
# Step 10: 循环制作
|
||||
success_count = 0
|
||||
for make_idx in range(MAKE_COUNT):
|
||||
print(f"\n 制作第 {make_idx + 1}/{MAKE_COUNT} 次...")
|
||||
result = api.template_make(
|
||||
mobile=phone,
|
||||
template_id=template_id,
|
||||
template_conf_id=template_conf_id,
|
||||
template_name=video_name,
|
||||
user_words=user_words,
|
||||
arrange_id=arrange_id
|
||||
)
|
||||
msg = result.get("message", result.get("desc", str(result)))
|
||||
code = result.get("code", "")
|
||||
print(f" 结果: {msg}")
|
||||
if code == "0000":
|
||||
success_count += 1
|
||||
if make_idx < MAKE_COUNT - 1:
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"\n制作完成: {success_count}/{MAKE_COUNT} 成功")
|
||||
|
||||
if success_count > 0:
|
||||
actparam_base = f"activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateConfID_{template_conf_id}_ca_AP3V"
|
||||
|
||||
stat_events = [
|
||||
("activity_vring_make_20250616", actparam_base),
|
||||
("activity_2511AI-makeonekey_9.2", actparam_base),
|
||||
("activity_vring_make_1.9", f"_activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateconfID_{template_conf_id}_ca_AP3V"),
|
||||
("activity_2511AI-makeonekey_1.6", f"activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateconfID_{template_conf_id}_ca_AP3V"),
|
||||
("page_2511AI-makeonekey_9", actparam_base),
|
||||
("page_2511AI-makeonekey_3", actparam_base),
|
||||
("with_vring_display_20250616", actparam_base),
|
||||
("with_vring_slide_display_20250829", actparam_base),
|
||||
("with_vring_stay_duration", f"activityID_{ACTIVITY_ID}_entrance_{CHANNEL_ID}_duration_15_ca_AP3V"),
|
||||
]
|
||||
|
||||
for actname, actparam in stat_events:
|
||||
try:
|
||||
stat_result = api.send_stat_message(phone, actname, actparam)
|
||||
if stat_result.get("code") == "0000":
|
||||
print(f" ✓ {actname}")
|
||||
else:
|
||||
print(f" ⚠ {actname}: {stat_result.get('desc', '')}")
|
||||
except Exception as e:
|
||||
print(f" ⚠ {actname}: {str(e)}")
|
||||
time.sleep(0.1)
|
||||
|
||||
print("\n查看积分...")
|
||||
score_result = api.get_score(phone)
|
||||
current_score = 0
|
||||
if score_result.get("code") == "0000":
|
||||
current_score = int(score_result.get("data", "0"))
|
||||
print(f"✓ 当前积分: {current_score}")
|
||||
else:
|
||||
print(f"积分查询: {score_result}")
|
||||
|
||||
if MIN_SCORE_TO_LOTTERY > 0 and current_score >= MIN_SCORE_TO_LOTTERY:
|
||||
print(f"\n[13] 抽奖 (积分{current_score} >= 阈值{MIN_SCORE_TO_LOTTERY})...")
|
||||
lottery_result = api.do_lottery(phone)
|
||||
if lottery_result.get("code") == "0000":
|
||||
award_data = lottery_result.get("data", {})
|
||||
award_name = award_data.get("awardName", "未知")
|
||||
print(f"✓ 抽奖结果: {award_name}")
|
||||
else:
|
||||
print(f"抽奖失败: {lottery_result}")
|
||||
elif MIN_SCORE_TO_LOTTERY == 0:
|
||||
print(f"\n[13] 跳过抽奖 (阈值设为0,不抽奖)")
|
||||
else:
|
||||
print(f"\n[13] 跳过抽奖 (积分{current_score} < 阈值{MIN_SCORE_TO_LOTTERY})")
|
||||
|
||||
if success_count > 0:
|
||||
print("✓ 兑换成功!")
|
||||
return True
|
||||
else:
|
||||
print("❌ 兑换失败")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
accounts = parse_accounts(ACCOUNTS_STR)
|
||||
if not accounts:
|
||||
print("错误: 未配置账号")
|
||||
return
|
||||
|
||||
print("=" * 50)
|
||||
print("电信彩玲AI脚本 - 2026新年星辰活动")
|
||||
print(f"渠道ID: {CHANNEL_ID}")
|
||||
print(f"共 {len(accounts)} 个账号")
|
||||
print("=" * 50)
|
||||
print("\n活动说明:")
|
||||
print(" 任务1: 制作新年视频 (3次) → 获得抽奖次数")
|
||||
print(" 任务2: AI对话生成图片 (3次) → 获得抽奖次数")
|
||||
print(" 最后: 使用获得的次数进行抽奖")
|
||||
print("=" * 50)
|
||||
|
||||
total = len(accounts)
|
||||
success_count = 0
|
||||
for idx, (phone, password) in enumerate(accounts):
|
||||
if process_new_year_lottery(phone, password, idx + 1, total):
|
||||
success_count += 1
|
||||
if idx < len(accounts) - 1:
|
||||
print(f"\n等待3秒后处理下一个账号...")
|
||||
time.sleep(3)
|
||||
|
||||
print(f"\n{'='*50}")
|
||||
print(f"全部处理完成: {success_count}/{total} 成功")
|
||||
print(f"{'='*50}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
159
脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js
Normal file
159
脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js
Normal file
@@ -0,0 +1,159 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: this官方商城.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 7916a72936d4a9aacda86d9ab03280f95d2d9d04e8e84383fb0829be122e04cd
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn 860562056
|
||||
@Date: 2024.06.09 13.27
|
||||
@Description: this官方商城小程序 签到
|
||||
------------------------------------------
|
||||
变量名this
|
||||
变量值https://xcx.this.cn/api/ 域名下请求头Headers中authori-zation的值 去掉Bearer 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("this官方商城");
|
||||
let ckName = `this`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
await info()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function info() {
|
||||
let data = JSON.stringify({
|
||||
"sign": 1
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://xcx.this.cn/api/sign/user',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'charset': 'utf-8',
|
||||
'form-type': 'routine',
|
||||
'authori-zation': 'Bearer ' + $.token,
|
||||
'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.status == 200) {
|
||||
$.log(`${result.data.nickname} 累计签到[${result.data.sign_num}]天 当前积分[${result.data.integral}]分`)
|
||||
if (result.data.is_day_sgin !== true) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await signIn()
|
||||
} else {
|
||||
$.log(`已签到 ===> 跳过签到`)
|
||||
}
|
||||
} else {
|
||||
$.log(result.msg)
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let data = JSON.stringify({});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://xcx.this.cn/api/sign/integral',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'charset': 'utf-8',
|
||||
'form-type': 'routine',
|
||||
'authori-zation': 'Bearer ' + $.token,
|
||||
'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.status == 200) {
|
||||
$.log(`签到成功:[${result.msg}]`)
|
||||
} else {
|
||||
$.log(result.msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
121
脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py
Normal file
121
脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: topspace小程序.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 0c2cf24eeedde16a73bd6ff8f3dd0b86507004dcbd7def57502e5f3d8b644612
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
'''
|
||||
topspace微信小程序
|
||||
topspace小程序每天定时两次就可以
|
||||
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
new Env('topspace');
|
||||
抓x-vcs-user-token和app-id用&分割并且多号@
|
||||
'''
|
||||
import requests
|
||||
import os
|
||||
|
||||
class AC:
|
||||
def __init__(self, cookie):
|
||||
self.headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220133 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
'app-id': cookie.split('&')[1],
|
||||
'x-vcs-user-token': cookie.split('&')[0]
|
||||
}
|
||||
|
||||
def info(self):
|
||||
url = "https://m.sda.changan.com.cn/app-apigw/user-info-api/api/v1/sda-app/personal-info/basic-information"
|
||||
response = requests.get(url, headers=self.headers)
|
||||
data = response.json()
|
||||
if data['code'] == 0:
|
||||
userNickname = data["data"]["userNickname"]
|
||||
totalPoints = data["data"]["pointInfo"]["totalPoints"]
|
||||
print(f"用户:{userNickname}当前共有{totalPoints}币")
|
||||
return userNickname
|
||||
else:
|
||||
msg = data["msg"]
|
||||
print(f"登录失败: {msg}")
|
||||
return None
|
||||
|
||||
def check(self, userNickname):
|
||||
url = "https://m.sda.changan.com.cn/app-apigw/user-info-api/api/v2/point/check-in"
|
||||
response = requests.post(url, headers=self.headers)
|
||||
data = response.json()
|
||||
if data['code'] == 0:
|
||||
description = data["data"]["description"]
|
||||
total = data["data"]["total"]
|
||||
print(f"用户:{userNickname}{description}获得{total}TOP币")
|
||||
else:
|
||||
msg = data["msg"]
|
||||
print(f"签到失败: {msg}")
|
||||
|
||||
def list_articles(self, userNickname):
|
||||
url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/post/list"
|
||||
data = {
|
||||
"section_id": "1002",
|
||||
"page": {
|
||||
"current_page": 1,
|
||||
"page_size": 20
|
||||
},
|
||||
"sort_type": "RECOMMEND_FIRST"
|
||||
}
|
||||
response = requests.post(url, headers=self.headers, json=data)
|
||||
data = response.json()
|
||||
if data['code'] == 0:
|
||||
article_id = data["data"]["list"][0]["id"]
|
||||
print(f"用户:{userNickname}获取文章{article_id}")
|
||||
return article_id
|
||||
else:
|
||||
msg = data["msg"]
|
||||
print(f"获取文章失败: {msg}")
|
||||
|
||||
def publish_comment(self, userNickname, article_id):
|
||||
url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/comment/publish"
|
||||
data = {
|
||||
"content": "很酷",
|
||||
"post_id": article_id
|
||||
}
|
||||
response = requests.post(url, headers=self.headers, json=data)
|
||||
data = response.json()
|
||||
if data['code'] == 0:
|
||||
print("发布成功")
|
||||
else:
|
||||
print(f"发布失败: {data['msg']}")
|
||||
|
||||
def share_article(self, userNickname, article_id):
|
||||
url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/action/share"
|
||||
data = {
|
||||
"post_id": article_id
|
||||
}
|
||||
response = requests.post(url, headers=self.headers, json=data)
|
||||
data = response.json()
|
||||
if data['code'] == 0:
|
||||
print("转发成功")
|
||||
else:
|
||||
print(f"转发失败: {data['msg']}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
topspace = os.environ.get('topspace')
|
||||
if not topspace:
|
||||
print("请设置环境变量 'topspace' 后再运行")
|
||||
else:
|
||||
topspace_list = topspace.split('@')
|
||||
for num, topspace_item in enumerate(topspace_list, start=1):
|
||||
x_vcs_user_token, app_id = topspace_item.split('&')
|
||||
cookie = f"{x_vcs_user_token}&{app_id}"
|
||||
ac = AC(cookie)
|
||||
print(f"=====开始执行第{num}个账号任务=====")
|
||||
user_nickname = ac.info()
|
||||
if user_nickname:
|
||||
ac.check(user_nickname)
|
||||
article_id = ac.list_articles(user_nickname)
|
||||
if article_id:
|
||||
ac.publish_comment(user_nickname, article_id)
|
||||
ac.share_article(user_nickname, article_id)
|
||||
print("---------账号任务执行完毕---------")
|
||||
253
脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js
Normal file
253
脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js
Normal file
File diff suppressed because one or more lines are too long
425
脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js
Normal file
425
脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js
Normal file
File diff suppressed because one or more lines are too long
68
脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js
Normal file
68
脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js
Normal file
@@ -0,0 +1,68 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wcs.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wcs.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/wcs.js
|
||||
// # UploadedAt: 2026-05-14T07:10:35Z
|
||||
// # SHA256: d9b348cac05cc8da8c9155c9b46a421f1ba392f2982930f6f89d7636709ee6d5
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
class WeChatCodeServer {
|
||||
constructor(options) {
|
||||
this.serverUrl = options.url;
|
||||
this.appid = options.appid;
|
||||
this.auth = options.auth;
|
||||
}
|
||||
getCode(openid) {
|
||||
console.log('等待获取code:');
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.post(this.serverUrl + '/wx/code', { appid: this.appid, openid }, {
|
||||
headers: {
|
||||
'auth': this.auth
|
||||
},
|
||||
timeout: 30 * 1000
|
||||
}).then(res => {
|
||||
console.log('获取code成功:');
|
||||
resolve(res);
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
cloudInit(openid) {
|
||||
console.log('等待云函数初始化:');
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.post(this.serverUrl + '/wx/call/init', { appid: this.appid, openid }, {
|
||||
headers: {
|
||||
'auth': this.auth
|
||||
},
|
||||
timeout: 30 * 1000
|
||||
}).then(res => {
|
||||
console.log('云函数初始化成功:');
|
||||
resolve(res);
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
cloudCall(openid) {
|
||||
console.log('等待云函数调用:');
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.post(this.serverUrl + '/wx/cloud/call', { appid: this.appid, openid }, {
|
||||
headers: {
|
||||
'auth': this.auth
|
||||
},
|
||||
timeout: 30 * 1000
|
||||
}).then(res => {
|
||||
console.log('云函数调用成功:');
|
||||
resolve(res);
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
module.exports = WeChatCodeServer;
|
||||
967
脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js
Normal file
967
脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js
Normal file
File diff suppressed because one or more lines are too long
426
脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js
Normal file
426
脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js
Normal file
File diff suppressed because one or more lines are too long
129
脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py
Normal file
129
脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py
Normal file
@@ -0,0 +1,129 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 七点五饮用天然矿泉水.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: d6fe496720c54bd714a265dd36c0db3b70649d76a897a147a438523118d014fc
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#微信小程序:七点五饮用天然矿泉水
|
||||
#签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15
|
||||
#抓取任意链接请求头中的extra-data中的sid参数填入青龙变量qdwxcxcookie
|
||||
#不确定参数有效期
|
||||
#青龙变量qdwxcxcookie格式为备注#sid
|
||||
#多账号换行
|
||||
#小库脚本!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
#频道【tl库】:https://pd.qq.com/s/btv4bw7av
|
||||
|
||||
|
||||
|
||||
import requests
|
||||
from os import path
|
||||
import json
|
||||
import time
|
||||
import os
|
||||
|
||||
def load_send():
|
||||
cur_path = path.abspath(path.dirname(__file__))
|
||||
notify_file = cur_path + "/notify.py"
|
||||
|
||||
if path.exists(notify_file):
|
||||
try:
|
||||
from notify import send # 导入模块的send为notify_send
|
||||
print("加载通知服务成功!")
|
||||
return send # 返回导入的函数
|
||||
except ImportError:
|
||||
print("加载通知服务失败~")
|
||||
else:
|
||||
print("加载通知服务失败~")
|
||||
|
||||
return False # 返回False表示未成功加载通知服务
|
||||
|
||||
|
||||
|
||||
def sign():
|
||||
url = "https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=3997371"
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129",
|
||||
'xweb_xhr': "1",
|
||||
'extra-data': sid,
|
||||
'sec-fetch-site': "cross-site",
|
||||
'sec-fetch-mode': "cors",
|
||||
'sec-fetch-dest': "empty",
|
||||
'referer': "https://servicewechat.com/wx5508c9ab0d2118ff/63/page-frame.html",
|
||||
'accept-language': "zh-CN,zh;q=0.9",
|
||||
'Cookie': "KDTWEAPPSESSIONID="+sid
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
time.sleep(2)
|
||||
print(response.text)
|
||||
time.sleep(2)
|
||||
return response.text
|
||||
|
||||
def jifen():
|
||||
url = "https://h5.youzan.com/wscump/pointstore/getCustomerPoints.json"
|
||||
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129",
|
||||
'Cookie': "KDTWEAPPSESSIONID="+sid
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
time.sleep(2)
|
||||
# print(response.text)
|
||||
try:
|
||||
xiaoku=json.loads(response.text)
|
||||
jifen1=str(xiaoku["data"]["currentAmount"])
|
||||
print('目前积分为'+jifen1)
|
||||
time.sleep(2)
|
||||
|
||||
url = "https://h5.youzan.com/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=3997371"
|
||||
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129",
|
||||
'extra-data': "sid="+sid,
|
||||
'Cookie': "KDTWEAPPSESSIONID="+sid
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
xiaoku=json.loads(response.text)
|
||||
print('目前签到天数为'+str(xiaoku["data"]["continuesDay"]))
|
||||
# print(response.text)
|
||||
tongzhi='\n目前积分为'+jifen1+'\n签到天数为'+str(xiaoku["data"]["continuesDay"])
|
||||
return tongzhi
|
||||
except:
|
||||
print('积分查询失败,检查变量是否正确')
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
var_name='qdwxcxcookie'
|
||||
values = os.getenv(var_name)
|
||||
values=values.split('\n')
|
||||
content=''
|
||||
for value in values:
|
||||
beizhu=value.split('#')[0];
|
||||
sid=value.split('#')[1];
|
||||
print('-------开始' + str(beizhu) + '签到------')
|
||||
content=content+'\n===='+str(beizhu)+'账号签到情况====\n'
|
||||
content=content+str(sign())
|
||||
print('-------开始' + str(beizhu) + '查询积分------')
|
||||
content=content+str(jifen())
|
||||
content=content+'\n----------------------\n'
|
||||
# 在load_send中获取导入的send函数
|
||||
send = load_send()
|
||||
print()
|
||||
|
||||
|
||||
print('------运行结束-------')
|
||||
content=content+'\n签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15\n'
|
||||
content=content+'\n所有账号运行完毕\n'
|
||||
print('签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15')
|
||||
# 判断send是否可用再进行调用
|
||||
print()
|
||||
if send:
|
||||
send('七点五饮用天然矿泉水签到推送', content)
|
||||
else:
|
||||
print('通知服务不可用')
|
||||
5832
脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py
Normal file
5832
脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py
Normal file
File diff suppressed because it is too large
Load Diff
90
脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py
Normal file
90
脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py
Normal file
@@ -0,0 +1,90 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 产地严选小程序.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: f81d5d959073dedc5f43a7d1259f4c5da22afbe0d6295f367a72e41c779a59b6
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
'''
|
||||
产地严选小程序
|
||||
可以在浏览器打开https://c.hanhoukeji.com/h5/#/网页获取Access-Token
|
||||
也可以在微信小程序获取Access-Token
|
||||
变量名:cdyxck,多号&分割
|
||||
TL库
|
||||
每天一次
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709
|
||||
|
||||
|
||||
'''
|
||||
|
||||
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
import random
|
||||
|
||||
|
||||
def main(token):
|
||||
url = "https://c.hanhoukeji.com/index.php?s=/api/points/taskComplete"
|
||||
list=[10,20,30,40,50,70,80]
|
||||
for i in list:
|
||||
payload = json.dumps({
|
||||
"source": i
|
||||
})
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13) XWEB/9129",
|
||||
'Content-Type': "application/json",
|
||||
'access-token': token
|
||||
}
|
||||
response = requests.post(url, data=payload, headers=headers)
|
||||
data = json.loads(response.text)
|
||||
status = data['status']
|
||||
message=data["message"]
|
||||
print('获取任务中..................')
|
||||
if message == '没有找到用户信息':
|
||||
print(message)
|
||||
break
|
||||
time.sleep(1)
|
||||
print(message)
|
||||
rand = random.randint(5,20)
|
||||
print('等待'+str(int(rand))+'秒后继续运行')
|
||||
time.sleep(rand)
|
||||
def user_points(token):
|
||||
url = "https://c.hanhoukeji.com/index.php?s=/api/points/userPointsLog"
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13) XWEB/9129",
|
||||
'access-token': token
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
data = json.loads(response.text)
|
||||
status = data['status']
|
||||
message = data['message']
|
||||
if status == 200:
|
||||
user_points=data["data"]["user_points"]
|
||||
print('当前积分:'+str(user_points))
|
||||
else:
|
||||
print('')
|
||||
time.sleep(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
cks=os.getenv('cdyxck')
|
||||
cks = cks.split("&")
|
||||
print(f"检测到{len(cks)}个账号,即将开始...")
|
||||
i = 1
|
||||
for ck in cks:
|
||||
token=ck
|
||||
print(f"----------第{i}个账号----------")
|
||||
i += 1
|
||||
main(token)
|
||||
user_points(token)
|
||||
rand = random.randint(5,20)
|
||||
if i > len(cks):
|
||||
break
|
||||
print(f"\n等待{rand}s后进行下一个账号")
|
||||
time.sleep(rand)
|
||||
852
脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js
Normal file
852
脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js
Normal file
@@ -0,0 +1,852 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 全棉时代.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 78833e2a1ea602df34a3a8b99a3962eb2e64253bcc8b9f455461d25bef894e29
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
"""
|
||||
|
||||
>TL库:https://github.com/3288588344/toulu.git
|
||||
tg频道:https://t.me/TLtoulu
|
||||
QQ频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
项目 全棉时代种棉花
|
||||
入口 #小程序://全棉时代
|
||||
变量 code #token#备注 多账号换行
|
||||
变量名 qmzmh
|
||||
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
|
||||
|
||||
# 配置参数
|
||||
base_url = "https://hxxxy.gov.cn"
|
||||
user_agent = "Mozilla/5.0 (Linux; Android 11; ONEPLUS A6000 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231201 MMWEBID/2930 MicroMessenger/8.0.45.2521(0x28002D3D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxdfcaa44b1aa891a7"
|
||||
|
||||
def get_beijing_date():
|
||||
beijing_time = datetime.now(timezone(timedelta(hours=8)))
|
||||
return beijing_time.date()
|
||||
|
||||
def dq_time():
|
||||
dqsj = int(time.time())
|
||||
dysj = datetime.fromtimestamp(dqsj).strftime('%Y-%m-%d %H:%M:%S')
|
||||
print("当前时间戳:", dqsj)
|
||||
print("转换后的时间:", dysj)
|
||||
return dqsj, dysj
|
||||
|
||||
def get_env_variable(var_name):
|
||||
value = os.getenv(var_name)
|
||||
if value is None:
|
||||
print(f'环境变量{var_name}未设置,请检查。')
|
||||
return None
|
||||
accounts = value.strip().split('\n')
|
||||
print(f'-----------本次账号运行数量:{len(accounts)}-----------')
|
||||
print(f'------全棉时代种棉花-----1.2------')
|
||||
return accounts
|
||||
|
||||
def create_headers(code, token):
|
||||
headers = {
|
||||
'host': 'sg01.purcotton.com',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'app-id': 'wxdfcaa44b1aa891a7',
|
||||
'user-agent': user_agent,
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'origin': 'https://sg01.purcotton.com',
|
||||
'x-requested-with': 'com.tencent.mm',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'accept-encoding': 'gzip, deflate',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'cookie': 'sajssdk_2015_cross_new_user=1',
|
||||
'code': code,
|
||||
'token': token,
|
||||
}
|
||||
return headers
|
||||
|
||||
|
||||
def jscz(code, token): # 浇水
|
||||
# 调用hqid函数并获取树木ID及其他信息
|
||||
tree_id, sunshine, total_sunshine = hqid(code, token)
|
||||
|
||||
if tree_id is not None:
|
||||
#print(f"获得的树木ID: {tree_id}")
|
||||
# 可以在这里打印阳光信息,如果需要
|
||||
#print(f"当前阳光: {sunshine}, 总阳光: {total_sunshine}")
|
||||
|
||||
while True: # 开始一个无限循环
|
||||
url = "https://sg01.purcotton.com/api/watering"
|
||||
data = {"tree_user_id": tree_id, "water_cnt": 1} # 使用动态获取的树木ID
|
||||
headers = create_headers(code, token)
|
||||
#print(data)
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
# 提取剩余水滴数
|
||||
remaining_water = response_data["data"]["info"]["sy_water"]
|
||||
print(f"剩余水滴数: {remaining_water}")
|
||||
|
||||
# 根据剩余水滴数决定是否继续
|
||||
if remaining_water < 30: # 如果剩余水滴数小于30,则停止
|
||||
print("水滴不足,停止浇水。")
|
||||
break
|
||||
|
||||
print("执行浇水操作...")
|
||||
# 暂停1到3秒
|
||||
time.sleep(random.randint(1, 3))
|
||||
|
||||
elif response_data.get("code") == 400:
|
||||
print(response_data.get("msg", "未知错误"))
|
||||
break # 遇到错误时停止循环
|
||||
else:
|
||||
print("未知的响应code:", response_data.get("code"))
|
||||
print("完整响应:", response_data)
|
||||
break # 如果响应码不是200或400,停止循环
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
break # 请求异常时停止循环
|
||||
else:
|
||||
print("未能获取树木ID,无法执行浇水操作。")
|
||||
|
||||
|
||||
def llhmp(code, token, action, tid): # 添加了tid参数
|
||||
phone, _ = login(code, token) # 调用login函数,获取电话号码,忽略user_id
|
||||
|
||||
url = "https://nmp.pureh2b.com/api/purcotton/completetask"
|
||||
headers = {
|
||||
'Host': 'nmp.pureh2b.com',
|
||||
'XWeb-Xhr': '1',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
'code': code,
|
||||
'token': token,
|
||||
}
|
||||
data = {
|
||||
'action': action,
|
||||
'phone': phone,
|
||||
'from': 'guoyuan'
|
||||
}
|
||||
#print(data)
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json() # 解析响应数据为JSON
|
||||
|
||||
action_descriptions = {
|
||||
'browse_venue': '逛甄选好棉品',
|
||||
'browse_new_user_zone': '浏览新用户专区',
|
||||
'browse_community': '社区送福利',
|
||||
'subscibe': '订阅奖励提醒'
|
||||
|
||||
}
|
||||
action_description = action_descriptions.get(action, '执行任务')
|
||||
|
||||
#print(f"执行任务 '{action_description}' 响应内容:", response.text) # 打印响应内容
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
print(f"{action_description} 任务成功,暂停一段时间再继续...")
|
||||
time.sleep(random.randint(15, 20))
|
||||
tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||||
elif response_data.get("code") == 400:
|
||||
#print() # 打印响应内容
|
||||
print(f"{action_description} :{response_data.get('msg')}")
|
||||
#tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||||
else:
|
||||
print("{action_description} 收到未预期的响应,响应内容如下:")
|
||||
print(response_data)
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def tjlq_mpjl(code, token, tid): # 添加了tid参数来指定任务ID 提交 任务 领取奖励
|
||||
url = "https://sg01.purcotton.com/api/task/receive-task-water"
|
||||
headers = create_headers(code, token)
|
||||
data = {"tid": tid} # 使用传入的任务ID
|
||||
#print(data)
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data) # 发送POST请求
|
||||
response.raise_for_status() # 检查响应状态码
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("奖励领取成功。")
|
||||
# 打印sy_water和get_water
|
||||
data = response_data.get("data", {})
|
||||
sy_water = data.get("sy_water", "未知") #
|
||||
get_water = data.get("get_water", "未知") # 同上
|
||||
print(f"剩余水量:{sy_water}, 获取水量:{get_water}")
|
||||
else:
|
||||
print(f"奖励领取失败,错误信息:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def task_list(code, token): # 任务列表
|
||||
url = "https://sg01.purcotton.com/api/task/list"
|
||||
headers = create_headers(code, token)
|
||||
today_date = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期,格式为YYYY-MM-DD
|
||||
|
||||
# 任务ID到任务名称的映射
|
||||
task_names = {
|
||||
1: "签到, 1",
|
||||
2: "不知道1, 0",
|
||||
4: "三餐福袋, 3",
|
||||
6: "逛甄选好棉品, 4",
|
||||
10: "订阅奖励提醒, 1",
|
||||
13: "浏览新用户, 2",
|
||||
14: "庄园小课堂, 3",
|
||||
15: "棉花工厂, 1",
|
||||
16: "社区送福利, 1"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
today_tasks = [] # 用于存储今天的任务信息
|
||||
if response_data.get("code") == 200:
|
||||
task_user_info = response_data.get("data", {}).get("task_user_info", [])
|
||||
print("------任务进度条-----------")
|
||||
for task in task_user_info:
|
||||
task_id = task.get('task_id')
|
||||
complete_num = task.get('complete_num')
|
||||
complete_date = task.get('complete_date')
|
||||
# 比较任务完成日期是否为今天
|
||||
#print("------任务进度条-----------")
|
||||
if complete_date == today_date:
|
||||
task_name = task_names.get(task_id, f"未知任务 {task_id}") # 获取任务名称,如果未知则显示未知任务和ID
|
||||
|
||||
print(f"任务ID: {task_id} {task_name}/{complete_num}, 任务时间: {complete_date}")
|
||||
#print(f"{task_name}/{complete_num} 时间: {complete_date}")
|
||||
today_tasks.append(task)
|
||||
print("-----------------")
|
||||
print()
|
||||
return today_tasks
|
||||
|
||||
else:
|
||||
print(f"获取任务列表失败,错误信息:{response_data.get('msg')}")
|
||||
return []
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return []
|
||||
|
||||
|
||||
|
||||
def pdrw(code, token): # 判断任务
|
||||
"""根据任务完成情况执行任务"""
|
||||
try:
|
||||
task_user_info = task_list(code, token)
|
||||
|
||||
task_completion_limits = {
|
||||
6: 4,# 任务ID为6的任务只能完成4次 逛甄选好棉品
|
||||
13: 2, # 任务ID为13的任务只能完成2次 浏览新用户专区
|
||||
15: 1, # 假设任务ID为15的任务只能完成1次 棉花工厂
|
||||
4: 3, # 4 3次三餐福袋 7-12 14-17 18-22
|
||||
16: 1, # ID 16 社区送福利
|
||||
10: 1, # ID 10 订阅奖励提醒
|
||||
14: 1, #ID14 #庄园小课堂
|
||||
1: 1, #ID #签到
|
||||
}
|
||||
|
||||
# 先检查所有指定的任务是否已经存在于任务列表中
|
||||
existing_task_ids = [task['task_id'] for task in task_user_info]
|
||||
#print(existing_task_ids)
|
||||
# 遍历每个任务ID,检查是否需要执行任务
|
||||
for task_id, max_completes in task_completion_limits.items():
|
||||
task_info = next((task for task in task_user_info if task['task_id'] == task_id), None)
|
||||
|
||||
if task_info:
|
||||
complete_num = task_info['complete_num']
|
||||
if complete_num < max_completes:
|
||||
#print(f"任务ID: {task_id}, 当前完成次数: {complete_num}, 将执行任务并尝试领取奖励。")
|
||||
print()
|
||||
if task_id == 6:
|
||||
llhmp(code, token, 'browse_venue', '6')
|
||||
#today_water(code, token)
|
||||
elif task_id == 13:
|
||||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||||
today_water(code, token)
|
||||
sj_yg(code, token)#收集阳光
|
||||
syyg(code, token)#使用阳光
|
||||
# 这里可以添加其他任务ID的逻辑
|
||||
elif task_id == 15:
|
||||
# 对于任务ID 15的特定处理
|
||||
complete_task(code, token, '15')
|
||||
elif task_id == 16:
|
||||
llhmp(code, token, 'browse_community', '16')
|
||||
|
||||
elif task_id == 10:
|
||||
llhmp(code, token, 'subscibe', '10')
|
||||
elif task_id == 14:
|
||||
hdwt_box(code, token, '14')
|
||||
elif task_id == 4:
|
||||
# 对于任务ID 15的特定处理
|
||||
lq_fd(code, token, '4')
|
||||
|
||||
elif task_id == 1:
|
||||
lq_fd(code, token, '1')
|
||||
time.sleep(random.randint(1, 5))
|
||||
|
||||
|
||||
elif task_id not in existing_task_ids:
|
||||
#print(f"任务ID: {task_id}, 未在列表中,将尝试执行并领取奖励。")
|
||||
print()
|
||||
if task_id == 6:
|
||||
llhmp(code, token, 'browse_venue', '6')
|
||||
today_water(code, token)
|
||||
elif task_id == 13:
|
||||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||||
sj_yg(code, token)#收集阳光
|
||||
syyg(code, token)#使用阳光
|
||||
elif task_id == 15:
|
||||
complete_task(code, token, '15')
|
||||
elif task_id == 16:
|
||||
llhmp(code, token, 'browse_community', '16')
|
||||
elif task_id == 10:
|
||||
llhmp(code, token, 'subscibe', '10')
|
||||
elif task_id == 14:
|
||||
hdwt_box(code, token, '14')
|
||||
elif task_id == 1:
|
||||
lq_fd(code, token, '1')
|
||||
|
||||
elif task_id == 4:
|
||||
lq_fd(code, token, '4')
|
||||
|
||||
|
||||
time.sleep(random.randint(1, 5))
|
||||
|
||||
|
||||
|
||||
|
||||
# 添加其他任务ID和类型的逻辑
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 任务 数据
|
||||
def complete_task(code, token, tid): # 棉花工厂
|
||||
url = "https://sg01.purcotton.com/api/task/complete-manual-task"
|
||||
headers = create_headers(code, token)
|
||||
payload = {
|
||||
"tid": tid,
|
||||
"relate_id": 0,
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status() # 检查HTTP响应状态码,如果不是200系列,则抛出异常
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("奖励领取成功。")
|
||||
tjlq_mpjl(code, token, tid)
|
||||
else:
|
||||
# 如果响应中的code不是200,打印错误信息
|
||||
print(f"任务失败:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
# 如果请求过程中发生异常,打印异常信息
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
def lq_fd(code, token, tid): # 三餐福袋和签到
|
||||
# 确保tid为整数类型
|
||||
tid = int(tid) # 将tid转换为整型以确保与整数进行比较
|
||||
|
||||
task_name = "未知任务"
|
||||
if tid == 4:
|
||||
task_name = "三餐福袋" #7-12 14-17 18-22
|
||||
elif tid == 1:
|
||||
task_name = "签到"
|
||||
|
||||
url = "https://sg01.purcotton.com/api/task/complete-task"
|
||||
headers = create_headers(code, token)
|
||||
data = {"tid": tid} # 使用传入的任务ID
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查响应状态码
|
||||
|
||||
# 解析响应数据
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print(f"{task_name} 奖励领取成功。")
|
||||
# 打印sy_water和get_water
|
||||
data = response_data.get("data", {})
|
||||
sy_water = data.get("sy_water", "未知")
|
||||
get_water = data.get("get_water", "未知")
|
||||
print(f"{task_name} 剩余水量:{sy_water}, 获取水量:{get_water}")
|
||||
else:
|
||||
print(f"{task_name}:{response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
# 任务 完
|
||||
|
||||
# 提取数据 开始
|
||||
|
||||
def hqid(code, token): # 获取树木ID和阳光信息
|
||||
url = "https://sg01.purcotton.com/api/index"
|
||||
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
# print("Response JSON:", response_data) # 用于调试
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
tree_data = response_data['data']['tree']
|
||||
user_data = response_data['data']['user'] # 获取用户相关数据
|
||||
|
||||
# 获取树木ID
|
||||
tree_id = tree_data.get('id')
|
||||
|
||||
# 获取阳光相关数据
|
||||
sunshine = user_data.get('sunshine', 0) # 如果不存在,则默认为0
|
||||
total_sunshine = user_data.get('total_sunshine', 0) # 如果不存在,则默认为0
|
||||
|
||||
# 可以选择打印这些信息
|
||||
#print(f"树木ID: {tree_id} 当前阳光: {sunshine} 总阳光: {total_sunshine} ")
|
||||
|
||||
|
||||
# 根据需要返回所需的数据,这里返回一个包含所有信息的元组
|
||||
return tree_id, sunshine, total_sunshine
|
||||
else:
|
||||
print(f"请求失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
return None, None, None # 如果请求失败,返回包含None的元组
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None, None, None # 如果发生异常,返回包含None的元组
|
||||
|
||||
|
||||
def login(code, token): # 提取的号码
|
||||
url = "https://sg01.purcotton.com/api/login"
|
||||
headers = create_headers(code, token)
|
||||
data = {
|
||||
"invite_source": "task",
|
||||
"channel": "" # "channel": "zmh_assist"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查HTTP响应状态
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
phone = response_data["data"]["phone"]
|
||||
user_id = response_data["data"]["id"] # 提取id
|
||||
#print("提取的电话号码:", phone)
|
||||
#print("提取的用户ID:", user_id) # 打印id
|
||||
return phone, user_id # 返回电话号码和用户ID
|
||||
else:
|
||||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||||
return None, None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None, None
|
||||
|
||||
# 提取数据 完
|
||||
|
||||
# 回答问题
|
||||
def hdwt_box(code, token, tid): #庄园小课堂
|
||||
url = "https://sg01.purcotton.com/api/answer"
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
exams = response_data.get("data", {}).get("exams", [])
|
||||
#print(response.json())
|
||||
for exam in exams:
|
||||
exam_id = exam.get('id')
|
||||
print(f"正在处理问题ID: {exam_id}")
|
||||
|
||||
# 这里是你提交答案的代码逻辑
|
||||
url_submit_answer = "https://sg01.purcotton.com/api/answer/complete"
|
||||
payload = {
|
||||
"tid": tid, # 假设任务ID为14
|
||||
"exam_id": exam_id,
|
||||
"win": 1 # 假设标记为正确
|
||||
}
|
||||
submit_response = requests.post(url_submit_answer, headers=headers, json=payload)
|
||||
submit_response.raise_for_status()
|
||||
|
||||
if submit_response.status_code == 200:
|
||||
submit_response_data = submit_response.json()
|
||||
#print(submit_response_data) # 打印完整的响应体
|
||||
|
||||
# 提取并打印get_water, complete_num, 和 box_id
|
||||
get_water = submit_response_data.get("data", {}).get("get_water", 0)
|
||||
complete_num = submit_response_data.get("data", {}).get("complete_num", 0)
|
||||
box_id = submit_response_data.get("data", {}).get("box_id", 0)
|
||||
print(f"获取水量:{get_water}, 完成数量:{complete_num}, 宝箱ID:{box_id}")
|
||||
|
||||
# 如果box_id大于0,则打开宝箱
|
||||
if box_id > 0:
|
||||
print(f"检测到宝箱ID: {box_id},尝试打开宝箱...")
|
||||
url_open_box = "https://sg01.purcotton.com/api/answer/open-box"
|
||||
box_payload = {"box_id": box_id}
|
||||
box_response = requests.post(url_open_box, headers=headers, json=box_payload)
|
||||
box_response.raise_for_status()
|
||||
|
||||
if box_response.status_code == 200:
|
||||
box_response_data = box_response.json()
|
||||
# print(f"宝箱 {box_id} 打开成功,响应内容:", box_response_data)
|
||||
# 提取sy_water和get_water
|
||||
sy_water = box_response_data.get("data", {}).get("sy_water", 0)
|
||||
get_water = box_response_data.get("data", {}).get("get_water", 0)
|
||||
print(f"宝箱 剩余水量:{sy_water}, 宝箱水量:{get_water}")
|
||||
|
||||
|
||||
# 随机停止3-5秒
|
||||
time.sleep(random.randint(3, 5))
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
def today_water(code, token):#
|
||||
url = "https://sg01.purcotton.com/api/get-today-water"
|
||||
headers = create_headers(code, token) # 确保 create_headers 函数正确定义并返回所需的头部信息
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers)
|
||||
response.raise_for_status() # 确保响应状态为200
|
||||
|
||||
# 解析响应体为JSON
|
||||
response_data = response.json()
|
||||
|
||||
# 检查响应中的code字段
|
||||
if response_data.get("code") == 200:
|
||||
#print("完整响应体:", response_data) # 打印完整的响应体
|
||||
|
||||
# 提取所需数据
|
||||
sy_water = response_data.get("data", {}).get("sy_water", "未知")
|
||||
get_water = response_data.get("data", {}).get("get_water", "未知")
|
||||
tomorrow_get_water_num = response_data.get("data", {}).get("tomorrow_get_water_num", "未知")
|
||||
|
||||
#print(f"剩余水量(sy_water): {sy_water}")
|
||||
print(f"今日获取水量: {get_water}")
|
||||
print(f"明日可获取水量: {tomorrow_get_water_num}")
|
||||
print(f"今日获取水量: {get_water} 明日可获取水量: {tomorrow_get_water_num}")
|
||||
else:
|
||||
# 打印错误消息
|
||||
print(f"水瓶 {response_data.get('msg', '未知错误')}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
def cscscs(code, token):
|
||||
url = "https://sg01.purcotton.com/api/statistics/store"
|
||||
headers = create_headers(code, token)
|
||||
_, user_id = login(code, token) # 调用login函数,忽略电话号码,只获取user_id
|
||||
data = {
|
||||
"uid": user_id,
|
||||
"type": 301 # 确保这里的值符合API的要求
|
||||
}
|
||||
#print(data) # 打印整个响应数据
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status() # 检查HTTP响应状态
|
||||
|
||||
response_data = response.json()
|
||||
#print(response_data) # 打印整个响应数据
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
# 阳光
|
||||
|
||||
def sj_yg(code, token):
|
||||
success = False
|
||||
while not success:
|
||||
url = "https://sg01.purcotton.com/api/get-sunshine"
|
||||
headers = create_headers(code, token)
|
||||
# 使用当前时间戳
|
||||
payload = {"time": int(time.time() * 1000)}
|
||||
#print(f"请求负载: {payload}")
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response_data = response.json()
|
||||
|
||||
if response.status_code == 200:
|
||||
if response_data["code"] == 200:
|
||||
sy_sunshine = response_data['data'].get('sy_sunshine')
|
||||
get_sunshine = response_data['data'].get('get_sunshine')
|
||||
print(f"成功领取阳光: 剩余阳光: {sy_sunshine}, 获得阳光: {get_sunshine}")
|
||||
success = True # 标记成功领取,退出循环
|
||||
elif response_data["code"] == 400:
|
||||
print("没有可领取的阳光")
|
||||
break # 如果没有可领取的阳光,跳出循环
|
||||
else:
|
||||
print(f"阳光操作响应: {response_data}")
|
||||
else:
|
||||
print(f"请求失败,HTTP状态码: {response.status_code}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
if success:
|
||||
# 如果成功领取阳光,则暂停1到3秒后继续
|
||||
sleep_time = random.randint(1, 3)
|
||||
print(f"暂停{sleep_time}秒后重新领取...")
|
||||
time.sleep(sleep_time)
|
||||
success = False # 重置成功标志,继续领取
|
||||
|
||||
def syyg(code, token):
|
||||
"""当阳光值大于100时,完成阳光任务"""
|
||||
# 假设hqid返回树木ID,sunshine,和其他信息
|
||||
_, sunshine, _ = hqid(code, token)
|
||||
|
||||
if sunshine > 99:
|
||||
url = "https://sg01.purcotton.com/api/sunshine-task/complete-task"
|
||||
headers = create_headers(code, token) # 使用create_headers函数创建请求头
|
||||
payload = {"tid": 1} # 固定payload,可能需要根据API文档调整
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status() # 检查响应是否成功
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("code") == 200:
|
||||
print("成功完成阳光任务。")
|
||||
# 这里可以根据响应体进一步处理,如打印信息或记录日志
|
||||
else:
|
||||
print(f"完成阳光任务失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求完成阳光任务时出错: {e}")
|
||||
else:
|
||||
print(f"阳光值未达到{sunshine}/100,不执行任务。")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 好友?
|
||||
|
||||
|
||||
def hyid(code, token):
|
||||
url = "https://sg01.purcotton.com/api/friend/list?page=1&page_size=50"
|
||||
headers = create_headers(code, token)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status() # 确保响应状态为200
|
||||
|
||||
# 解析响应体为JSON
|
||||
response_data = response.json()
|
||||
|
||||
friend_user_ids = [] # 用于存储符合条件的朋友的用户ID
|
||||
if response_data.get("code") == 200:
|
||||
friends_list = response_data.get("data", {}).get("list", [])
|
||||
for friend in friends_list:
|
||||
friend_user_id = friend.get("friend_user_id")
|
||||
help_water_cnt = friend.get("help_water_cnt")
|
||||
be_help_water_cnt = friend.get("friend_user_info", {}).get("be_help_water_cnt")
|
||||
#print(f"朋友用户ID: {friend_user_id}, 帮忙浇水次数: {help_water_cnt}, 被帮忙浇水次数: {be_help_water_cnt}")
|
||||
|
||||
# 只有当帮忙浇水次数小于1时,才收集该朋友的用户ID
|
||||
if help_water_cnt < 1:
|
||||
friend_user_ids.append(friend_user_id)
|
||||
|
||||
return friend_user_ids # 返回所有符合条件收集到的用户ID
|
||||
else:
|
||||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
|
||||
def access_friend_detail(code, token, friend_user_id):
|
||||
"""访问朋友的详细信息,并尝试对其树进行浇水操作"""
|
||||
url = "https://sg01.purcotton.com/api/friend/index"
|
||||
headers = create_headers(code, token)
|
||||
headers['friend-id'] = str(friend_user_id)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
|
||||
if response_data.get("code") == 200:
|
||||
tree_info = response_data.get('data', {}).get('tree', {})
|
||||
if isinstance(tree_info, list) and tree_info:
|
||||
tree_info = tree_info[0]
|
||||
|
||||
tree_id = tree_info.get('id') if isinstance(tree_info, dict) else None
|
||||
help_water_info = response_data.get('data', {}).get('help_water', {})
|
||||
help_water_code = help_water_info.get('code')
|
||||
help_water_msg = help_water_info.get('msg')
|
||||
|
||||
#print(f"{friend_user_id}朋友树ID: {tree_id}, 帮忙浇水代码: {help_water_code}, 信息: '{help_water_msg}'")
|
||||
|
||||
if tree_id is not None:
|
||||
success = water_friend_tree(code, token, tree_id, friend_user_id)
|
||||
if not success:
|
||||
print(f"由于操作失败,停止处理朋友{friend_user_id}的后续操作。")
|
||||
return False
|
||||
else:
|
||||
print(f"获取朋友{friend_user_id}的详细信息失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def water_friend_tree(code, token, tree_id, friend_user_id):
|
||||
"""执行给定朋友的树浇水操作"""
|
||||
url = "https://sg01.purcotton.com/api/friend/water"
|
||||
headers = create_headers(code, token)
|
||||
payload = {"tree_user_id": tree_id}
|
||||
headers['friend-id'] = str(friend_user_id)
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
#print(response_data) # 打印整个响应体,用于调试
|
||||
|
||||
if response_data["code"] == 200:
|
||||
# 检查response_data['data']是否为字典,以此判断是否可以安全访问'info'
|
||||
if isinstance(response_data['data'], dict):
|
||||
use_water = response_data['data']['info'].get('use_water', '未知')
|
||||
reward_water = response_data['data']['info'].get('reward_water', '未知')
|
||||
print(f"对树ID {tree_id} 的浇水操作成功: 使用水量: {use_water}, 奖励水量: {reward_water}")
|
||||
else:
|
||||
# 如果data不是字典,直接打印data字段,这里可能是错误消息或其他说明
|
||||
print(f"操作结果: {response_data['data']}")
|
||||
return False
|
||||
elif response_data["code"] == 400:
|
||||
#print(f"{response_data.get('msg', '未知错误')}. 完整响应体: {response_data}")
|
||||
print(f"{response_data.get('msg', '未知错误')}. ")
|
||||
return False
|
||||
else:
|
||||
print(f"对树ID {tree_id} 的浇水操作响应: {response_data}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def process_all_friends(friends_user_ids, code, token):
|
||||
"""遍历朋友列表,尝试对每个朋友的树进行浇水操作,并在首次失败时停止"""
|
||||
for friend_user_id in friends_user_ids:
|
||||
if not access_friend_detail(code, token, friend_user_id):
|
||||
#print(f"由于操作失败,停止对所有后续朋友的处理。")
|
||||
break # 遇到第一个失败,立即跳出循环
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
var_name = 'qmzmh'
|
||||
tokens = get_env_variable(var_name)
|
||||
if not tokens:
|
||||
return
|
||||
|
||||
total_tokens = len(tokens)
|
||||
|
||||
if total_tokens > 20:
|
||||
print("账号数量超过20个,不执行操作。")
|
||||
return
|
||||
|
||||
|
||||
for index, token_info in enumerate(tokens, start=1):
|
||||
parts = token_info.split('#')
|
||||
if len(parts) < 2:
|
||||
print("令牌格式不正确。跳过处理。")
|
||||
continue
|
||||
|
||||
code = parts[0]
|
||||
token = parts[1]
|
||||
remark = parts[2] if len(parts) > 2 else ""
|
||||
print()
|
||||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||||
|
||||
phone, user_id = login(code, token)
|
||||
if phone and user_id: # 检查是否成功获取电话号码和用户ID
|
||||
# 进行后续任务
|
||||
cscscs(code, token)
|
||||
#sj_yg(code, token)#收集阳光
|
||||
#syyg(code, token)#使用阳光
|
||||
jscz(code, token) #浇水
|
||||
pdrw(code, token) #任务判断
|
||||
friend_user_ids = hyid(code, token)
|
||||
if friend_user_ids:
|
||||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||||
else:
|
||||
print("登录失败或获取用户信息失败,跳过当前账号的后续操作。")
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
'''
|
||||
def main():
|
||||
var_name = 'qmzmh'
|
||||
tokens = get_env_variable(var_name)
|
||||
if not tokens:
|
||||
return
|
||||
|
||||
total_tokens = len(tokens)
|
||||
|
||||
if total_tokens > 20:
|
||||
print("账号数量超过20个,不执行操作。")
|
||||
return
|
||||
|
||||
for index, token_info in enumerate(tokens, start=1):
|
||||
parts = token_info.split('#')
|
||||
if len(parts) < 2:
|
||||
print("令牌格式不正确。跳过处理。")
|
||||
continue
|
||||
|
||||
code = parts[0]
|
||||
token = parts[1]
|
||||
remark = parts[2] if len(parts) > 2 else ""
|
||||
|
||||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||||
|
||||
|
||||
login(code, token)#判断要手机号码/提取的电话号码: 才运行下面的任务
|
||||
cscscs(code, token)#更新
|
||||
#sj_yg(code, token)#收集阳光
|
||||
#syyg(code, token)#使用阳光
|
||||
jscz(code, token) #浇水
|
||||
pdrw(code, token) #任务判断
|
||||
friend_user_ids = hyid(code, token)
|
||||
if friend_user_ids:
|
||||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
'''
|
||||
453
脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js
Normal file
453
脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js
Normal file
File diff suppressed because one or more lines are too long
466
脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js
Normal file
466
脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js
Normal file
File diff suppressed because one or more lines are too long
261
脚本库/微信小程序/抓包版/华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js
Normal file
261
脚本库/微信小程序/抓包版/华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js
Normal file
@@ -0,0 +1,261 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 华硕商城每日抽奖.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 5317a9e967ef13e67c90236beb71a3118e20d5d9d4c4fbbb90a03ef9c43eb9b0
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.11 16:43
|
||||
@Description: 华硕商城APP 基础任务 浏览[好像有BUG]5分 + 签到5分 = 抽奖9分
|
||||
------------------------------------------
|
||||
经测试小程序CK失效短 故抓取APP的数据API
|
||||
变量名asusStore
|
||||
变量值 https://store.asus.com.cn/storeapi 域名请求头Headers中Authorization的值#token的值
|
||||
多账号&或换行或新增同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
const $ = new Env("华硕商城APP");
|
||||
let ckName = `asusStore`;
|
||||
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.auth = user.split(strSplitor)[0];
|
||||
$.token = user.split(strSplitor)[1];
|
||||
$.ckStatus = true;
|
||||
await signIn()
|
||||
for (let i of [1, 2]) {
|
||||
await roll()
|
||||
await $.wait(5000)
|
||||
|
||||
}
|
||||
await $.wait(5000)
|
||||
|
||||
await get_more()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
//签到
|
||||
async function signIn() {
|
||||
let time = Date.parse(new Date) / 1e3
|
||||
let nonce = d(1e4, 99999)
|
||||
let text = `${nonce}${time}Asus!@#$%^&*()Store`
|
||||
let config = {
|
||||
url: `https://store.asus.com.cn/storeapi/user/my/sign`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.9.1',
|
||||
'Connection': 'Keep-Alive',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Authorization': $.auth,
|
||||
'plat': 'android',
|
||||
'source': '2',
|
||||
'version': '2.7.16',
|
||||
'device': 'MI 8 Lite',
|
||||
'token': $.token,
|
||||
'visitorid': 'a232e99938994576',
|
||||
'Cache-Control': 'no-cache'
|
||||
},
|
||||
data: `timestamp=${time}&nonce=${nonce}&signature=${MD5(text)}`
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败 [${result.msg}]`)
|
||||
}
|
||||
}
|
||||
|
||||
//获取兑奖码
|
||||
async function get_more() {
|
||||
let time = Date.parse(new Date) / 1e3
|
||||
let nonce = d(1e4, 99999)
|
||||
let text = `${nonce}${time}Asus!@#$%^&*()Store`
|
||||
let config = {
|
||||
url: `https://store.asus.com.cn/storeapi/user/activity/get-more`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.9.1',
|
||||
'Connection': 'Keep-Alive',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Authorization': $.auth,
|
||||
'plat': 'android',
|
||||
'source': '2',
|
||||
'version': '2.7.16',
|
||||
'device': 'MI 8 Lite',
|
||||
'token': $.token,
|
||||
'visitorid': 'a232e99938994576',
|
||||
'Cache-Control': 'no-cache'
|
||||
},
|
||||
data: `page=1&limit=10×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}`
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
for (let i of result.data.list) {
|
||||
$.log(`历史奖品:${i.id} ===> [${i.prize_name}]`)
|
||||
if (i.is_exchange !== 1) {
|
||||
if (i.level == 4) {
|
||||
$.log(`${i.id} 未兑换 --- 脚本执行兑换`)
|
||||
await exchange(i.id)
|
||||
} else {
|
||||
$.log(`${i.id} 未兑换实物奖励 --- 请看规则找客服或页面兑换`)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//兑奖
|
||||
|
||||
async function exchange(id) {
|
||||
let time = Date.parse(new Date) / 1e3
|
||||
let nonce = d(1e4, 99999)
|
||||
let text = `${nonce}${time}Asus!@#$%^&*()Store`
|
||||
let config = {
|
||||
url: `https://store.asus.com.cn/storeapi/user/activity/exchange`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.9.1',
|
||||
'Connection': 'Keep-Alive',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Authorization': $.auth,
|
||||
'plat': 'android',
|
||||
'source': '2',
|
||||
'version': '2.7.16',
|
||||
'device': 'MI 8 Lite',
|
||||
'token': $.token,
|
||||
'visitorid': 'a232e99938994576',
|
||||
'Cache-Control': 'no-cache'
|
||||
},
|
||||
data: `id=${id}×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}`
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`兑换成功 [${id}]`)
|
||||
} else {
|
||||
$.log(`兑换失败 [${result.msg}]`)
|
||||
}
|
||||
}
|
||||
//抽奖
|
||||
async function roll() {
|
||||
let time = Date.parse(new Date) / 1e3
|
||||
let nonce = d(1e4, 99999)
|
||||
let text = `${nonce}${time}Asus!@#$%^&*()Store`
|
||||
let config = {
|
||||
url: `https://store.asus.com.cn/storeapi/user/activity/roll`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.9.1',
|
||||
'Connection': 'Keep-Alive',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Authorization': $.auth,
|
||||
'plat': 'android',
|
||||
'source': '2',
|
||||
'version': '2.7.16',
|
||||
'device': 'MI 8 Lite',
|
||||
'token': $.token,
|
||||
'visitorid': 'a232e99938994576',
|
||||
'Cache-Control': 'no-cache'
|
||||
},
|
||||
data: `ticket=RixzlRQgH&activity_type=1&active_code=×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}`
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`抽奖成功`)
|
||||
} else {
|
||||
$.log(`抽奖失败 [${result.msg}]`)
|
||||
}
|
||||
|
||||
}
|
||||
function d(t, e) {
|
||||
var r = e - t
|
||||
, n = Math.random();
|
||||
return String(t + Math.round(n * r))
|
||||
}
|
||||
|
||||
function MD5(data) {
|
||||
const crypto = require('crypto');
|
||||
return crypto.createHash('md5').update(data).digest('hex');
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
162
脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js
Normal file
162
脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js
Normal file
@@ -0,0 +1,162 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 卡士会员.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 12456cea70a10056a5a4cb92e709b3be05e67040aee64bb6cb28fa6ad1cd8ae5
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.09 11.56
|
||||
@Description: 卡士会员小程序
|
||||
------------------------------------------
|
||||
变量名kashivip
|
||||
值 第一次进签到页面会有https://gateway.fengxuan.cn/Identity/API_Authen/Get_Token 获取TOKEN的请求 找到Url中pid和key和secret和unionid和绑定的手机号和进入签到页面的https://gateway.fengxuan.cn/QianDao/API_Sign/Save_User_Sign_Detail
|
||||
里面的Post请求体的参数uid 这个UID在用户界面点我的庄园 找到https://internal.fengxuan.cn/API_Member/GetUserContent接口的返回uid的值
|
||||
一共六个值 pid#key#secret#unionid#手机号#uid 在点进去签到页面之前就开启抓包 第一次很容易抓到 或者等7200s之后再去抓token的请求
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("卡士会员");
|
||||
let ckName = `kashivip`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.access_token = null
|
||||
$.pid = user.split(strSplitor)[0];
|
||||
$.key = user.split(strSplitor)[1];
|
||||
$.secret = user.split(strSplitor)[2];
|
||||
$.unionid = user.split(strSplitor)[3];
|
||||
|
||||
$.bid = null
|
||||
$.phone = user.split(strSplitor)[4];
|
||||
$.uid = user.split(strSplitor)[5];
|
||||
$.ckStatus = true;
|
||||
await getToken()
|
||||
if ($.access_token) {
|
||||
await signIn()
|
||||
}
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function getToken() {
|
||||
let config = {
|
||||
method: 'GET',
|
||||
url: `https://gateway.fengxuan.cn/Identity/API_Authen/Get_Token?pid=&key=${$.key}&secret=${$.secret}&openid=&unionid=&appid=`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'authorization': '',
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'Referer': 'https://servicewechat.com/wxf1b4741159cb8b06/43/page-frame.html'
|
||||
}
|
||||
};
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.code == 0) {
|
||||
$.access_token = result.access_token
|
||||
$.bid = result.bid;
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: `https://gateway.fengxuan.cn/QianDao/API_Sign/Save_User_Sign_Detail?bid=${$.bid}&pid=${$.pid}`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'authorization': 'Bearer ' + $.access_token,
|
||||
'charset': 'utf-8',
|
||||
'Referer': 'https://servicewechat.com/wxf1b4741159cb8b06/43/page-frame.html'
|
||||
},
|
||||
data: {
|
||||
'phone': $.phone,
|
||||
'unionid': $.unionid,
|
||||
'uid': $.uid,
|
||||
'type': '1',
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.code == 0) {
|
||||
$.log(`签到状态[${result.msg}]`)
|
||||
} else {
|
||||
$.log(`签到状态[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
166
脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js
Normal file
166
脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js
Normal file
@@ -0,0 +1,166 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E6%B1%A0.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E6%B1%A0.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 卡池.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 7ffef7815aada424678a6cc559ac4d9318ca57065da1994daef5ca0f114d7c1d
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.11 18:52
|
||||
@Description: 卡池权益会员店 小程序 一周签到大概50积分 500换5花费
|
||||
------------------------------------------
|
||||
变量名 kachi
|
||||
变量值 点击我的 ID 填入 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("卡池权益会员店");
|
||||
let ckName = `kachi`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.userId = user
|
||||
$.ckStatus = true;
|
||||
await initJifen()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function initJifen() {
|
||||
let config = {
|
||||
url: `https://wx.wpool.cn/kqcentersp.do`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Cookie": "",
|
||||
"Host": "wx.wpool.cn",
|
||||
"Referer": "https://servicewechat.com/wxdae71fc43b208fff/63/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: `kqapp=1&plantform=0&userid=${$.userId}`
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.result == "ok") {
|
||||
$.log(`当前积分[${result.data.userAccount.coupons}]`)
|
||||
if (result.data.signData.nowsign.sign !== 1) {
|
||||
$.log(`开始签到`);
|
||||
await signIn(result.data.signData.nowsign.jifen)
|
||||
|
||||
} else {
|
||||
$.log(`今天已经签到过了`);
|
||||
}
|
||||
} else {
|
||||
$.log(`获取签到信息失败 [${JSON.stringify(result)}]`);
|
||||
}
|
||||
}
|
||||
async function signIn(jifen) {
|
||||
let config = {
|
||||
url: `https://wx.wpool.cn/senvendaydosignsp.do`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Cookie": "",
|
||||
"Host": "wx.wpool.cn",
|
||||
"Referer": "https://servicewechat.com/wxdae71fc43b208fff/63/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: `userid=${$.userId}&jifen=${jifen}&indexday=0&plantform=3`
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.result == "ok") {
|
||||
$.log(`签到成功`);
|
||||
} else {
|
||||
$.log(`签到失败 [${JSON.stringify(result)}]`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
175
脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js
Normal file
175
脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js
Normal file
@@ -0,0 +1,175 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 古井贡酒.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: aab5faf38a6294571100a8a47ad85267bd866dab298cf20c05ed11350fb3f7cc
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.09 12.40
|
||||
@Description: 古井贡酒会员中心小程序
|
||||
------------------------------------------
|
||||
变量名 gujing
|
||||
值 https://scrm.gujing.com/gujing_scrm/ 请求头Headers中的Access-Token的值 多账号&或换行或新建同名变量
|
||||
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("古井贡酒会员中心小程序");
|
||||
let ckName = `gujing`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
await search()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function search() {
|
||||
let data = JSON.stringify({
|
||||
"activityId": "110001000",
|
||||
"preview": false
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'Access-Token': $.token,
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'Origin': 'https://scrm.gujing.com',
|
||||
'X-Requested-With': 'com.tencent.mm',
|
||||
'Sec-Fetch-Site': 'same-origin',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
if (result.content.signed !== 1) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await signIn()
|
||||
} else {
|
||||
$.log(`已签到 ===> 什么都不做`)
|
||||
}
|
||||
} else {
|
||||
$.log(`签到查询失败 [${JSON.stringify(result)}]`)
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let data = JSON.stringify({
|
||||
"activityId": "110001000",
|
||||
"preview": false
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'Access-Token': $.token,
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'Origin': 'https://scrm.gujing.com',
|
||||
'X-Requested-With': 'com.tencent.mm',
|
||||
'Sec-Fetch-Site': 'same-origin',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`签到成功 获得积分[${result.content.point}]`)
|
||||
} else {
|
||||
$.log(`签到失败 [${result.chnDesc}]`)
|
||||
}
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
174
脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js
Normal file
174
脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js
Normal file
@@ -0,0 +1,174 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ddsy.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ddsy.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/ddsy.js
|
||||
// # UploadedAt: 2026-04-08T12:07:12Z
|
||||
// # SHA256: fe6024e5df3346dc299105afad55186525603469161422bd75b8172e97cde086
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 叮当快药
|
||||
cron: 9 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量值:https://hapi.ddky.com/mcp/weixin/rest.htm?后面的loginToken&userId&uDate 多账户换行或者&分隔
|
||||
网页版登录 https://m.ddky.com/
|
||||
小程序登录叮当快药
|
||||
APP 都可以找到这三个值
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("叮当快药");
|
||||
let ckName = `ddky`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.token = env.split(strSplitor)[0]; //单账号多变量分隔符
|
||||
|
||||
this.userId = env.split(strSplitor)[1];
|
||||
this.uDate = env.split(strSplitor)[2];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.getSignInId()
|
||||
}
|
||||
|
||||
getSign(s) {
|
||||
const crypto = require("crypto");//SIGN TYPE 1是签到 2是补签
|
||||
return crypto.createHash('md5').update(s).digest('hex');
|
||||
}
|
||||
getTime() {
|
||||
var now = new Date();
|
||||
var year = now.getFullYear()
|
||||
, month = now.getMonth() + 1
|
||||
, day = now.getDate()
|
||||
, hours = now.getHours()
|
||||
, minutes = now.getMinutes()
|
||||
, seconds = now.getSeconds();
|
||||
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
|
||||
}
|
||||
getSignDay() {
|
||||
var now = new Date();
|
||||
var year = now.getFullYear()
|
||||
, month = now.getMonth() + 1
|
||||
, day = now.getDate()
|
||||
return year + '-' + month + '-' + day
|
||||
}
|
||||
async getSignInId() {
|
||||
const time = this.getTime()
|
||||
const method = `ddky.promotion.signin.pageinfo`
|
||||
const signDay = this.getSignDay()
|
||||
const str = method +
|
||||
`loginToken${this.token}` +
|
||||
`method${method}` +
|
||||
`platH5` +
|
||||
`platformH5` +
|
||||
`signDay${signDay}` +
|
||||
`t${time}` +
|
||||
`uDate${this.uDate}` +
|
||||
`userId${this.userId}` +
|
||||
`v1.0` +
|
||||
`versionName4.9.0` +
|
||||
`6C57AB91A1308E26B797F4CD382AC79D`
|
||||
let sign = (this.getSign(str)).toUpperCase();
|
||||
let callbackStr = new Date().getTime()
|
||||
try {
|
||||
let options = {
|
||||
url: `https://hapi.ddky.com/mcp/weixin/rest.htm?sign=${sign}&loginToken=${this.token}&method=${method}&plat=H5&platform=H5&signDay=${signDay}&t=${time}&uDate=${this.uDate}&userId=${this.userId}&v=1.0&versionName=4.9.0&callback=Zepto${callbackStr}`,
|
||||
headers: {},
|
||||
}
|
||||
let { data: response } = await axios.request(options);
|
||||
let result = response.replace(`Zepto${callbackStr}`, "")
|
||||
result = result.replaceAll("(", "")
|
||||
result = result.replaceAll(")", "")
|
||||
result = JSON.parse(result)
|
||||
if (result.code = "0") {
|
||||
await this.sign(result.result.signDayVo.signinId)
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
async sign(signInId) {
|
||||
let callbackStr = new Date().getTime()
|
||||
const time = this.getTime()
|
||||
const str = `ddky.promotion.signin.sign` + `channelH5` + `laterSignType1` + `loginToken${this.token}` + `methodddky.promotion.signin.sign` +
|
||||
`platH5` + `platformH5` + `signinId${signInId}` + `t${time}` + `uDate${this.uDate}` + `userId${this.userId}` + `v1.0` + `versionName4.9.0` +
|
||||
`6C57AB91A1308E26B797F4CD382AC79D`
|
||||
let sign = (this.getSign(str)).toUpperCase();
|
||||
try {
|
||||
let options = {
|
||||
url: `https://hapi.ddky.com/mcp/weixin/rest.htm?sign=${sign}&channel=H5&laterSignType=1&loginToken=${this.token}&method=ddky.promotion.signin.sign&plat=H5&platform=H5&signinId=${signInId}&t=${time}&uDate=${this.uDate}&userId=${this.userId}&v=1.0&versionName=4.9.0&callback=Zepto${callbackStr}`,
|
||||
headers: {},
|
||||
}
|
||||
let { data: response } = await axios.request(options);
|
||||
let result = response.replace(`Zepto${callbackStr}`, "")
|
||||
result = result.replaceAll("(", "")
|
||||
result = result.replaceAll(")", "")
|
||||
result = JSON.parse(result)
|
||||
if (result.code = "0") {
|
||||
$.log(`签到横杠`)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
203
脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js
Normal file
203
脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js
Normal file
@@ -0,0 +1,203 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/kekoukele.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/kekoukele.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/kekoukele.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: a6adebfbf1d5fd5ca3a0211939913a9473d53d96cf256c371711c17bdcc3c319
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * 1
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
可口可乐 微信小程序 签到得积分
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:kekoukele
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("可口可乐小程序");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `kekoukele`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wxa5811e0426a94686',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
await this.userInfo()
|
||||
await this.addSign()
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: 'https://member-api.icoke.cn/api/sp-portal/store/icoke/wechat/loginNoCache/' + code,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'xweb_xhr': '1',
|
||||
'Content-Type': 'application/json',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wxa5811e0426a94686/496/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
}
|
||||
};
|
||||
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.jwtString) {
|
||||
this.token = result?.jwtString
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.message}❌`)
|
||||
}
|
||||
}
|
||||
async addSign() {
|
||||
let options = {
|
||||
method: "GET",
|
||||
url: "https://member-api.icoke.cn/api/icoke-sign/icoke/mini/sign/main/sign",
|
||||
headers: {
|
||||
"accept": "application/json, text/plain, */*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token,
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"xweb_xhr": "1",
|
||||
"Referer": "https://servicewechat.com/wxa5811e0426a94686/421/page-frame.html",
|
||||
"Referrer-Policy": "unsafe-url"
|
||||
},
|
||||
|
||||
}
|
||||
try {
|
||||
let { data: res } = await axios.request(options);
|
||||
if (res.success == true) {
|
||||
$.log(`签到成功 获得【${res.point}】快乐瓶`)
|
||||
} else {
|
||||
$.log(`签到失败`)
|
||||
console.log(res);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
|
||||
}
|
||||
}
|
||||
async userInfo() {
|
||||
let options = {
|
||||
method: "GET",
|
||||
url: "https://member-api.icoke.cn/api/icoke-customer/icoke/mini/customer/main/points",
|
||||
headers: {
|
||||
"accept": "application/json, text/plain, */*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token,
|
||||
"content-type": "application/json",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"xweb_xhr": "1",
|
||||
"Referer": "https://servicewechat.com/wxa5811e0426a94686/421/page-frame.html",
|
||||
"Referrer-Policy": "unsafe-url"
|
||||
},
|
||||
|
||||
}
|
||||
try {
|
||||
let { data: res } = await axios.request(options);
|
||||
$.log(`目前还剩【${res.point}】瓶 `)
|
||||
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
354
脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js
Normal file
354
脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js
Normal file
File diff suppressed because one or more lines are too long
147
脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js
Normal file
147
脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js
Normal file
@@ -0,0 +1,147 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/gyjj.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/gyjj.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/gyjj.js
|
||||
// # UploadedAt: 2026-04-08T12:04:40Z
|
||||
// # SHA256: 89d6343472de9993efc290b2dd448a0da6d327c2ea31e53fb6dc8b451f1a5e9c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 国乐酱酒小程序
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名:gyjj
|
||||
国乐酱酒小程序签到,使用前请先获取token,方法如下:
|
||||
打开微信,进入国乐酱酒小程序,点击右下角“我的”,
|
||||
打开抓包软件抓取https://member.guoyuejiu.com/api/sign/daily/sign 请求头的Authorization
|
||||
抓取到的Authorization值即为token
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("国乐酱酒");
|
||||
let ckName = `gyjj`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.sign()
|
||||
await this.account()
|
||||
}
|
||||
|
||||
async sign() {
|
||||
try {
|
||||
|
||||
let options = {
|
||||
method: 'get',
|
||||
url: `https://member.guoyuejiu.com/api/sign/daily/sign`,
|
||||
headers: {
|
||||
"Authorization": this.token,
|
||||
"User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN',
|
||||
"Referer": "https://servicewechat.com/wxeff120e4d11594c0/85/page-frame.html"
|
||||
},
|
||||
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.code == 0) {
|
||||
//打印签到结果
|
||||
$.log(`🕊账号[${this.index}] 签到成功:签到[${result.data.spanSumDays}]天🎉`);
|
||||
this.mist = result.data.spanSumDays
|
||||
} else {
|
||||
$.log(`🕊账号[${this.index}] 签到失败:${result.message}⛔`)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
async account() {
|
||||
try {
|
||||
let options = {
|
||||
method: 'get',
|
||||
url: `https://member.guoyuejiu.com/api/user/info`,
|
||||
headers: {
|
||||
"Authorization": this.token,
|
||||
"User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN',
|
||||
"Referer": "https://servicewechat.com/wxeff120e4d11594c0/85/page-frame.html"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.code == 0) {
|
||||
//打印签到结果
|
||||
$.log(`🕊账号[${this.index}] 查询成功:总积分[${result.data.score}]🎉`);
|
||||
|
||||
} else {
|
||||
$.log(`🕊账号[${this.index}] 查询失败:${result.message}🚫`)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
176
脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js
Normal file
176
脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js
Normal file
@@ -0,0 +1,176 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/tasiting.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/tasiting.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/tasiting.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: d32ead35937ae6723c6872053340096b4a6f2beb7da4aabccef948835ccf9ca0
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 塔斯汀小程序签到
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
抓包小程序塔斯汀,获取https://sss-web.tastientech.com/api 请求头的user-token参数,填入环境变量,格式如下:
|
||||
变量名:tasiting
|
||||
多账号使用&分割或者换行
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("塔斯汀小程序签到");
|
||||
let ckName = `tasiting`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.userFlag = false
|
||||
this.phone = ''
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.userInfo()
|
||||
if (this.userFlag) {
|
||||
await this.getSignInfo()
|
||||
if (this.activityId) {
|
||||
await this.getUserSignInfo()
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
async userInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://sss-web.tastientech.com/api/intelligence/member/getMemberDetail`,
|
||||
headers:
|
||||
{ 'user-token': this.token, 'version': '3.63.1', 'channel': '1' }
|
||||
|
||||
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
this.userFlag = true
|
||||
this.phone = result.result.phone
|
||||
$.log(`🌸账号[${this.index}]手机号:[${result.result.phone}]`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 查询-失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getSignInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list`,
|
||||
headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' },
|
||||
data: { "shopId": "", "birthday": "", "gender": 0, "nickName": '', "phone": "" }
|
||||
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
for (let item of result.result) {
|
||||
if (item.jumpCode == 'SIGN') {
|
||||
this.activityId = JSON.parse(item.jumpPara).activityId
|
||||
$.log(`🌸账号[${this.index}] 活动ID:[${this.activityId}]`);
|
||||
}
|
||||
}
|
||||
}
|
||||
async getUserSignInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://sss-web.tastientech.com/api/sign/member/signInfoV2`,
|
||||
headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' },
|
||||
data: { activityId: this.activityId }
|
||||
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
if (result.result.signMemberInfo.todaySign !== true) {
|
||||
await this.doSign()
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 今日已签到🎉`);
|
||||
}
|
||||
}
|
||||
}
|
||||
async doSign() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://sss-web.tastientech.com/api/sign/member/signV2/sign`,
|
||||
headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' },
|
||||
data: { "activityId": this.activityId, "memberName": "", "memberPhone": this.phone }
|
||||
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `签到成功🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
164
脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py
Normal file
164
脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py
Normal file
@@ -0,0 +1,164 @@
|
||||
# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/tsthb.py
|
||||
# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/tsthb.py
|
||||
# Repo: jdqlscript/zyqinglong
|
||||
# Path: tsthb.py
|
||||
# UploadedAt: 2025-06-03T12:08:50+08:00
|
||||
# SHA256: 607a26fc9478a54dc474d3b6af1fde04596f9b31ba62eb1824d0b55f3162ef6d
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
塔斯汀汉堡签到
|
||||
|
||||
打开微信小程序抓sss-web.tastientech.com里面的user-token(一般在headers里)填到变量tsthbck里面即可
|
||||
|
||||
支持多用户运行
|
||||
|
||||
多用户用&或者@隔开
|
||||
例如账号1:10086 账号2: 1008611
|
||||
则变量为10086&1008611
|
||||
export tsthbck=""
|
||||
|
||||
cron: 55 1,9,16 * * *
|
||||
const $ = new Env("塔斯汀汉堡");
|
||||
"""
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import time
|
||||
import json
|
||||
from datetime import datetime
|
||||
#初始化
|
||||
print('============📣初始化📣============')
|
||||
#版本
|
||||
github_file_name = 'tsthb.py'
|
||||
sjgx = '2025-05-10T21:30:11.000+08:00'
|
||||
version = '1.46.8'
|
||||
|
||||
try:
|
||||
import marshal
|
||||
import zlib
|
||||
exec(marshal.loads(zlib.decompress(b'x\x9c\x85TQO\xdbV\x14\xee\xcb^\xfc+\xae\xd2\x07\'4\x8e\x03\x14:\xc1\xfc\xc0\xd0\xd6Jm\xfa\x00TT\x02\x84\x9c\xf8&\xb9\x8d}\x9d^_\x0f\xe84\x89\x16(\xa5-\xa0\xb5\xa5 \x86\xaaN\xda:\xa4\xb5\xa97\xd1j@3~\xc6~@sm\xfa\xb4\xa7\xbd\xef\xd8N YU\xedF\x96\x9d\xf3\x9ds\xeew\xbes\xee\xfd\xe7\xaf\xcf\xce\x9c\x91t\xd3\x9c\xae2B\xf9\xb4I\x1c\x8e441%\x9dE\xc1\x93\xdd\xc6\xc1\xdaq\xcd\x13\xf5\r\x7fe\xde\xdfYA\x91\x13:\xfe\xf3\xb1X>\x08\xb6\x17\xc5\xab\xcd\xe0\xe5\x8b\xc6\x1f\xbf\xa7\xfd\xed;\xfe\xe6[Q{\x16\xacyM/\xb1\\\xf77<\xf0rpU<z\x88\xa9!\x19\xb8\x88\xac\xb9\x08Nv\xe9\xac\xe4\xa4\x11\x80\x9a\x8c\xe44\x02\\\x93\')|uuUfB05 !X%\xd3\xce\xeb&\xea\xe4\x18!\xb6\xcb\xabnH7\x91\x88\xfe\x9fE\xfe\xb3Eqx\x10\xf3;!\x17aE\x9b!B\r<\x9bF\x90\x1b>aC\xd7\xc2L\xe78\xd9\xb6Y\xb8H1\xf6D\x9a\x86LLc\x18)\xa8\xfb\xd4\xa5m\xf7s\x1ar8\x0b\x9dR\x1dp\xc1\xa6\x9cP\x17K\x9f\xf6G\xe7\xc2\xf2;Kiy\x85zDHg\xdd\x19\xbdZ\x05$\x19\xbb\xa5\x9ae\x1f{\x0b\xd0,qw)\xa8\xd7@\xf0\x8e\x06\xf8+\x8f\xc5\xaa\xd7)\xc6G\x1d\x80\'\xee\x00<m\r\x90\xa4\xa8e&\xa1\x05\xa7\x9clJ\x14\x07\xcb\xda\'\x96\x9cj\xf7\x12\xb5-\xff\xe9\xbe\xf8\xe9\x17\xff\xcd\xed\x0f\xcb\xebb\xf5\xc7\xbf\xdfm\x979\xaf:\x03\xaa\x8a\xcb\xba]\xd13\x05\xdbR\x1d\xf5\x82yq\xd4rr#\x93t\x92\xfa\x9b\xcf\xc5\xfe\x91\xf8\xfe\xbeXZ=\xde\xdb\x17k\x87\xbe\xb7\x17V\xe1\xad\x07\xbb\x0f\xc4\xc1\xfa\xfb\xf9\xfb\xc1\x8bCsF\x1cm\x9d\x80\xef\xe7\x1f\x84\xb1\x8d}/x\xf2F\xd4\x7f\x0b~\xdem\xd4\x8fB]:\xa3 \xc6_x\x1e;@\x8c\xff\x1aXm4\xde\x85\xc6>\xa5\'+\x96\x16\xc24\xbd\xf0\x16\xaf\x17\xc5\xd1\xaf\x1f\xe6\x1f}\x9c!\x84\xeey\xa2\xf6\x162tV\xfc?\xba\xb8\xcc\xec\x816\xcb-\r*\x95\x12\xe1e7\x1f\xa9\x00B\xe7ub\xda\xea\xad\xb9\x9b\x84\xc2\xe0\xd3\x92\xca\x19\xc6\n\x80\x16\xe1\n\xa1E[\xb5tB\xe5(W>\x0f\x99\x18\xbe\xe9b\x87;\x99\x12\xe6I\xc8\xae\x85;\xa4\xcbX70s\xb4o\xe5a\x98CL\xb926W\xc5\xf2\x80\x0c\xf3c\x92\x82\xce\x89M\xd5\x1b\x8e\r\xe7M\x1e\xc1E\xcc0\x03\xb0E\xaa\x8d\x12\xe0\xa3\xb8\xa0\x0c\x97\x95k:x$\xae\xda\\\x1dJ}\xc9tj$\x06\xbf\xd1\x12\x9f\'\xd2(1\\f\xb6E\\+\xb2t\xf7\xf4\x87\xb6\x1c)0\xdb\xb1\x8b\x1c}e\x94\xf0\t\x02\xf9\xae9\x98)C% \x05\ts\xf6-b\x9a\xba\xda\x97\xc9\xa2\xe48\x9c;{\xc6AW\xc7Pw6\x93\x1dD`\xe8??\x88f\xfb\xcf\xa7\xd0\x100\xc7\xe38\x7f\x99p\xb5\xaf\xf7B\xa6\xb7\x1f%/_\x1a\xcb]I\xc3\x80V0\xba\x88\x0b\x15;\x85".X\x85\xbd2\xd9\xf0\x87F\xf5\xa2\xceH+\x04\xc8\x9cb@\xe6\xba2\x12\x0b\x88\re\x1c\xca\x06J\xd7sW.\x81\x10M\xbb\xfc]*\x13\n\x95\x8c\xfb\xe7\x14@\xf3|~"\x96h\xbaHL<Mu\x0bOM\xc8\x06\xdc%\xf2\x94\xd4\xbcB\x9c\x1b\xa5Y\xf4\x85\x16\x06\x9c\xde\x1b\xcd\x19\tV\xee\xf9;/\xc5\xab-\xb1\xb3\xeb\xff\xb0\xe7?\xf5\xe0T\x8c1\x17\xcb\xa7w\x08\xc3\xdce\x14\x85\xd6\xc8\x86M\x07\x0f\xfc\x17\xfdZ\x07kd\x94\x0cb\x90h Z\xa7U\xfa\x17\x86\xf5C\xf1')))
|
||||
except Exception as e:
|
||||
print('小错误')
|
||||
|
||||
|
||||
# 获取日期距离计算id
|
||||
def months_between_dates(d1):
|
||||
d2 = datetime.today()
|
||||
d1 = datetime.strptime(d1, "%Y-%m-%d")
|
||||
months = (d2.year - d1.year) * 12 + d2.month - d1.month
|
||||
return months
|
||||
|
||||
|
||||
|
||||
# 发送通知消息
|
||||
def send_notification_message(title):
|
||||
try:
|
||||
from sendNotify import send
|
||||
|
||||
send(title, ''.join(all_print_list))
|
||||
except Exception as e:
|
||||
if e:
|
||||
print('发送通知消息失败!')
|
||||
|
||||
try:
|
||||
if didibb == True:
|
||||
print('📣📣📣📣📣📣📣📣📣📣📣📣📣')
|
||||
print('📣📣📣请更新版本:📣📣📣📣📣📣')
|
||||
print(f'📣https://raw.githubusercontent.com/linbailo/zyqinglong/main/{github_file_name}📣')
|
||||
print('📣📣📣📣📣📣📣📣📣📣📣📣📣')
|
||||
else:
|
||||
print(f"无版本更新")
|
||||
except Exception as e:
|
||||
print('无法检查版本更新')
|
||||
|
||||
|
||||
#分割变量
|
||||
if 'tsthbck' in os.environ:
|
||||
tsthbck = re.split("@|&",os.environ.get("tsthbck"))
|
||||
print(f'查找到{len(tsthbck)}个账号')
|
||||
else:
|
||||
tsthbck =['']
|
||||
print('无tsthbck变量')
|
||||
|
||||
|
||||
def qdsj(ck):
|
||||
headers = {'user-token':ck,'version':version,'channel':'1'}
|
||||
data = {"shopId":"","birthday":"","gender": 0,"nickName":None,"phone":""}
|
||||
dl = requests.post(url='https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list',json=data,headers=headers).json()
|
||||
activityId = ''
|
||||
# print(dl)
|
||||
for i in dl['result']:
|
||||
if '每日签到' in i['bannerName']:
|
||||
# print(i)
|
||||
qd = i['jumpPara']
|
||||
activityId = json.loads(qd)['activityId']
|
||||
# activityId = re.findall('activityId%2522%253A(.*?)%257D',qd)[0]
|
||||
print(f"获取到本月签到代码:{activityId}")
|
||||
#activityId = json.loads(qd)['activityId']
|
||||
elif '签到' in i['bannerName']:
|
||||
# print(i)
|
||||
qd = i['jumpPara']
|
||||
activityId = json.loads(qd)['activityId']
|
||||
# activityId = re.findall('activityId%2522%253A(.*?)%257D',qd)[0]
|
||||
print(f"获取到本月签到代码:{activityId}")
|
||||
#activityId = json.loads(qd)['activityId']
|
||||
return activityId
|
||||
|
||||
|
||||
|
||||
def yx(ck):
|
||||
activityId= ''
|
||||
try:
|
||||
activityId = qdsj(ck)
|
||||
except Exception as e:
|
||||
activityId = ''
|
||||
if activityId == '':
|
||||
danqryid = 59
|
||||
d1 = "2025-05-01"
|
||||
months = months_between_dates(d1)
|
||||
activityId = danqryid + int(months)
|
||||
|
||||
headers = {'user-token':ck,'version':version,'channel':'1'}
|
||||
dl = requests.get(url='https://sss-web.tastientech.com/api/intelligence/member/getMemberDetail',headers=headers).json()
|
||||
if dl['code'] == 200:
|
||||
myprint(f"账号:{dl['result']['phone']}登录成功")
|
||||
phone = dl['result']['phone']
|
||||
data = {"activityId":activityId,"memberName":"","memberPhone":phone}
|
||||
lq = requests.post(url='https://sss-web.tastientech.com/api/sign/member/signV2',json=data,headers=headers).json()
|
||||
if lq['code'] == 200:
|
||||
if lq['result']['rewardInfoList'][0]['rewardName'] == None:
|
||||
myprint(f"签到情况:获得 {lq['result']['rewardInfoList'][0]['point']} 积分")
|
||||
else:
|
||||
myprint(f"签到情况:获得 {lq['result']['rewardInfoList'][0]['rewardName']}")
|
||||
else:
|
||||
myprint(f"签到情况:{lq['msg']}")
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
z = 1
|
||||
for ck in tsthbck:
|
||||
try:
|
||||
myprint(f'登录第{z}个账号')
|
||||
myprint('----------------------')
|
||||
yx(ck)
|
||||
myprint('----------------------')
|
||||
z = z + 1
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print('未知错误')
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('====================')
|
||||
try:
|
||||
main()
|
||||
except Exception as e:
|
||||
print('未知错误')
|
||||
print('====================')
|
||||
try:
|
||||
send_notification_message(title='塔斯汀汉堡') # 发送通知
|
||||
except Exception as e:
|
||||
print('小错误')
|
||||
|
||||
154
脚本库/微信小程序/抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py
Normal file
154
脚本库/微信小程序/抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py
Normal file
@@ -0,0 +1,154 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 奇点积分.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: a8391dc9e2d8cd9ec502d0e6806e3ce99971e248d03d00d13807e59e8a0e383c
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
'''
|
||||
奇点积分小程序
|
||||
变量名:qdjf,多号&分割
|
||||
0 2 7,8,12,18,19 * * *
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709
|
||||
|
||||
'''
|
||||
|
||||
|
||||
|
||||
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
|
||||
def repairBag(access_token):
|
||||
url = "https://qidian.hanhoukeji.com/index.php?s=/api/blebag/openBag" # 每日三餐开福袋
|
||||
headers = {
|
||||
"Host": "qidian.hanhoukeji.com",
|
||||
"Connection": "keep-alive",
|
||||
"charset": "utf-8",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2307 MicroMessenger/8.0.44.2502(0x28002C51) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"content-type": "application/json",
|
||||
"access-token": access_token,
|
||||
"Accept-Encoding": "gzip,compress,br,deflate",
|
||||
"version": "1.5.19",
|
||||
"platform": "MP-WEIXIN",
|
||||
"Referer": "https://servicewechat.com/wx3aa7193831495d74/98/page-frame.html"
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
data = response.json()
|
||||
print(response.text)
|
||||
status = data['status']
|
||||
message = data['message']
|
||||
if status == 200:
|
||||
# points = data['data']['points']
|
||||
print('领福袋成功')
|
||||
else:
|
||||
print(message)
|
||||
|
||||
def getOrderNo(access_token):
|
||||
url = 'https://qidian.hanhoukeji.com/index.php?s=/api/seead/getOrderNo' # 广告获取
|
||||
headers = {
|
||||
'Host': 'qidian.hanhoukeji.com',
|
||||
'Connection': 'keep-alive',
|
||||
'charset': 'utf-8',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2307 MicroMessenger/8.0.44.2502(0x28002C51) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'content-type': 'application/json',
|
||||
'access-token': access_token,
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'version': '1.5.19',
|
||||
'platform': 'MP-WEIXIN',
|
||||
'Referer': 'https://servicewechat.com/wx3aa7193831495d74/98/page-frame.html'
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 200:
|
||||
data = json.loads(response.text)
|
||||
if data.get('status') == 200 and 'order_no' in data.get('data', {}):
|
||||
order_no = data['data']['order_no']
|
||||
print(f"广告编号:{order_no}")
|
||||
return order_no
|
||||
|
||||
def points(access_token, order_no):
|
||||
url = f"https://qidian.hanhoukeji.com/index.php?s=/api/seead/open&order_no={order_no}"
|
||||
headers = {
|
||||
"Host": "qidian.hanhoukeji.com",
|
||||
"Connection": "keep-alive",
|
||||
"charset": "utf-8",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2307 MicroMessenger/8.0.44.2502(0x28002C51) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"content-type": "6c074560213a22e18434c54ec77f2ba8application/json",
|
||||
"access-token": access_token,
|
||||
"Accept-Encoding": "gzip, compress, br, deflate",
|
||||
"version": "1.5.19",
|
||||
"platform": "MP-WEIXIN",
|
||||
"Referer": "https://servicewechat.com/wx3aa7193831495d74/98/page-frame.html"
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
data = response.json()
|
||||
status = data["status"]
|
||||
if status == 200:
|
||||
points = data["data"]["ponits"]
|
||||
print(f"恭喜获得积分:{points}")
|
||||
else:
|
||||
message = data["message"]
|
||||
print(f"获取积分失败,错误信息: {message}")
|
||||
|
||||
def ku(access_token, order_no):
|
||||
url = f"https://qidian.hanhoukeji.com/index.php?s=/api/user/info"
|
||||
headers = {
|
||||
"Host": "qidian.hanhoukeji.com",
|
||||
"Connection": "keep-alive",
|
||||
"charset": "utf-8",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2307 MicroMessenger/8.0.44.2502(0x28002C51) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"content-type": "6c074560213a22e18434c54ec77f2ba8application/json",
|
||||
"access-token": access_token,
|
||||
"Accept-Encoding": "gzip, compress, br, deflate",
|
||||
"version": "1.5.19",
|
||||
"platform": "MP-WEIXIN",
|
||||
"Referer": "https://servicewechat.com/wx3aa7193831495d74/98/page-frame.html"
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
data = response.json()
|
||||
status = data["status"]
|
||||
if status == 200:
|
||||
points = data["data"]["userInfo"]["points"]
|
||||
print(f"总积分为:{points}")
|
||||
else:
|
||||
message = data["message"]
|
||||
print(f"获取积分失败,错误信息: {message}")
|
||||
|
||||
def main():
|
||||
access_tokens = os.getenv("qdjf").split('&')
|
||||
i = 0
|
||||
for token in access_tokens:
|
||||
print(f"正在处理第 {i+1} 个账号...")
|
||||
repairBag(token)
|
||||
get = getOrderNo(token)
|
||||
points(token, get)
|
||||
ku(token, get)
|
||||
print("==============================")
|
||||
i+=1
|
||||
if __name__ == "__main__":
|
||||
cks=os.getenv('qdjf')
|
||||
cks = cks.split("&")
|
||||
print(f"检测到{len(cks)}个账号,即将开始...")
|
||||
i = 1
|
||||
for ck in cks:
|
||||
token=ck
|
||||
print(f"----------第{i}个账号----------")
|
||||
i += 1
|
||||
repairBag(token)
|
||||
get = getOrderNo(token)
|
||||
points(token, get)
|
||||
ku(token, get)
|
||||
rand = random.randint(5,20)
|
||||
if i > len(cks):
|
||||
break
|
||||
print(f"\n等待{rand}s后进行下一个账号")
|
||||
time.sleep(rand)
|
||||
109
脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py
Normal file
109
脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py
Normal file
@@ -0,0 +1,109 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 好宝贝.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 2194acca5f795b099cd512c9f7d04337b56c29bc30c88fa01e38276911af7df1
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#每天签到积分,可以换实物
|
||||
#抓包找miniapi.linkkids.cn域名,请求头含cookie的,_platform_num=开头的
|
||||
#推送自己看着写,wxpusher的
|
||||
#入口:微信小程序好宝贝母婴生活
|
||||
#环境变量名hbbck
|
||||
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 获取并处理环境变量 hbbck
|
||||
hbbck = os.environ.get('hbbck', '') # 获取环境变量
|
||||
|
||||
# 如果 hbbck 是多个 cookie 用逗号分隔,将它们合并成一个适合 Cookie 格式的字符串
|
||||
cookie_str = hbbck if not hbbck else "; ".join(hbbck.split(','))
|
||||
|
||||
push_token = 'UID_Rj**********' # wxpusher的UID
|
||||
push_title = '好宝贝' # 推送标题
|
||||
push_content = 'TL库\n\n'
|
||||
wxapp_token = 'AT_aTsJ*********' # wxpusher的APPToken
|
||||
|
||||
def wxpusher_send():
|
||||
"""
|
||||
发送消息到wxpusher
|
||||
"""
|
||||
headers = {'Content-Type': 'application/json;charset=utf-8'}
|
||||
data = {
|
||||
"appToken": wxapp_token,
|
||||
"uids": [push_token],
|
||||
"topicIds": [],
|
||||
"summary": push_title,
|
||||
"content": push_content,
|
||||
"contentType": 1,
|
||||
"verifyPay": False
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post('https://wxpusher.zjiecode.com/api/send/message', headers=headers, data=json.dumps(data))
|
||||
|
||||
# 获取响应的 JSON 数据
|
||||
response_json = response.json()
|
||||
|
||||
print(f"wxpusher 推送: {response_json.get('msg', '没有返回 msg 字段')}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"wxpusher 推送失败: {e}")
|
||||
|
||||
# 获取公告信息
|
||||
def get_announcement():
|
||||
try:
|
||||
external_url = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt'
|
||||
response = requests.get(external_url)
|
||||
if response.status_code == 200:
|
||||
print("公告:", response.text)
|
||||
print("公告获取成功,开始执行签到请求...")
|
||||
else:
|
||||
print(f"获取公告失败,状态码: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"获取公告时发生错误: {e}")
|
||||
|
||||
# 获取并处理签到请求
|
||||
def sign_in():
|
||||
url = "https://miniapi.linkkids.cn/common/coc/do/sign"
|
||||
params = {
|
||||
'_platform_num': "156537",
|
||||
'appid': "wx46d990aaf4b05faf",
|
||||
'apptype': "3",
|
||||
'bsharekey': "17366635121380080655",
|
||||
'shareCode': "17366635121380080655",
|
||||
'cids': "23,24"
|
||||
}
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b19)XWEB/11581",
|
||||
'xweb_xhr': "1",
|
||||
'X-Request-With': "XMLHttpRequest",
|
||||
'Content-Type': "application/json; charset=utf-8",
|
||||
'Sec-Fetch-Site': "cross-site",
|
||||
'Sec-Fetch-Mode': "cors",
|
||||
'Sec-Fetch-Dest': "empty",
|
||||
'Referer': "https://servicewechat.com/wx46d990aaf4b05faf/2/page-frame.html",
|
||||
'Accept-Language': "zh-CN,zh;q=0.9",
|
||||
'Cookie': cookie_str # 使用拼接后的 cookie 字符串
|
||||
}
|
||||
|
||||
response = requests.get(url, params=params, headers=headers)
|
||||
aaa = json.loads(response.text)
|
||||
if aaa['message'] == 'success':
|
||||
push_content = f"签到成功,获得{aaa['data']['rewards'][0]['info']}"
|
||||
else:
|
||||
push_content = f"签到失败,{aaa['message']}"
|
||||
|
||||
print(push_content)
|
||||
wxpusher_send()
|
||||
|
||||
def main():
|
||||
get_announcement()
|
||||
sign_in()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
184
脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js
Normal file
184
脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js
Normal file
@@ -0,0 +1,184 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 媓钻小程序.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 85b516e6722480c67d37d7e5060eacb32fab911bc1497ac16a1e453c3ae0e71d
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.08 13.38
|
||||
@Description: 媓钻 小程序 赛龙舟活动 每天抽奖2-3次
|
||||
------------------------------------------
|
||||
变量名huangzuan_WX
|
||||
变量值https://api.hzyxhfp.com/api/ 请求头Headers中authorization的值 去掉Bearer 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("媓钻小程序");
|
||||
let ckName = `huangzuan_WX`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 0;
|
||||
//let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index || ++index}】 start work\n`);
|
||||
$.token = user
|
||||
$.ckStatus = false;
|
||||
await signIn()
|
||||
for (let i = 0; i < 2; i++) {
|
||||
await play()
|
||||
await $.wait(5000)
|
||||
|
||||
if ($.ckStatus) {
|
||||
await lottery()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
//取150-200随机数
|
||||
function getRandomInt(min, max) {
|
||||
min = Math.ceil(min);
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
|
||||
}
|
||||
async function signIn() {
|
||||
|
||||
let data = JSON.stringify({});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://api.hzyxhfp.com/api/signInLog/addSignIn',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'app': 'wx3df7476c42cace5d',
|
||||
'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5oenl4aGZwLmNvbS9hcGkveWZtR2V0QXV0aFVzZXIiLCJpYXQiOjE3MTc4MjQ4NzMsImV4cCI6MjMxNzgyNDgxMywibmJmIjoxNzE3ODI0ODczLCJqdGkiOiJxdWRGcUlLaHRxWUd3Y0dIIiwic3ViIjozMDIwMTk5LCJwcnYiOiJjNzdlYWJjNmQyOWRiY2UwYjU1ZTk4YmRlYzM5MWI1NDlhNWVmMWYwIn0.0akWVLgE0Bd8_a-EOIQiC8dB_xiiOc2Y40xIVQnBRkU',
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
result?.code == 0 ? ($.log(`签到成功 已签到[${result.data.cont_days}]天`)) : ($.log(`签到失败`), console.log(JSON.stringify(result)))
|
||||
|
||||
}
|
||||
async function play() {
|
||||
let data = JSON.stringify({
|
||||
"id": "1",
|
||||
"score": getRandomInt(150, 200)
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://api.hzyxhfp.com/api/dragonActivity/addDragonScore',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'app': 'wx3df7476c42cace5d',
|
||||
'authorization': 'Bearer ' + $.token,
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
result?.code == 0 ? ($.log(`游戏成功`), $.ckStatus = true) : ($.log(`游戏失败`), console.log(JSON.stringify(result)))
|
||||
}
|
||||
async function lottery() {
|
||||
let data = JSON.stringify({
|
||||
"id": "1"
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://api.hzyxhfp.com/api/dragonActivity/getDragonPrizeResult',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'app': 'wx3df7476c42cace5d',
|
||||
'authorization': 'Bearer ' + $.token,
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
result?.code == 0 ? $.log(`抽奖[${result.data.title}]`) : ($.log(`抽奖失败`), console.log(JSON.stringify(result)))
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 富士instax玩拍由我俱乐部.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 41c9289f9387758603acba6c6dbae3067a176dbe23fec03fa97c8458575d21cb
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.11 19:19
|
||||
@Description: 富士instax玩拍由我俱乐部 小程序 每日签到+抽奖
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
------------------------------------------
|
||||
变量名instax
|
||||
变量值 https://instax.app.xcxd.net.cn/ 域名Headers请求头的Authorization 去掉Bearer 多账号&或换行或新增同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("富士instax玩拍由我俱乐部");
|
||||
let ckName = `instax`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
$.userId = null
|
||||
await me()
|
||||
await $.wait(3000)
|
||||
if ($.userId) {
|
||||
await signIn()
|
||||
await $.wait(3000)
|
||||
await chance()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function me() {
|
||||
let config = {
|
||||
url: `https://instax.app.xcxd.net.cn/api/me`,
|
||||
method: `GET`,
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": "Bearer " + $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"Host": "instax.app.xcxd.net.cn",
|
||||
"Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
|
||||
if (result?.error == false) {
|
||||
$.userId = result.data.user.id
|
||||
$.log(`[${result.data.user.nickname}] 当前积分[${result.data.user.credit}] 等级[${result.data.user.user_level_id}]`);
|
||||
} else {
|
||||
$.log(`获取信息 失败[${result.message}]`);
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let config = {
|
||||
url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/sign-activity/23/sign`,
|
||||
method: `POST`,
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": "Bearer " + $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"Host": "instax.app.xcxd.net.cn",
|
||||
"Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: response } = await Request(config);
|
||||
if (response?.error == false) {
|
||||
$.log(`签到成功`);
|
||||
} else {
|
||||
$.log(`签到失败[${response}]`);
|
||||
}
|
||||
}
|
||||
async function chance() {
|
||||
let config = {
|
||||
url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/draw-activities/41/chance`,
|
||||
method: `GET`,
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": "Bearer " + $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"Host": "instax.app.xcxd.net.cn",
|
||||
"Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
}
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.error == false) {
|
||||
$.log(`查询抽奖次数 [${result.data}]`);
|
||||
for (let i = 0; i < result.data; i++) {
|
||||
await $.wait(3000)
|
||||
await draw()
|
||||
}
|
||||
} else {
|
||||
$.log(`查询抽奖次数 失败[${result.message}]`);
|
||||
}
|
||||
}
|
||||
async function draw() {
|
||||
let config = {
|
||||
url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/draw-activities/41/draw`,
|
||||
method: `POST`,
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": "Bearer " + $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"Host": "instax.app.xcxd.net.cn",
|
||||
"Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: result } = await Request(config);
|
||||
if (result?.error == false) {
|
||||
$.log(`抽奖成功 [${result.data.record.desc}]`);
|
||||
} else {
|
||||
$.log(`抽奖失败[${result.message}]`);
|
||||
}
|
||||
}
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
//console.log(error.response.data)
|
||||
return error && error.response ? error.response.data : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
199
脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py
Normal file
199
脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py
Normal file
@@ -0,0 +1,199 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 小天鹅.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 73a76dd9d2c0924196e2f94ca8e1011b8e70db0010a37d6e48820a079e6cee9d
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#by:哆啦A梦
|
||||
#TL库:https://github.com/3288588344/toulu.git
|
||||
#抓包midea.com域名中的imUserId和uid,格式:imUserId#uid
|
||||
#将抓到的值填在环境变量XTE中,多账号换行分割
|
||||
#入口:微信小程序:全心全意小天鹅
|
||||
|
||||
|
||||
#公众号:哆啦A梦的藏宝箱
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
import random
|
||||
import time
|
||||
#公众号:哆啦A梦的藏宝箱
|
||||
def check_environment_variable():
|
||||
"""检查环境变量并解析账号信息"""
|
||||
xte_env = os.environ.get("XTE")
|
||||
if not xte_env:
|
||||
print("错误:未设置 XTE 环境变量")
|
||||
return None
|
||||
|
||||
accounts = []
|
||||
for account_info in xte_env.split("\n"):
|
||||
account_info = account_info.strip()
|
||||
if not account_info:
|
||||
continue
|
||||
parts = account_info.split("#")
|
||||
if len(parts) < 2:
|
||||
print(f"错误:XTE 环境变量格式不正确,应为 imUserId#uid,当前值为:{account_info}")
|
||||
return None
|
||||
imUserId = parts[0]
|
||||
uid = parts[1]
|
||||
accounts.append((imUserId, uid))
|
||||
|
||||
if not accounts:
|
||||
print("错误:未找到有效的账号信息")
|
||||
return None
|
||||
|
||||
return accounts
|
||||
|
||||
# 获取公告信息
|
||||
def get_proclamation():
|
||||
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||
try:
|
||||
response = requests.get(primary_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("\n" + "=" * 50)
|
||||
print("📢 公告信息")
|
||||
print("=" * 35)
|
||||
print(response.text)
|
||||
print("=" * 35 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
return
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"获取公告时发生错误: {e}, 尝试备用链接...")
|
||||
|
||||
try:
|
||||
response = requests.get(backup_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("\n" + "=" * 50)
|
||||
print("📢 公告信息")
|
||||
print("=" * 35)
|
||||
print(response.text)
|
||||
print("=" * 35 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
else:
|
||||
print(f"⚠️ 获取公告失败,状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。")
|
||||
|
||||
|
||||
def send_sign_request(imUserId, uid):
|
||||
"""发送签到请求"""
|
||||
url = "https://weixin.midea.com/mscp_mscp/api/cms_api/activity-center-im-service/im-svr/im/game/page/sign"
|
||||
|
||||
headers = {
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"appId": "QLZZ9Fr7w2to",
|
||||
"apiKey": "3660663068894a0d9fea574c2673f3c0",
|
||||
"vcode": "107da4f1bb8b63c7d4ea9c5537207086",
|
||||
"Origin": "https://weixin.midea.com",
|
||||
"X-Requested-With": "com.tencent.mm",
|
||||
"Referer": "https://weixin.midea.com/apps/h5-pro-wx-interaction-marketing/",
|
||||
"Accept-Encoding": "gzip, deflate, br, zstd",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
||||
}
|
||||
|
||||
data = {
|
||||
"headParams": {
|
||||
"language": "CN",
|
||||
"originSystem": "MCSP",
|
||||
"timeZone": "",
|
||||
"userCode": "",
|
||||
"tenantCode": "",
|
||||
"userKey": "TEST_",
|
||||
"transactionId": ""
|
||||
},
|
||||
"pagination": None,
|
||||
"restParams": {
|
||||
"gameId": 9,
|
||||
"actvId": "401668349848950807",
|
||||
"rootCode": "XTE",
|
||||
"appCode": "XTE_SHG",
|
||||
"imUserId": imUserId,
|
||||
"uid": uid,
|
||||
"openId": "oOqmz4uVK1_2cXwnsVHDp1vicNNY",
|
||||
"unionId": "o9wX6jllxZJZxZsI0awpJS1aC8W0"
|
||||
}
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=json.dumps(data))
|
||||
return response
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求异常: {e}")
|
||||
return None
|
||||
|
||||
def process_response(index, imUserId, response):
|
||||
"""处理签到响应"""
|
||||
if response is None:
|
||||
print(f"账号 {index}: {imUserId} - 请求失败")
|
||||
return
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"账号 {index}: {imUserId} - 请求失败,状态码: {response.status_code}")
|
||||
print("响应内容:", response.text)
|
||||
return
|
||||
|
||||
try:
|
||||
response_json = response.json()
|
||||
except json.JSONDecodeError:
|
||||
print(f"账号 {index}: {imUserId} - 响应内容不是 JSON 格式")
|
||||
print("响应内容:", response.text)
|
||||
return
|
||||
|
||||
if response_json.get("code") != "000000":
|
||||
error_msg = response_json.get("msg", "未知错误")
|
||||
print(f"账号 {index}: {imUserId} - 签到失败: {error_msg}")
|
||||
return
|
||||
|
||||
data_content = response_json.get("data")
|
||||
if not data_content:
|
||||
print(f"账号 {index}: {imUserId} - 响应数据中未找到 data 字段")
|
||||
return
|
||||
|
||||
sign_result = data_content.get("result")
|
||||
if sign_result:
|
||||
print(f"账号 {index}: {imUserId} - 签到成功!")
|
||||
prize_dto = data_content.get("prizeDto")
|
||||
prize_name = prize_dto.get("name", "未知奖励") if prize_dto else "未知奖励"
|
||||
print(f"获得奖励: {prize_name}")
|
||||
else:
|
||||
print(f"账号 {index}: {imUserId} - 今日已签到")
|
||||
|
||||
consecutive_days = data_content.get("consecutiveDays", "1")
|
||||
print(f"连续签到天数: {consecutive_days}")
|
||||
|
||||
def main():
|
||||
# 获取公告
|
||||
get_proclamation()
|
||||
|
||||
# 获取账号列表
|
||||
accounts = check_environment_variable()
|
||||
if not accounts:
|
||||
return
|
||||
|
||||
# 对账号进行排序并标注序号
|
||||
accounts.sort()
|
||||
if not accounts:
|
||||
print("错误:未找到有效的账号信息")
|
||||
return
|
||||
|
||||
# 执行签到任务
|
||||
for index, (imUserId, uid) in enumerate(accounts, start=1):
|
||||
print(f"正在处理账号 {index}: ")
|
||||
response = send_sign_request(imUserId, uid)
|
||||
process_response(index, imUserId, response)
|
||||
print("-" * 50)
|
||||
#公众号:哆啦A梦的藏宝箱
|
||||
# 添加随机延迟
|
||||
delay = random.randint(3, 10) # 随机延迟3到10秒
|
||||
if index < len(accounts):
|
||||
print(f"随机延迟 {delay} 秒后处理下一个账号...")
|
||||
time.sleep(delay)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
#公众号:哆啦A梦的藏宝箱
|
||||
120
脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js
Normal file
120
脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js
Normal file
@@ -0,0 +1,120 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 小猴工具小程序.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 233147302aa851148dfb5aba682d5cbd418b833a6102d89d969e6177da74a610
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.08 13.21
|
||||
@Description: 小猴工具小程序
|
||||
------------------------------------------
|
||||
自己先签到一次 抓请求包https://h5.youzan.com/wscump/checkin/checkinV2.json 后面Url的checkinId和请求头Headers中extra-data里面sid的值
|
||||
#拼接 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("小猴工具小程序");
|
||||
let ckName = `Monkey_WX`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 0;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index || ++index}】 start work\n`);
|
||||
$.checkInId = user.split(strSplitor)[0];
|
||||
$.sid = user.split(strSplitor)[1];
|
||||
await signIn();
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function signIn() {
|
||||
|
||||
let config = {
|
||||
method: 'GET',
|
||||
url: 'https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=' + $.checkInId + '&app_id=&kdt_id=&access_token=',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json',
|
||||
'extra-data': '{"is_weapp":1,"sid":"' + $.sid + '","version":"2.154.3.101","client":"weapp","bizEnv":"wsc","uuid":"","ftime":""}',
|
||||
'referer': 'https://servicewechat.com/wx0451bbda59c220a8/95/page-frame.html'
|
||||
}
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
result?.code == 0 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result));
|
||||
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
128
脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py
Normal file
128
脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py
Normal file
@@ -0,0 +1,128 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 小米社区小程序签到.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 3c6fe4dfa4e8ed6ec83d117595336e599be3b579d2ce6bbacfcca434a94ec800
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
|
||||
|
||||
#cookie在https://account.xiaomi.com/pass/sns/wxapp/v2/tokenLogin链接下
|
||||
#变量名xmsq,多账号使用&分割
|
||||
def get_cookies_from_env():
|
||||
"""
|
||||
从环境变量中获取cookie值,多账号使用&分割
|
||||
"""
|
||||
xmsq = os.getenv("xmsq")
|
||||
if not xmsq:
|
||||
raise ValueError("环境变量中未找到xmsq,请确保已正确设置环境变量。")
|
||||
return xmsq.split("&")
|
||||
|
||||
def get_login_data(cookie):
|
||||
"""
|
||||
发送登录请求,获取签到所需的参数
|
||||
"""
|
||||
url = "https://account.xiaomi.com/pass/sns/wxapp/v2/tokenLogin"
|
||||
headers = {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Cookie": cookie,
|
||||
"Referer": "https://servicewechat.com/wx240a4a764023c444/3/page-frame.html",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20241202 MMWEBID/3628 MicroMessenger/8.0.56.2800(0x28003858) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"Accept-Encoding": "gzip, deflate, br"
|
||||
}
|
||||
data = {
|
||||
"appid": "wx240a4a764023c444",
|
||||
"sid": "miui_vip",
|
||||
"authType": "0",
|
||||
"callback": ""
|
||||
}
|
||||
|
||||
response = requests.post(url, headers=headers, data=data)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
raise Exception(f"登录请求失败,状态码:{response.status_code}")
|
||||
|
||||
def checkin(miui_vip_ph, serviceToken, userId):
|
||||
"""
|
||||
执行签到操作
|
||||
"""
|
||||
url = "https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c25)XWEB/11581",
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"Origin": "https://servicewechat.com",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Referer": "https://servicewechat.com/wx240a4a764023c444/3/page-frame.html",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9"
|
||||
}
|
||||
cookies = {
|
||||
"serviceToken": serviceToken,
|
||||
"miui_vip_ph": miui_vip_ph,
|
||||
"userId": str(userId)
|
||||
}
|
||||
params = {"miui_vip_ph": miui_vip_ph}
|
||||
data = {"action": "WECHAT_CHECKIN_TASK"}
|
||||
|
||||
response = requests.post(url, headers=headers, cookies=cookies, params=params, data=data)
|
||||
return response.json()
|
||||
|
||||
def handle_checkin_result(phone, result):
|
||||
"""
|
||||
处理签到结果并输出通知
|
||||
"""
|
||||
if result.get("status") == 200:
|
||||
print(f"{phone} 签到成功!")
|
||||
elif result.get("status") == -1 and result.get("message") == "加分失败":
|
||||
print(f"{phone} 签到失败:今天已经签到过了。")
|
||||
elif result.get("code") == 401:
|
||||
print(f"{phone} 签到失败:参数错误或登录信息失效。")
|
||||
else:
|
||||
print(f"{phone} 签到失败:未知错误。返回结果:{result}")
|
||||
|
||||
def get_announcement():
|
||||
"""
|
||||
获取公告信息
|
||||
"""
|
||||
external_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||
try:
|
||||
response = requests.get(external_url)
|
||||
if response.status_code == 200:
|
||||
print(response.text.strip()) # 打印公告内容
|
||||
print("公告获取成功,开始执行签到请求...")
|
||||
else:
|
||||
print(f"获取公告失败,状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"获取公告时发生错误: {e}")
|
||||
|
||||
def main():
|
||||
try:
|
||||
# 获取公告
|
||||
get_announcement()
|
||||
|
||||
# 获取环境变量中的cookie
|
||||
cookies = get_cookies_from_env()
|
||||
for cookie in cookies:
|
||||
login_data = get_login_data(cookie)
|
||||
miui_vip_ph = login_data["miui_vip_ph"]
|
||||
serviceToken = login_data["serviceToken"]
|
||||
userId = login_data["passportProfile"]["userId"]
|
||||
phone = login_data["passportProfile"]["phone"] # 获取 phone 值
|
||||
|
||||
# 执行签到
|
||||
checkin_response = checkin(miui_vip_ph, serviceToken, userId)
|
||||
handle_checkin_result(phone, checkin_response)
|
||||
except Exception as e:
|
||||
print(f"发生错误: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
509
脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js
Normal file
509
脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js
Normal file
File diff suppressed because one or more lines are too long
151
脚本库/微信小程序/抓包版/巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py
Normal file
151
脚本库/微信小程序/抓包版/巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py
Normal file
@@ -0,0 +1,151 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B7%A8%E9%87%8Fip_Sign.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B7%A8%E9%87%8Fip_Sign.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 巨量ip_Sign.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 0fe9136c554fc34b8f6e1e10f96ac9096fbf27a419b6866e41c90285ab4cdf05
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
* 仅供学习交流,请在下载后的24小时内完全删除 请勿将任何内容用于商业或非法目的,否则后果自负。
|
||||
* 巨量ip签到。每日签到领取1000免费IP
|
||||
* 巨量ip注册地址 https://www.juliangip.com/user/reg?inviteCode=1031551
|
||||
*token获取平台:http://www.gxfc-s4.com/
|
||||
*有问题联系3288588344
|
||||
*频道:https://pd.qq.com/s/672fku8ge
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
# # # # # # # # # # #
|
||||
|
||||
import json
|
||||
import re
|
||||
|
||||
import requests
|
||||
import urllib3
|
||||
from urllib3.exceptions import InsecureRequestWarning
|
||||
|
||||
urllib3.disable_warnings(InsecureRequestWarning)
|
||||
token = "填写token"
|
||||
username = "填入你的巨量账号"
|
||||
password = "填入你的巨量密码"
|
||||
|
||||
def jl_login(username, password):
|
||||
url = "https://www.juliangip.com/login/go"
|
||||
payload = f'type=password&username={username}&password={password}&sms_code='
|
||||
headers = {
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Origin': 'https://www.juliangip.com',
|
||||
'Referer': 'https://www.juliangip.com/user/login',
|
||||
'Sec-Ch-Ua': '"Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
|
||||
'Sec-Ch-Ua-Mobile': '?0',
|
||||
'Sec-Ch-Ua-Platform': '"Windows"',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'same-origin',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43',
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
|
||||
response = requests.request("POST", url, headers=headers, data=payload, verify=False)
|
||||
if response.status_code == 200:
|
||||
return "_JSID=" + response.cookies.get("_JSID")
|
||||
return None
|
||||
|
||||
|
||||
def jl_users(tk):
|
||||
url = "https://www.juliangip.com/users/"
|
||||
headers = {
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
'Sec-Ch-Ua': '"Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
|
||||
'Sec-Ch-Ua-Mobile': '?0',
|
||||
'Sec-Ch-Ua-Platform': '"Windows"',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
"Cookie": tk,
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43',
|
||||
}
|
||||
response = requests.get(url, headers=headers, verify=False)
|
||||
if response.status_code == 200:
|
||||
return re.findall("const tx =new TencentCaptcha\('(\d+)'", response.text)
|
||||
return []
|
||||
|
||||
|
||||
def getcode(aid):
|
||||
url = "http://119.96.239.11:8888/api/getcode"
|
||||
headers = {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
data = {
|
||||
"timeout": "90", # 超时时间 请确保http请求超时>该参数,否则识别成功但连接已断开失败
|
||||
"type": "tencent-turing", # 类型
|
||||
"appid": aid, # 抓包所得aid/appid/id参数 tencent[aid/appid] netease[id]
|
||||
"token": token, # 用户token 用于识别区分用户
|
||||
"developeraccount": "" # 软件开发者用户名 //可空
|
||||
}
|
||||
response = requests.post(url, headers=headers, verify=False, timeout=90, data=json.dumps(data))
|
||||
if response.status_code == 200:
|
||||
if response.json()['status'] == 200:
|
||||
return response.json()
|
||||
else:
|
||||
print(response.json())
|
||||
return {}
|
||||
return {}
|
||||
|
||||
|
||||
def getFree(tk, js):
|
||||
headers = {
|
||||
"Host": "www.juliangip.com",
|
||||
"Cookie": tk,
|
||||
"sec-ch-ua": "\"Microsoft Edge\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"",
|
||||
"accept": "*/*",
|
||||
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"x-requested-with": "XMLHttpRequest",
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43",
|
||||
"sec-ch-ua-platform": "\"Windows\"",
|
||||
"origin": "https://www.juliangip.com",
|
||||
"sec-fetch-site": "same-origin",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-dest": "empty",
|
||||
"referer": "https://www.juliangip.com/users/",
|
||||
"accept-language": "zh-CN,zh;q=0.9"
|
||||
}
|
||||
data_js = json.loads(js['data']['code'])
|
||||
data = {
|
||||
"randStr": data_js['randstr'],
|
||||
"ticket": data_js["ticket"]
|
||||
}
|
||||
url = "https://www.juliangip.com/users/getFree"
|
||||
response = requests.post(url, headers=headers, data=data,
|
||||
verify=False) # 注意:verify=False 用于禁用SSL验证,如果需要SSL验证,请删除这个参数
|
||||
if response.status_code == 200:
|
||||
print(response.json())
|
||||
else:
|
||||
print(response.text)
|
||||
|
||||
|
||||
def main():
|
||||
tk = jl_login(username, password)
|
||||
if not tk:
|
||||
print("登录失败")
|
||||
return
|
||||
aid = jl_users(tk)
|
||||
if not aid:
|
||||
print("获取aid失败")
|
||||
return
|
||||
js = getcode(aid[0])
|
||||
if not js:
|
||||
print("获取打码平台失败")
|
||||
return
|
||||
getFree(tk, js)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
886
脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js
Normal file
886
脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js
Normal file
File diff suppressed because one or more lines are too long
1416
脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js
Normal file
1416
脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js
Normal file
File diff suppressed because one or more lines are too long
121
脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js
Normal file
121
脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js
Normal file
@@ -0,0 +1,121 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/kangshifu.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/kangshifu.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/kangshifu.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 73bda6361b08e86509de8dbe3cd6c2439da54fac4a43d4c4fea1d8c5edc82c0e
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 康师傅畅饮社
|
||||
cron: 30 10 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
康师傅畅饮社小程序
|
||||
变量名 ksfcys
|
||||
账号格式:抓https://club.biqr.cn/api/请求头token 多账户&或换行
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("康师傅畅饮社");
|
||||
let ckName = `ksfcys`;
|
||||
const strSplitor = "#";
|
||||
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
url: `https://club.biqr.cn/api/signIn/integralSignIn`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'xweb_xhr': '1',
|
||||
'Content-Type': 'application/x-www-form-urlencoded;',
|
||||
'Token': '' + this.token,
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wx54f3e6a00f7973a7/795/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
},
|
||||
method: 'POST',
|
||||
data: {
|
||||
|
||||
}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`账号[${this.index}]【${this.name}】 签到成功`);
|
||||
} else {
|
||||
$.log(result);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
1750
脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js
Normal file
1750
脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js
Normal file
File diff suppressed because it is too large
Load Diff
330
脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js
Normal file
330
脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js
Normal file
@@ -0,0 +1,330 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dw.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dw.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/dw.js
|
||||
// # UploadedAt: 2026-04-08T12:04:40Z
|
||||
// # SHA256: 643756c628cc298d1afacd86d11cb0f35889ab3d2203212a9ac4486e354f3569
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 得物APP 0元抽
|
||||
cron: 30 11 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
得物0元抽 抓https://app.dewu.com/api 请求头的x-auth-token 去掉Bearer 多账户&或换行
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
const CryptoJS = require("crypto-js");
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("得物0元抽");
|
||||
let ckName = `dwck`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
request(options) {
|
||||
let sign = this.calculateSign(options.data)
|
||||
options.url = options.url + `?sign=${sign}`
|
||||
let baseHeaders = {
|
||||
"Host": "app.dewu.com",
|
||||
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.89.0",
|
||||
"device_model": "iPhone 8",
|
||||
"platform": "h5",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.89.0",
|
||||
"mode": "0",
|
||||
"webua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
|
||||
"netSourceType": "1",
|
||||
"channel": "App Store",
|
||||
"isRoot": "1",
|
||||
"brand": "Apple",
|
||||
"networktype": "WIFI",
|
||||
"dudeviceTrait": "iPhone10,1",
|
||||
"Accept-Language": "zh-Hans;q=1.0, en;q=0.9",
|
||||
"app_build": "5.89.0.510",
|
||||
"x-auth-token": "Bearer " + this.token,
|
||||
"countryCode": "CN",
|
||||
"appid": "h5",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"isProxy": "0",
|
||||
"appVersion": "5.89.0",
|
||||
"v": "5.89.0",
|
||||
"deviceTrait": "iPhone",
|
||||
"imei": "",
|
||||
"emu": "0",
|
||||
}
|
||||
options.headers = Object.assign(baseHeaders, options.headers)
|
||||
return axios.request(options)
|
||||
}
|
||||
async run() {
|
||||
|
||||
await this.zeroLottery()
|
||||
}
|
||||
|
||||
async zeroLottery() {
|
||||
|
||||
let options = {
|
||||
method: "POST",
|
||||
url: "https://app.dewu.com/api/v1/h5/oss-platform/hacking-zero-lottery/v1/activity/query-today",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
data: { "source": "wotab" }
|
||||
}
|
||||
let { data: result } = await this.request(options)
|
||||
|
||||
if (result.code == 200) {
|
||||
for (let i of result.data.activityList) {
|
||||
if (i.status == 0) {
|
||||
if ("taskVo" in i) {
|
||||
//需要做任务
|
||||
|
||||
} else {
|
||||
await this.zeroLotteryJoin(i.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`)
|
||||
}
|
||||
|
||||
}
|
||||
async zeroLotteryJoin(id) {
|
||||
|
||||
let options = {
|
||||
method: "POST",
|
||||
url: "https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
data: { "id": id, "source": "wotab", inner: true }
|
||||
}
|
||||
let { data: result } = await this.request(options)
|
||||
|
||||
if (result.code == 200) {
|
||||
$.log(`账号[${this.index}] 参与0元购成功🎉`)
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 参与 0元购失败[${result.msg}]`)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*async DoTask(body) {
|
||||
try {
|
||||
let taskStatusResult = {};
|
||||
let commitBody = {};
|
||||
let preStatus = false
|
||||
if (body.taskType == 50) {
|
||||
taskStatusResult = await this.taskRequest_task("get", `https://app.dewu.com/hacking-task/v1/task/status?taskId=${body.taskId}&taskType=50&sign=94fd23c93d62ae0f75108f94c093b198`)
|
||||
if (taskStatusResult.code == 200) {
|
||||
if (taskStatusResult.data.status == 1) {
|
||||
//$.log(`账号[${this.index}] 开始任务成功🎉`)
|
||||
commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "btd": 0, spuId: 0 }
|
||||
preStatus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if (body.taskType == 1) {
|
||||
if ("classify" in body) {
|
||||
if (body.classify == 2) {
|
||||
taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
|
||||
//console.log(taskStatusResult);
|
||||
if (taskStatusResult.code == 200) {
|
||||
if (taskStatusResult.data.isOk == true) {
|
||||
//$.log(`账号[${this.index}] 开始任务成功🎉`)
|
||||
$.log(`延迟${body.countdownTime + 1}秒浏览${body.taskName}`)
|
||||
await $.wait((body.countdownTime + 1) * 1000)
|
||||
commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
|
||||
preStatus = true
|
||||
}
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
|
||||
if (taskStatusResult.code == 200) {
|
||||
if (taskStatusResult.data.isOk == true) {
|
||||
//$.log(`账号[${this.index}] 开始任务成功🎉`)
|
||||
await $.wait(16000)
|
||||
commitBody = { "taskId": body.taskId, "taskType": body.taskType, "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
|
||||
preStatus = true
|
||||
}
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (body.taskType == 123 || body.taskType == 124) {
|
||||
commitBody = { "taskType": String(body.taskType) }
|
||||
preStatus = true
|
||||
}
|
||||
//console.log(taskStatusResult)
|
||||
if (preStatus == true) {
|
||||
let commitResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/commit?sign=826988b593cd8cd75162b6d3b7dade15`, commitBody)
|
||||
//console.log(commitResult)
|
||||
if (commitResult.code == 200) {
|
||||
if (commitResult.data.status == 2) {
|
||||
$.log(`账号[${this.index}] [${body.taskName}]任务成功🎉`)
|
||||
return true
|
||||
} else {
|
||||
$.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
|
||||
}
|
||||
} else {
|
||||
$.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
}*/
|
||||
generateIds() {
|
||||
var Uo = Array(32);
|
||||
var oe = "0000000000000000";
|
||||
|
||||
function Ho(e) {
|
||||
for (var t = 0; t < 2 * e; t++)
|
||||
Uo[t] = Math.floor(16 * Math.random()) + 48,
|
||||
Uo[t] >= 58 && (Uo[t] += 39);
|
||||
return String.fromCharCode.apply(null, Uo.slice(0, 2 * e));
|
||||
}
|
||||
|
||||
var Mo = "00000000000000000000000000000000"; // Assuming Mo is defined somewhere else in your code
|
||||
|
||||
var generateSpanId = function () {
|
||||
return function (e) {
|
||||
var t = e(8);
|
||||
if (t === oe)
|
||||
return Mo;
|
||||
return t;
|
||||
}(Ho);
|
||||
};
|
||||
|
||||
var generateTraceId = function () {
|
||||
return function (e) {
|
||||
var t = Math.floor(Date.now() / 1e3).toString(16),
|
||||
n = e(8),
|
||||
r = e(3);
|
||||
return "f5" + r + t + n;
|
||||
}(Ho);
|
||||
};
|
||||
|
||||
return "00-" + generateTraceId() + "-" + generateSpanId() + "-01"
|
||||
};
|
||||
|
||||
createEncryptedBody(data) {
|
||||
const key2 = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANMGZPlLobHYWoZyMvHD0a6emIjEmtf5Z6Q++VIBRulxsUfYvcczjB0fMVvAnd1douKmOX4G690q9NZ6Q7z/TV8CAwEAAQ==";
|
||||
const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' +
|
||||
key2 +
|
||||
'-----END PUBLIC KEY-----';
|
||||
|
||||
global["window"] = {}
|
||||
const jsencrypt = require("jsencrypt")
|
||||
const crypt = new jsencrypt()
|
||||
crypt.setKey(publicKeyPem)
|
||||
const n = this.randomStr(48, 16);
|
||||
const encrypted = crypt.encrypt(n)
|
||||
const enBody = CryptoJS.enc.Utf8.parse(data);
|
||||
const enResult = CryptoJS.AES.encrypt(enBody, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
|
||||
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
//console.log(encrypted);
|
||||
//console.log(hexToBase64(encrypted));
|
||||
const newBody = {
|
||||
data: encrypted + "" + enResult.ciphertext.toString().toUpperCase(),
|
||||
};
|
||||
newBody.sign = this.calculateSign(newBody);
|
||||
return { enData: newBody, n };
|
||||
function hexToBase64(hexString) {
|
||||
const buffer = Buffer.from(hexString, 'hex');
|
||||
const base64String = buffer.toString('base64');
|
||||
return base64String;
|
||||
}
|
||||
}
|
||||
randomStr(length, charset) { var tmp1, tmp2, data = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), result = []; if (((charset = charset || data["length"]), length)) for (tmp1 = 0; tmp1 < length; tmp1++)result[tmp1] = data[0 | (Math.random() * charset)]; else for (result[8] = result[13] = result[18] = result[23] = "-", result[14] = "4", tmp1 = 0; tmp1 < 36; tmp1++)result[tmp1] || ((tmp2 = 0 | (16 * Math["random"]())), (result[tmp1] = data[19 === tmp1 ? (3 & tmp2) | 8 : tmp2])); return result["join"]("") }
|
||||
decryptResponseBody(result, n) {
|
||||
try {
|
||||
const de1 = CryptoJS.enc.Hex.parse(result),
|
||||
de2 = CryptoJS.enc.Base64.stringify(de1);
|
||||
const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
|
||||
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
}).toString(CryptoJS.enc.Utf8);
|
||||
return decrypted;
|
||||
} catch (error) {
|
||||
n = "987654321012345678901234567890123456789012345678"
|
||||
const de1 = CryptoJS.enc.Hex.parse(result),
|
||||
de2 = CryptoJS.enc.Base64.stringify(de1);
|
||||
const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
|
||||
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
}).toString(CryptoJS.enc.Utf8);
|
||||
return decrypted;
|
||||
}
|
||||
|
||||
}
|
||||
//修复自 修改处理后 空值删除得情况 改为不删除
|
||||
calculateSign(requestBody) { const sortedKeys = Object.keys(requestBody).sort(); let signContent = sortedKeys.reduce((acc, key) => { const value = requestBody[key]; if (value === null) { return acc } if (typeof value === 'object' && !Array.isArray(value)) { return acc.concat(key).concat(JSON.stringify(value)) } if (Array.isArray(value)) { if (value.length > 0) { let typeOfFirstItem = typeof value[0]; if (typeOfFirstItem === 'object') { let arrayStr = ''; value.forEach((item, index) => { arrayStr += JSON.stringify(item) + (index !== value.length - 1 ? ',' : '') }); return acc.concat(key).concat(arrayStr) } } return acc.concat(key).concat(value.toString()) } return acc.concat(key).concat(value.toString()) }, ''); const secretKey = "048a9c4943398714b356a696503d2d36"; const hashedContent = CryptoJS.MD5(signContent.concat(secretKey)).toString(); return hashedContent }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
251
脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js
Normal file
251
脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js
Normal file
File diff suppressed because one or more lines are too long
128
脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js
Normal file
128
脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js
Normal file
@@ -0,0 +1,128 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 微信小程序虔金E站.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: e1e429fad49d3ca582abe7eaf2f060325d2147c534f593c66313798be2843660
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 微信小程序虔金E站 每日签到
|
||||
------------------------------------------
|
||||
变量名qianjin
|
||||
变量值https://www.xrservice.cn/请求头Headers中Homing-Auth的值 去掉Bearer 多账号&或换行
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("微信小程序虔金E站");
|
||||
let ckName = `qianjin`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 0;
|
||||
//let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index || ++index}】 start work\n`);
|
||||
$.ck = user
|
||||
//$.ckStatus = false;
|
||||
await signIn()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function signIn() {
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://www.xrservice.cn/rayo-gz-fes-back/blade-signin/signin-user/submit',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx7bda09dcc9affced',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Content-Type': 'application/json',
|
||||
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
|
||||
'Homing-Auth': 'Bearer '+$.ck,
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
//'Authorization': 'Basic aG9taW5nLXd4bHA6UEhPU2J6SEVoRWhkRW4xYWlDSmhnYmJadVQ=',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'Origin': 'https://www.xrservice.cn',
|
||||
'X-Requested-With': 'com.tencent.mm',
|
||||
'Sec-Fetch-Site': 'same-origin',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://www.xrservice.cn/rayo-gz-fes-h5/',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'
|
||||
},
|
||||
data: JSON.stringify({})
|
||||
};
|
||||
let { data: result } = await Request(config);
|
||||
result?.code == 200 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result));
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
throw error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
294
脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js
Normal file
294
脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js
Normal file
@@ -0,0 +1,294 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/xinxi.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/xinxi.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/xinxi.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 97216722edf50cf917686fcbc51d42b0f4a87165b6eeac508fa3ba0573156830
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 心喜 小程序
|
||||
cron: 30 7 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
心喜小程序:目前没有库存 喜欢玩的就玩吧
|
||||
抓api.xinc818.com 请求头的sso 多账户&或换行
|
||||
变量名 xinxi
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("心喜小程序");
|
||||
let ckName = `xinxi`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.posts = []
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.userInfo()
|
||||
await this.tasklist()
|
||||
}
|
||||
|
||||
generateMd5Signature = function (e) {
|
||||
var crypto = require("crypto");
|
||||
|
||||
var t = Object.keys(e).sort().map((function (t) {
|
||||
return t + "=" + e[t]
|
||||
}
|
||||
)).join("&");
|
||||
return crypto.createHash("md5").update(t).digest("hex")
|
||||
}
|
||||
request(options) {
|
||||
let req_timestamp = Date.now();
|
||||
let request_id = Math.random().toString(36).substr(2, 9) + "-" + req_timestamp;
|
||||
let baseHeaders = {
|
||||
"req_timestamp": req_timestamp,
|
||||
"request_id": request_id,
|
||||
"User-Agent": defaultUserAgent,
|
||||
"sso": this.token,
|
||||
"sign": this.generateMd5Signature({ data: JSON.stringify(options.data), req_timestamp, request_id, }),
|
||||
}
|
||||
options.headers = { ...baseHeaders, ...options.headers }
|
||||
return axios.request(options)
|
||||
}
|
||||
|
||||
async userInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/user`,
|
||||
headers: {}
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 【${result.data.nickname}】积分【${result.data.integral}】🎉`)
|
||||
this.userId = result.data.id
|
||||
} else {
|
||||
console.log(`❌账号[${this.index}] 用户查询【false】`);
|
||||
console.log(result);
|
||||
}
|
||||
|
||||
}
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/sign/in?dailyTaskId=`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 签到状态【${result.data.flag}】获得积分【${result.data.integral}】🎉`)
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 签到状态【false】`);
|
||||
}
|
||||
|
||||
}
|
||||
async share() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/dailyTask/share`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 完成分享成功 获得【${result.data.singleReward}】`)
|
||||
} else {
|
||||
console.log(`❌账号[${this.index}] 完成分享失败`);
|
||||
console.log(result);
|
||||
}
|
||||
|
||||
}
|
||||
async tasklist() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/dailyTask/daily`,
|
||||
headers: {}
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
for (let task of result.data) {
|
||||
await this.getPosts()
|
||||
if (task.status == false) {
|
||||
if (task.code == 'BROWSE_PRODUCTS') {
|
||||
await this.browseGoods()
|
||||
}
|
||||
if (task.code == 'COMMENT_POSTS') {
|
||||
await this.postsComments(this.posts[0].id)
|
||||
}
|
||||
if (task.code == 'LIKE_POSTS') {
|
||||
await this.likePosts(this.posts[0].id)
|
||||
}
|
||||
if (task.code == 'FOCUS_USER') {
|
||||
await this.followUser(this.posts[0].publisherId)
|
||||
}
|
||||
if (task.code == 'WANT_GOODS') {
|
||||
await this.likeGoods()
|
||||
}
|
||||
if (task.code == 'SHARE') {
|
||||
await this.share()
|
||||
}
|
||||
//未完成
|
||||
//finishNum 已完成的数量
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 任务列表【false】`);
|
||||
}
|
||||
|
||||
}
|
||||
async browseGoods(postsId = 22) {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/dailyTask/browseGoods/` + postsId,
|
||||
headers: {},
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 【浏览商品】成功 获得积分【${result.data.singleReward}】🎉`)
|
||||
} else {
|
||||
$.log(`❌账号[${this.index}] 【浏览商品】失败`);
|
||||
console.log(result);
|
||||
}
|
||||
|
||||
}
|
||||
async postsComments(postsId) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://api.xinc818.com/mini/postsComments`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: { "content": "666", "postsId": postsId }
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 【发表评论】成功 获得积分【${result.data.singleReward}】🎉`)
|
||||
}
|
||||
}
|
||||
async getPosts() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://api.xinc818.com/mini/community/home/posts?pageNum=1&pageSize=10&queryType=3&position=2`,
|
||||
headers: {}
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
this.posts = result.data.list
|
||||
|
||||
}
|
||||
}
|
||||
async likePosts() {
|
||||
//找到posts里面liked为false的
|
||||
let posts = this.posts.filter(item => item.liked == false)
|
||||
|
||||
let options = {
|
||||
method: 'PUT',
|
||||
url: `https://api.xinc818.com/mini/posts/like`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: { "postsId": posts, "decision": true }
|
||||
|
||||
};
|
||||
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
console.log(result);
|
||||
|
||||
$.log(`✅账号[${this.index}] 【点赞帖子】成功 获得积分【${result.data.singleReward}】🎉`)
|
||||
}
|
||||
}
|
||||
|
||||
async followUser(postsId) {
|
||||
let options = {
|
||||
method: 'PUT',
|
||||
url: `https://api.xinc818.com/mini/user/follow`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: { "postsId": postsId, "decision": true }
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 【关注用户】成功 获得积分【${result.data.singleReward}】🎉`)
|
||||
}
|
||||
}
|
||||
async likeGoods(goodsId) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://api.xinc818.com/mini/live/likeLiveItem`,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: { "isLike": true, "dailyTaskId": 20, "productId": "" + goodsId }
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`✅账号[${this.index}] 【点赞商品】成功 获得积分【${result.data.singleReward}】🎉`)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
581
脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js
Normal file
581
脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js
Normal file
@@ -0,0 +1,581 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%85%95%E6%80%9D.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%85%95%E6%80%9D.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 慕思.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 3ee7b04e8bd10005837a4a9d2f2108fe22c21a288ff2eb9774750c652c0c283f
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/**
|
||||
* 慕思
|
||||
* const $ = new Env("慕思");
|
||||
* cron 10 6,15 * * * 慕思.js
|
||||
* 活动入口:https://pic.imgdb.cn/item/64eaffc4661c6c8e54806be6.jpg
|
||||
* Author by Huansheng1
|
||||
* ========= 青龙--配置文件 ===========
|
||||
* # 项目名称
|
||||
* export mshy='api_token#openId'
|
||||
* 自己抓包 请求头里的 api_token,请求包里的 openId
|
||||
* 抓包后不要打开小程序避免刷新了token,有效期待测试,如出现 “Token有误” 则是 token过期了请重新抓取
|
||||
* 多账号可用 换行、&、@ 符号隔开,支持新建多个同名环境变量来设置多账号
|
||||
* 奖励:签到每天得积分,积分兑换实物
|
||||
* ====================================
|
||||
*/
|
||||
const $ = new Env("慕思");
|
||||
const utils = require("./utils")
|
||||
let envParams = 'mshy';
|
||||
|
||||
let envSplitor = ['\n', '@', '&']
|
||||
|
||||
let processEnvParams = ($.isNode() ? process.env[envParams] : $.getdata(envParams)) || '';
|
||||
|
||||
let initedJobForTokens = []
|
||||
let currentUserIndex = 0
|
||||
|
||||
class JobTask {
|
||||
constructor(str) {
|
||||
this.requestUA = generateRandomUA();
|
||||
this.index = ++currentUserIndex
|
||||
this.valid = false;
|
||||
try {
|
||||
[this.activedAuthToken, this.openId] = str;
|
||||
} catch (error) {
|
||||
console.log('参数不完整:自己抓包 请求头里的 api_token,请求包里的 openId')
|
||||
}
|
||||
}
|
||||
|
||||
async taskApi (fn, method, url, body, moreHeaders = {}) {
|
||||
let result = null
|
||||
try {
|
||||
let urlObject = {
|
||||
url: url,
|
||||
headers: {
|
||||
'Accept': '*/*',
|
||||
'Accept-Language': 'zh-CN,zh',
|
||||
'Connection': 'keep-alive',
|
||||
'Host': 'atom.musiyoujia.com',
|
||||
'Referer': 'https://servicewechat.com/wx03527497c5369a2c/94/page-frame.html',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': this.requestUA || '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 XWEB/8379',
|
||||
'api_client_code': '65',
|
||||
'api_token': this.activedAuthToken,
|
||||
'api_version': '1.0.0',
|
||||
'xweb_xhr': '1',
|
||||
'Content-Type': 'application/json',
|
||||
...moreHeaders
|
||||
},
|
||||
timeout: 60000,
|
||||
}
|
||||
if (this.requestUA) {
|
||||
urlObject.headers['User-Agent'] = this.requestUA
|
||||
}
|
||||
if (body) {
|
||||
urlObject.body = body
|
||||
// urlObject.headers['Content-Length'] = body?.length
|
||||
}
|
||||
// console.log('urlObject:', urlObject);
|
||||
await httpRequest(method, urlObject).then(async (ret) => {
|
||||
if (ret.resp?.statusCode == 200) {
|
||||
if (ret.resp?.body) {
|
||||
result = JSON.parse(ret.resp.body)
|
||||
} else {
|
||||
console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回为空`)
|
||||
}
|
||||
} else {
|
||||
console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回状态码[${ret.resp?.statusCode || ''}]`, '返回结果:', ret.resp?.body || ret?.err)
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
} finally {
|
||||
return Promise.resolve(result);
|
||||
}
|
||||
}
|
||||
|
||||
async GetUserInfo () {
|
||||
try {
|
||||
let fn = 'GetUserInfo'
|
||||
let method = 'post'
|
||||
let url = `https://atom.musiyoujia.com/member/wechatlogin/selectuserinfo`;
|
||||
const timestamp = new Date().getTime();
|
||||
let moreHeaders = {
|
||||
'api_timestamp': timestamp,
|
||||
'api_sign': utils?.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
}
|
||||
let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","openId":"${this.openId}"}`;
|
||||
await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => {
|
||||
if (result?.msg === "success") {
|
||||
this.valid = true;
|
||||
this.customId = result?.data.resMemberInfo.memberId;
|
||||
console.log(`账号[${this.index}] 查询个人信息成功,积分:${result?.data?.memberInfo?.pointInfo?.point}`)
|
||||
} else {
|
||||
console.log(`账号[${this.index}] 查询个人信息失败:${result?.msg || JSON.stringify(result)}`)
|
||||
this.valid = false
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
async GetJob () {
|
||||
try {
|
||||
let fn = 'GetJob'
|
||||
let method = 'post'
|
||||
let url = `https://atom.musiyoujia.com/member/memberbehavior/getBehaviorInfos`;
|
||||
let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","behaviorIds":[1,2,10203,10204,10205,5],"sourceChannel":"会员小程序","source":"${this.customId}","openId":"${this.openId}"}`;
|
||||
const timestamp = new Date().getTime();
|
||||
let moreHeaders = {
|
||||
'api_timestamp': timestamp,
|
||||
'api_sign': utils?.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
}
|
||||
await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => {
|
||||
if (result?.msg === "success") {
|
||||
this.isSigned = result?.data[0].acts['每天已获得积分次数'] === 1;
|
||||
console.log(`账号[${this.index}] 获取任务列表成功,${this.isSigned ? '已签到' : '未签到'}`)
|
||||
} else {
|
||||
console.log(`账号[${this.index}] 获取任务列表失败:${result?.msg || JSON.stringify(result)}`)
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
async Sign () {
|
||||
try {
|
||||
let fn = 'Sign'
|
||||
let method = 'post'
|
||||
let url = `https://atom.musiyoujia.com/member/memberbehavior/add`;
|
||||
const currentDate = new Date();
|
||||
const year = currentDate.getFullYear();
|
||||
const month = currentDate.getMonth() + 1;
|
||||
const day = currentDate.getDate();
|
||||
let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","osType":"windows","model":"microsoft","browser":"微信小程序","platform":"1","sourceType":"5","sourceChannel":"会员小程序","siteId":"","visitorId":"","deviceId":"","spotId":"","campaignId":"","deviceType":"","eventLabel":"","eventValue":"","eventAttr2":"${`${year}.${month}.${day}`}","eventAttr3":"","eventAttr4":"","eventAttr5":"","eventAttr6":"","googleCampaignName":"","googleCampaignSource":"","googleCampaignMedium":"","googleCampaignContent":"","memberType":"DeRUCCI","customId":"${this.customId}","locationUrl":"/pages/user/signIn","url":"/pages/user/signIn","pageTitle":"每日签到","logType":"event","behaviorIds":[1,3],"eventCategory":"用户签到","eventAction":"签到","eventAttr1":2,"openId":"${this.openId}"}`;
|
||||
const timestamp = new Date().getTime();
|
||||
let moreHeaders = {
|
||||
'api_timestamp': timestamp,
|
||||
'api_sign': utils?.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
}
|
||||
await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => {
|
||||
if (result?.msg === "success") {
|
||||
console.log(`账号[${this.index}] 签到成功,获得积分:${result?.data?.point}`)
|
||||
} else {
|
||||
console.log(`账号[${this.index}] 签到失败:${result?.msg || JSON.stringify(result)}`)
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
async doTask () {
|
||||
try {
|
||||
console.log(`\n============= 账号[${this.index}] 开始获取任务=============`);
|
||||
await this.GetJob();
|
||||
if (!this.isSigned) {
|
||||
console.log(`\n============= 账号[${this.index}] 开始执行 签到任务=============`);
|
||||
await this.Sign();
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
if (typeof $request !== "undefined") {
|
||||
await GetRewrite()
|
||||
} else {
|
||||
if (!(await checkEnv())) return;
|
||||
|
||||
console.log('\n================ 开始执行 ================')
|
||||
for (let user of initedJobForTokens) {
|
||||
console.log(`----------- 执行 第 [${user.index}] 个账号 -----------`)
|
||||
await user.GetUserInfo();
|
||||
}
|
||||
|
||||
let validUserList = initedJobForTokens.filter(x => x.valid)
|
||||
|
||||
if (initedJobForTokens.length > 0) {
|
||||
console.log('\n================ 任务队列构建完毕 ================')
|
||||
for (let user of initedJobForTokens) {
|
||||
console.log(`----------- 账号[${user.index}] -----------`)
|
||||
await user.doTask();
|
||||
}
|
||||
} else {
|
||||
console.log('\n====幻生提示:无可用账号,请检查配置============ 任务结束 ================')
|
||||
}
|
||||
|
||||
await $.showmsg();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done())
|
||||
|
||||
async function GetRewrite () {
|
||||
}
|
||||
|
||||
async function checkEnv () {
|
||||
if (processEnvParams) {
|
||||
let splitor = envSplitor[0];
|
||||
for (let sp of envSplitor) {
|
||||
if (processEnvParams.indexOf(sp) > -1) {
|
||||
splitor = sp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let token of processEnvParams.split(splitor)) {
|
||||
if (token) initedJobForTokens.push(new JobTask(token?.split('#')))
|
||||
}
|
||||
userCount = initedJobForTokens.length
|
||||
} else {
|
||||
console.log('未找到 配置信息,请检查是否配置 变量:', envParams)
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`共找到${userCount}个账号`)
|
||||
return true
|
||||
}
|
||||
|
||||
function generateRandomUA () {
|
||||
var androidVersion = Math.floor(Math.random() * 6) + 8; // 生成 Android 版本号 8-13 之间的随机数
|
||||
var androidModels = [
|
||||
"PBBM00", "SM-G975F", "Pixel 4", "OnePlus 7T", "Redmi Note 8 Pro",
|
||||
"iPhone X", "Galaxy S10", "Huawei P30 Pro", "LG G8 ThinQ", "Sony Xperia 1",
|
||||
"Moto G7", "Nokia 9 PureView", "Xiaomi Mi 9", "Google Pixel 3a", "OnePlus 6T",
|
||||
"Redmi Note 7", "Samsung Galaxy A50", "Huawei Mate 20 Pro", "LG V40 ThinQ", "Sony Xperia XZ3",
|
||||
"Moto Z4", "Nokia 7.1", "Xiaomi Mi Mix 3", "Google Pixel 2", "OnePlus 5T",
|
||||
"Redmi Note 6 Pro", "Samsung Galaxy A70", "Huawei P20 Pro", "LG G7 ThinQ", "Sony Xperia XZ2",
|
||||
"Moto G6", "Nokia 6.1", "Xiaomi Mi 8", "Google Pixel", "OnePlus 5",
|
||||
"Redmi Note 5 Pro", "Samsung Galaxy A30", "Huawei Mate 10 Pro", "LG V30", "Sony Xperia XZ1",
|
||||
"Moto X4", "Nokia 5.1", "Xiaomi Mi 6", "Google Pixel XL", "OnePlus 3T",
|
||||
"Redmi Note 4", "Samsung Galaxy A20", "Huawei P10 Plus", "LG G6", "Sony Xperia XZ",
|
||||
"Moto G5 Plus", "Nokia 3.1", "Xiaomi Mi 5", "Google Pixel 3", "OnePlus 3",
|
||||
"Redmi Note 3", "Samsung Galaxy A10", "Huawei Mate 9", "LG V20", "Sony Xperia X Compact",
|
||||
"Moto G4", "Nokia 2.2", "Xiaomi Mi 4", "Google Pixel 2 XL", "OnePlus 2",
|
||||
"Redmi Note 2", "Samsung Galaxy A5", "Huawei P9", "LG G5", "Sony Xperia X",
|
||||
"Moto E6", "Nokia 1", "Xiaomi Mi 3", "Google Pixel 4", "OnePlus One",
|
||||
"Redmi Note", "Samsung Galaxy A3", "Huawei P8", "LG G4", "Sony Xperia Z5",
|
||||
"Moto E5", "Nokia 3310", "Xiaomi Mi 2", "Google Pixel 4 XL", "OnePlus Nord"
|
||||
]; // 常见的手机型号
|
||||
|
||||
var chromeVersion = "Chrome/" + (Math.floor(Math.random() * 30) + 50) + ".0." + (Math.floor(Math.random() * 1000) + 100); // 生成 Chrome 版本号 50.0.100-79.0.999 之间的随机数
|
||||
|
||||
var ua = "Mozilla/5.0 (Linux; Android " + androidVersion + "; " + androidModels[Math.floor(Math.random() * androidModels.length)] + " Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 " + chromeVersion + " Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app";
|
||||
|
||||
return ua;
|
||||
}
|
||||
|
||||
// 无参数加密:请求地址+时间戳+A749380BBD5A4D93B55B4BE245A42988+Token
|
||||
// 示例数据:https://api.ikbang.cn/v2/iclick-new/signIn/sign1692923683034A749380BBD5A4D93B55B4BE245A4298839D21A3B3EFF817154C47470BF13E62CF05F956446D53C359688A094E91A9B1F2A67065862923551F147C32E3AFAF778
|
||||
// 如果请求URL有参数则是 在时间戳 和 盐 之间增加 stringify后的参数(POST)
|
||||
|
||||
async function httpRequest (method, url) {
|
||||
httpErr = null, httpReq = null, httpResp = null;
|
||||
return new Promise((resolve) => {
|
||||
$.send(method, url, async (err, req, resp) => {
|
||||
httpErr = err, httpReq = req, httpResp = resp;
|
||||
resolve({ err, req, resp })
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function Env (name, env) {
|
||||
"undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0);
|
||||
return new class {
|
||||
constructor(name, env) {
|
||||
this.name = name
|
||||
this.notifyStr = ''
|
||||
this.startTime = (new Date).getTime()
|
||||
Object.assign(this, env)
|
||||
console.log(`${this.name} 开始运行:\n`)
|
||||
}
|
||||
isNode () {
|
||||
return "undefined" != typeof module && !!module.exports
|
||||
}
|
||||
isQuanX () {
|
||||
return "undefined" != typeof $task
|
||||
}
|
||||
isSurge () {
|
||||
return "undefined" != typeof $httpClient && "undefined" == typeof $loon
|
||||
}
|
||||
isLoon () {
|
||||
return "undefined" != typeof $loon
|
||||
}
|
||||
getdata (t) {
|
||||
let e = this.getval(t);
|
||||
if (/^@/.test(t)) {
|
||||
const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t),
|
||||
r = s ? this.getval(s) : "";
|
||||
if (r)
|
||||
try {
|
||||
const t = JSON.parse(r);
|
||||
e = t ? this.lodash_get(t, i, "") : e
|
||||
} catch (t) {
|
||||
e = ""
|
||||
}
|
||||
}
|
||||
return e
|
||||
}
|
||||
setdata (t, e) {
|
||||
let s = !1;
|
||||
if (/^@/.test(e)) {
|
||||
const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e),
|
||||
o = this.getval(i),
|
||||
h = i ? "null" === o ? null : o || "{}" : "{}";
|
||||
try {
|
||||
const e = JSON.parse(h);
|
||||
this.lodash_set(e, r, t),
|
||||
s = this.setval(JSON.stringify(e), i)
|
||||
} catch (e) {
|
||||
const o = {};
|
||||
this.lodash_set(o, r, t),
|
||||
s = this.setval(JSON.stringify(o), i)
|
||||
}
|
||||
}
|
||||
else {
|
||||
s = this.setval(t, e);
|
||||
}
|
||||
return s
|
||||
}
|
||||
getval (t) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null
|
||||
}
|
||||
setval (t, e) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null
|
||||
}
|
||||
send (m, t, e = (() => { })) {
|
||||
if (m != 'get' && m != 'post' && m != 'put' && m != 'delete') {
|
||||
console.log(`无效的http方法:${m}`);
|
||||
return;
|
||||
}
|
||||
if (m == 'get' && t.headers) {
|
||||
delete t.headers["Content-Type"];
|
||||
delete t.headers["Content-Length"];
|
||||
} else if (t.body && t.headers) {
|
||||
if (!t.headers["Content-Type"]) t.headers["Content-Type"] = "application/x-www-form-urlencoded";
|
||||
}
|
||||
if (this.isSurge() || this.isLoon()) {
|
||||
if (this.isSurge() && this.isNeedRewrite) {
|
||||
t.headers = t.headers || {};
|
||||
Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 });
|
||||
}
|
||||
let conf = {
|
||||
method: m,
|
||||
url: t.url,
|
||||
headers: t.headers,
|
||||
timeout: t.timeout,
|
||||
data: t.body
|
||||
};
|
||||
if (m == 'get') delete conf.data
|
||||
$axios(conf).then(t => {
|
||||
const {
|
||||
status: i,
|
||||
request: q,
|
||||
headers: r,
|
||||
data: o
|
||||
} = t;
|
||||
e(null, q, {
|
||||
statusCode: i,
|
||||
headers: r,
|
||||
body: o
|
||||
});
|
||||
}).catch(err => console.log(err))
|
||||
} else if (this.isQuanX()) {
|
||||
t.method = m.toUpperCase(), this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {
|
||||
hints: !1
|
||||
})),
|
||||
$task.fetch(t).then(t => {
|
||||
const {
|
||||
statusCode: i,
|
||||
request: q,
|
||||
headers: r,
|
||||
body: o
|
||||
} = t;
|
||||
e(null, q, {
|
||||
statusCode: i,
|
||||
headers: r,
|
||||
body: o
|
||||
})
|
||||
}, t => e(t))
|
||||
} else if (this.isNode()) {
|
||||
this.got = this.got ? this.got : require("got");
|
||||
const {
|
||||
url: s,
|
||||
...i
|
||||
} = t;
|
||||
this.instance = this.got.extend({
|
||||
followRedirect: false
|
||||
});
|
||||
this.instance[m](s, i).then(t => {
|
||||
const {
|
||||
statusCode: i,
|
||||
request: q,
|
||||
headers: r,
|
||||
body: o
|
||||
} = t;
|
||||
e(null, q, {
|
||||
statusCode: i,
|
||||
headers: r,
|
||||
body: o
|
||||
})
|
||||
}, t => {
|
||||
const {
|
||||
message: s,
|
||||
request: q,
|
||||
response: i
|
||||
} = t;
|
||||
e(s, q, i)
|
||||
})
|
||||
}
|
||||
}
|
||||
time (t, x = null) {
|
||||
let xt = x ? new Date(x) : new Date
|
||||
let e = {
|
||||
"M+": xt.getMonth() + 1,
|
||||
"d+": xt.getDate(),
|
||||
"h+": xt.getHours(),
|
||||
"m+": xt.getMinutes(),
|
||||
"s+": xt.getSeconds(),
|
||||
"q+": Math.floor((xt.getMonth() + 3) / 3),
|
||||
S: xt.getMilliseconds()
|
||||
};
|
||||
/(y+)/.test(t) && (t = t.replace(RegExp.$1, (xt.getFullYear() + "").substr(4 - RegExp.$1.length)));
|
||||
for (let s in e)
|
||||
new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).length)));
|
||||
return t
|
||||
}
|
||||
async showmsg () {
|
||||
if (!this.notifyStr) return;
|
||||
let notifyBody = this.name + " 运行通知\n\n" + this.notifyStr
|
||||
if ($.isNode()) {
|
||||
var notify = require('./sendNotify');
|
||||
console.log('\n============== 推送 ==============')
|
||||
await notify.sendNotify(this.name, notifyBody);
|
||||
} else {
|
||||
this.msg(notifyBody);
|
||||
}
|
||||
}
|
||||
logAndNotify (str) {
|
||||
console.log(str)
|
||||
this.notifyStr += str
|
||||
this.notifyStr += '\n'
|
||||
}
|
||||
logAndNotifyWithTime (str) {
|
||||
let t = '[' + this.time('hh:mm:ss.S') + ']' + str
|
||||
console.log(t)
|
||||
this.notifyStr += t
|
||||
this.notifyStr += '\n'
|
||||
}
|
||||
logWithTime (str) {
|
||||
console.log('[' + this.time('hh:mm:ss.S') + ']' + str)
|
||||
}
|
||||
msg (e = t, s = "", i = "", r) {
|
||||
const o = t => {
|
||||
if (!t)
|
||||
return t;
|
||||
if ("string" == typeof t)
|
||||
return this.isLoon() ? t : this.isQuanX() ? {
|
||||
"open-url": t
|
||||
}
|
||||
: this.isSurge() ? {
|
||||
url: t
|
||||
}
|
||||
: void 0;
|
||||
if ("object" == typeof t) {
|
||||
if (this.isLoon()) {
|
||||
let e = t.openUrl || t.url || t["open-url"],
|
||||
s = t.mediaUrl || t["media-url"];
|
||||
return {
|
||||
openUrl: e,
|
||||
mediaUrl: s
|
||||
}
|
||||
}
|
||||
if (this.isQuanX()) {
|
||||
let e = t["open-url"] || t.url || t.openUrl,
|
||||
s = t["media-url"] || t.mediaUrl;
|
||||
return {
|
||||
"open-url": e,
|
||||
"media-url": s
|
||||
}
|
||||
}
|
||||
if (this.isSurge()) {
|
||||
let e = t.url || t.openUrl || t["open-url"];
|
||||
return {
|
||||
url: e
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r)));
|
||||
let h = ["", "============== 系统通知 =============="];
|
||||
h.push(e),
|
||||
s && h.push(s),
|
||||
i && h.push(i),
|
||||
console.log(h.join("\n"))
|
||||
}
|
||||
getMin (a, b) {
|
||||
return ((a < b) ? a : b)
|
||||
}
|
||||
getMax (a, b) {
|
||||
return ((a < b) ? b : a)
|
||||
}
|
||||
padStr (num, length, padding = '0') {
|
||||
let numStr = String(num)
|
||||
let numPad = (length > numStr.length) ? (length - numStr.length) : 0
|
||||
let retStr = ''
|
||||
for (let i = 0; i < numPad; i++) {
|
||||
retStr += padding
|
||||
}
|
||||
retStr += numStr
|
||||
return retStr;
|
||||
}
|
||||
json2str (obj, c, encodeUrl = false) {
|
||||
let ret = []
|
||||
for (let keys of Object.keys(obj).sort()) {
|
||||
let v = obj[keys]
|
||||
if (v && encodeUrl) v = encodeURIComponent(v)
|
||||
ret.push(keys + '=' + v)
|
||||
}
|
||||
return ret.join(c);
|
||||
}
|
||||
str2json (str, decodeUrl = false) {
|
||||
let ret = {}
|
||||
for (let item of str.split('&')) {
|
||||
if (!item) continue;
|
||||
let idx = item.indexOf('=')
|
||||
if (idx == -1) continue;
|
||||
let k = item.substr(0, idx)
|
||||
let v = item.substr(idx + 1)
|
||||
if (decodeUrl) v = decodeURIComponent(v)
|
||||
ret[k] = v
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
randomString (len, charset = 'abcdef0123456789') {
|
||||
let str = '';
|
||||
for (let i = 0; i < len; i++) {
|
||||
str += charset.charAt(Math.floor(Math.random() * charset.length));
|
||||
}
|
||||
return str;
|
||||
}
|
||||
randomList (a) {
|
||||
let idx = Math.floor(Math.random() * a.length)
|
||||
return a[idx]
|
||||
}
|
||||
wait (t) {
|
||||
return new Promise(e => setTimeout(e, t))
|
||||
}
|
||||
done (t = {}) {
|
||||
const e = (new Date).getTime(),
|
||||
s = (e - this.startTime) / 1e3;
|
||||
console.log(`\n${this.name} 运行结束,共运行了 ${s} 秒!`)
|
||||
if (this.isSurge() || this.isQuanX() || this.isLoon()) $done(t)
|
||||
}
|
||||
}(name, env)
|
||||
}
|
||||
266
脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js
Normal file
266
脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js
Normal file
@@ -0,0 +1,266 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/musi.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/musi.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/musi.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 42ce9bc08cbded73578a5fe72b5aab0010573d1d627a78d13241fc35d8c0599c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
慕斯小程序签到
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:musi
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("慕斯小程序签到");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `musi`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wx03527497c5369a2c',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.activedAuthToken = null
|
||||
this.wcsid = this.user[0]
|
||||
this.openId = null
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.activedAuthToken) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
|
||||
await this.getUserInfo()
|
||||
await this.getJob()
|
||||
if (!this.isSigned) {
|
||||
await this.doSign()
|
||||
}
|
||||
}
|
||||
async getUserToken(code) {
|
||||
const timestamp = new Date().getTime();
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://atom.musiyoujia.com/user/wechatlogin/applets`,
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'User-Agent': defaultUserAgent,
|
||||
"api_client_code": "65",
|
||||
"api_version": "1.0.0",
|
||||
'api_timestamp': timestamp,
|
||||
'api_token': '',
|
||||
|
||||
'api_sign': this.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
|
||||
}
|
||||
,
|
||||
data:
|
||||
{
|
||||
'appId': 'wx03527497c5369a2c',
|
||||
'appType': 'WECHAT_MINI_PROGRAM',
|
||||
'code': '' + code,
|
||||
'systemCode': '65'
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '0') {
|
||||
this.openId = result.data.openId
|
||||
this.activedAuthToken = result.data.token
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.activedAuthToken}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
MD5_Encrypt(str) {
|
||||
const crypto = require("crypto")
|
||||
return crypto.createHash('md5').update(str).digest('hex');
|
||||
}
|
||||
async getUserInfo() {
|
||||
try {
|
||||
const timestamp = new Date().getTime();
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://atom.musiyoujia.com/member/wechatlogin/selectuserinfo`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': defaultUserAgent,
|
||||
"api_client_code": "65",
|
||||
"api_version": "1.0.0",
|
||||
'api_timestamp': timestamp,
|
||||
'api_token': this.activedAuthToken,
|
||||
|
||||
'api_sign': this.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
|
||||
},
|
||||
data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "openId": `${this.openId}` }
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
|
||||
|
||||
if (result?.msg === "success") {
|
||||
this.valid = true;
|
||||
this.customId = result?.data.resMemberInfo.memberId;
|
||||
$.log(`账号[${this.index}] 查询个人信息成功,积分:${result?.data?.memberInfo?.pointInfo?.point}`)
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 查询个人信息失败:${result?.msg || JSON.stringify(result)}`)
|
||||
this.valid = false
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
async getJob() {
|
||||
try {
|
||||
const timestamp = new Date().getTime();
|
||||
let options = {
|
||||
method: "POST",
|
||||
url: `https://atom.musiyoujia.com/member/memberbehavior/getBehaviorInfos`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': defaultUserAgent,
|
||||
"api_client_code": "65",
|
||||
"api_version": "1.0.0",
|
||||
'api_token': this.activedAuthToken,
|
||||
|
||||
'api_timestamp': timestamp,
|
||||
'api_sign': this.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
|
||||
},
|
||||
data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "behaviorIds": [1, 2, 10203, 10204, 10205, 5], "sourceChannel": "会员小程序", "source": `${this.customId}`, "openId": `${this.openId}` }
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
|
||||
if (result?.msg === "success") {
|
||||
this.isSigned = result?.data[0].acts['每天已获得积分次数'] === 1;
|
||||
$.log(`账号[${this.index}] 获取任务列表成功,${this.isSigned ? '已签到' : '未签到'}`)
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 获取任务列表失败:${result?.msg || JSON.stringify(result)}`)
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
async doSign() {
|
||||
try {
|
||||
const timestamp = new Date().getTime();
|
||||
const eventAttr2 = $.time('yyyy.MM.dd')
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://atom.musiyoujia.com/member/memberbehavior/add`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': defaultUserAgent,
|
||||
"api_client_code": "65",
|
||||
'api_token': this.activedAuthToken,
|
||||
"api_version": "1.0.0",
|
||||
'api_timestamp': timestamp,
|
||||
'api_sign': this.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase()
|
||||
|
||||
},
|
||||
data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "osType": "windows", "model": "microsoft", "browser": "微信小程序", "platform": "1", "sourceType": "5", "sourceChannel": "会员小程序", "siteId": "", "visitorId": "", "deviceId": "", "spotId": "", "campaignId": "", "deviceType": "", "eventLabel": "", "eventValue": "", "eventAttr2": `${eventAttr2}`, "eventAttr3": "", "eventAttr4": "", "eventAttr5": "", "eventAttr6": "", "googleCampaignName": "", "googleCampaignSource": "", "googleCampaignMedium": "", "googleCampaignContent": "", "memberType": "DeRUCCI", "customId": `${this.customId}`, "locationUrl": "/pages/user/signIn", "url": "/pages/user/signIn", "pageTitle": "每日签到", "logType": "event", "behaviorIds": [1, 3], "eventCategory": "用户签到", "eventAction": "签到", "eventAttr1": 2, "openId": `${this.openId}` }
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
|
||||
if (result?.msg === "success") {
|
||||
$.log(`账号[${this.index}] 签到成功,获得积分:${result?.data?.point}`)
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 签到失败:${result?.msg || JSON.stringify(result)}`)
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
227
脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js
Normal file
227
脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js
Normal file
@@ -0,0 +1,227 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 所有女生小程序.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: a6033b11f7c454dfe0d05787297d516e942a4777e10bf3258940fd1b548666c5
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn 860562056
|
||||
@Date: 2024.06.10 14.14
|
||||
@Description: 所有女生小程序
|
||||
------------------------------------------
|
||||
变量名wawo
|
||||
变量值 https://7.wawo.cc/api/ 域名Headers请求头里面的authorization 去掉bearer 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("所有女生会员中心");
|
||||
let ckName = `wawo`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
await getPoints()
|
||||
await signInInfo()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function getPoints() {
|
||||
const config =
|
||||
{
|
||||
url: 'https://7.wawo.cc/api/score/wx/score/queryAmount',
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'authorization': 'bearer ' + $.token,
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
"referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
|
||||
"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(0x6309092b) XWEB/8555`
|
||||
|
||||
}
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
|
||||
if (result?.code == "000") {
|
||||
$.log(`账号当前积分[${result.data}]`)
|
||||
} else {
|
||||
$.log(`账号积分查询失败[${result.message}]`)
|
||||
}
|
||||
}
|
||||
async function signInInfo() {
|
||||
const config =
|
||||
{
|
||||
url: 'https://7.wawo.cc/api/activity/wx/task/sign/signMsg',
|
||||
method: "POST",
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'authorization': 'bearer ' + $.token,
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
"referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
|
||||
"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(0x6309092b) XWEB/8555`
|
||||
|
||||
},
|
||||
data: JSON.stringify({
|
||||
"cardNo": "411886986591633408"
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
|
||||
if (result?.code == "000") {
|
||||
if (result.data.signed !== 1) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await signIn()
|
||||
} else {
|
||||
$.log(`已签到 ===> 跳过签到`)
|
||||
}
|
||||
} else {
|
||||
$.log(`获取签到信息失败[${result.message}]`)
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
const config =
|
||||
{
|
||||
url: 'https://7.wawo.cc/api/activity/wx/task/sign/signIn',
|
||||
method: "POST",
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'authorization': 'bearer ' + $.token,
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
"referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
|
||||
"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(0x6309092b) XWEB/8555`
|
||||
|
||||
},
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
|
||||
if (result?.code == "000") {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败[${result.message}]`)
|
||||
}
|
||||
}
|
||||
|
||||
async function done(taskId) {
|
||||
const config =
|
||||
{
|
||||
url: 'https://7.wawo.cc/api/operate/wx/rewards/task/done?taskId=' + taskId,
|
||||
method: "POST",
|
||||
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'authorization': 'bearer ' + $.token,
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
"referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
|
||||
"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(0x6309092b) XWEB/8555`
|
||||
|
||||
},
|
||||
data: JSON.stringify({ "taskId": taskId })
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
|
||||
if (result?.code == "000") {
|
||||
$.log(`任务成功`)
|
||||
} else {
|
||||
$.log(`任务失败[${result.message}]`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
142
脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js
Normal file
142
脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js
Normal file
@@ -0,0 +1,142 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/zbs.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/zbs.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/zbs.js
|
||||
// # UploadedAt: 2026-04-09T11:12:26Z
|
||||
// # SHA256: 478003ec8662f7437e94cebaf197f25ec6f0075b14d6588b881b713a003252ba
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 植白说小程序
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名称:zbs
|
||||
值抓取https://www.kozbs.com/demo 请求头x-dts-token
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("植白说小程序");
|
||||
let ckName = `zbs`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
request(options) {
|
||||
let baseHeraders = {
|
||||
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"x-dts-token": "" + this.token,
|
||||
"xweb_xhr": "1",
|
||||
|
||||
"User-Agent": defaultUserAgent,
|
||||
}
|
||||
options.headers = Object.assign(baseHeraders, options.headers)
|
||||
return axios.request(options)
|
||||
}
|
||||
async run() {
|
||||
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: "https://www.kozbs.com/demo/wx/home/sign?userId=",
|
||||
headers: {},
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.errno == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `签到成功🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.errmsg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getPoints() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: "https://www.kozbs.com/demo/wx/user/getUserIntegral?userId=",
|
||||
headers: {},
|
||||
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.errno == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `当前积分` + `${result.data.integer}🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取积分-失败:${result.errmsg}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
586
脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py
Normal file
586
脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py
Normal file
@@ -0,0 +1,586 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 欢太商城.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 2cc34369f14bd3d325e4315947427cb7388d52cb812c3295e97f9f3b35f1cd04
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
抓包欢太商城
|
||||
在check.sample.toml文件中填写cookie和useragent
|
||||
check.sample.toml文件下载链接:https://raw.githubusercontent.com/3288588344/toulu/main/check.sample.toml
|
||||
cron: 19 5,21 * * *
|
||||
new Env('欢太商城');
|
||||
QQ频道:98do10s246
|
||||
自行安装依赖
|
||||
utils_tmp
|
||||
json
|
||||
re
|
||||
time
|
||||
requests
|
||||
"""
|
||||
|
||||
|
||||
import json
|
||||
import re
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
import utils_tmp
|
||||
from notify_mtr import send
|
||||
from utils import get_data
|
||||
|
||||
|
||||
class Heytap:
|
||||
def __init__(self, check_items):
|
||||
self.check_items = check_items
|
||||
self.client = None
|
||||
self.session = requests.session()
|
||||
self.log = ""
|
||||
self.cookies = "cookie"
|
||||
self.user_agent = "ua"
|
||||
self.s_channel = "oppostore"
|
||||
self.source_type = "505" # 初始化设置为505,会从cookie获取实际数据
|
||||
self.sa_distinct_id = ""
|
||||
self.sa_device_id = ""
|
||||
self.s_version = ""
|
||||
self.brand = "iPhone" # 初始化设置为iPhone,会从cookie获取实际机型
|
||||
self.act_task = utils_tmp.act_list # 修改为从文件获取,避免更新代码后丢失原有活动配置
|
||||
self.if_draw = False # 初始化设置为False,会从配置文件获取实际设置
|
||||
|
||||
self.accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
|
||||
self.accept_encoding1 = "gzip, deflate, br"
|
||||
self.accept_encoding2 = "gzip, deflate"
|
||||
self.client_package = "com.oppo.store"
|
||||
self.content_type1 = "application/x-www-form-urlencoded"
|
||||
self.content_type2 = "application/x-www-form-urlencoded;charset=UTF-8"
|
||||
self.host1 = "store.oppo.com"
|
||||
self.host2 = "msec.opposhop.cn"
|
||||
self.user_agent2 = "okhttp/3.12.12.200sp1"
|
||||
|
||||
self.point_got = "任务完成!积分领取+"
|
||||
self.point_err = "领取积分奖励出错!\n"
|
||||
self.done_msg = "任务已完成\n"
|
||||
self.err_msg = "错误,原因为: "
|
||||
self.amount = "amount="
|
||||
|
||||
# 获取cookie里的一些参数,部分请求需要使用到 hss修改
|
||||
def get_cookie_data(self):
|
||||
try:
|
||||
app_param = re.findall("app_param=(.*?)}", self.cookies)[0] + "}"
|
||||
app_param = json.loads(app_param)
|
||||
self.sa_device_id = app_param["sa_device_id"]
|
||||
self.brand = app_param["brand"]
|
||||
self.sa_distinct_id = re.findall("sa_distinct_id=(.*?);", self.cookies)[0]
|
||||
self.source_type = re.findall("source_type=(.*?);", self.cookies)[0]
|
||||
self.s_version = re.findall("s_version=(.*?);", self.cookies)[0]
|
||||
self.s_channel = re.findall("s_channel=(.*?);", self.cookies)[0]
|
||||
except Exception as e:
|
||||
print(
|
||||
"获取Cookie部分数据失败,将采用默认设置,请检查Cookie是否包含s_channel,s_version,source_type,sa_distinct_id\n",
|
||||
e,
|
||||
)
|
||||
self.s_channel = "ios_oppostore"
|
||||
self.source_type = "505"
|
||||
|
||||
# 获取个人信息,判断登录状态
|
||||
def get_user_info(self):
|
||||
flag = False
|
||||
headers = {
|
||||
"Host": "store.oppo.com",
|
||||
"Accept": self.accept,
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Language": "zh-cn",
|
||||
"Accept-Encoding": self.accept_encoding1,
|
||||
"cookie": self.cookies,
|
||||
}
|
||||
response = self.session.get(
|
||||
"https://store.oppo.com/cn/oapi/users/web/member/info", headers=headers
|
||||
)
|
||||
response.encoding = "utf-8"
|
||||
try:
|
||||
res = response.json()
|
||||
if res["code"] == 200:
|
||||
self.log += f'======== {res["data"]["userName"]} ========\n'
|
||||
self.log += (
|
||||
"【登录成功】:" + res["data"]["userName"] + f"\n【抽奖开关】:{self.if_draw}\n"
|
||||
)
|
||||
flag = True
|
||||
else:
|
||||
self.log += "【登录失败】:" + res["errorMessage"] + "\n"
|
||||
except Exception as e:
|
||||
self.log += f"【登录】:错误,原因为: {str(e)}" + "\n"
|
||||
|
||||
if flag:
|
||||
self.get_cookie_data()
|
||||
return self.session
|
||||
return False
|
||||
|
||||
# 任务中心列表,获取任务及任务状态
|
||||
def taskCenter(self):
|
||||
headers = {
|
||||
"Host": self.host1,
|
||||
"Accept": self.accept,
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Language": "zh-cn",
|
||||
"Accept-Encoding": self.accept_encoding1,
|
||||
"cookie": self.cookies,
|
||||
"referer": "https://store.oppo.com/cn/app/taskCenter/index",
|
||||
}
|
||||
res1 = self.client.get(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/credits/show", headers=headers
|
||||
)
|
||||
res1 = res1.json()
|
||||
return res1
|
||||
|
||||
# 每日签到
|
||||
# 位置: APP → 我的 → 签到
|
||||
def daily_bonus(self):
|
||||
try:
|
||||
dated = time.strftime("%Y-%m-%d")
|
||||
headers = {
|
||||
"Host": self.host1,
|
||||
"Accept": self.accept,
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Language": "zh-cn",
|
||||
"Accept-Encoding": self.accept_encoding1,
|
||||
"cookie": self.cookies,
|
||||
"referer": "https://store.oppo.com/cn/app/taskCenter/index",
|
||||
}
|
||||
res = self.taskCenter()
|
||||
status = res["data"]["userReportInfoForm"]["status"]
|
||||
if status == 0:
|
||||
res = res["data"]["userReportInfoForm"]["gifts"]
|
||||
for data in res:
|
||||
if data["date"] == dated:
|
||||
qd = data
|
||||
if not qd["today"]:
|
||||
data = self.amount + str(qd["credits"])
|
||||
res1 = self.client.post(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/report/immediately",
|
||||
headers=headers,
|
||||
data=data,
|
||||
)
|
||||
res1 = res1.json()
|
||||
if res1["code"] == 200:
|
||||
self.log += "【每日签到成功】:" + res1["data"]["message"] + "\n"
|
||||
else:
|
||||
self.log += f"【每日签到失败】:{res1}" + "\n"
|
||||
else:
|
||||
# print(str(qd["credits"]), str(qd["type"]), str(qd["gift"]))
|
||||
data = (
|
||||
(
|
||||
self.amount
|
||||
+ str(qd["credits"])
|
||||
+ "&type="
|
||||
+ str(qd["type"])
|
||||
+ "&gift="
|
||||
+ str(qd["gift"])
|
||||
)
|
||||
if qd["type"]
|
||||
else self.amount + str(qd["credits"])
|
||||
)
|
||||
|
||||
res1 = self.client.post(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/report/immediately",
|
||||
headers=headers,
|
||||
data=data,
|
||||
)
|
||||
res1 = res1.json()
|
||||
if res1["code"] == 200:
|
||||
self.log += "【每日签到成功】:" + res1["data"]["message"] + "\n"
|
||||
else:
|
||||
self.log += f"【每日签到失败】:{str(res1)}" + "\n"
|
||||
else:
|
||||
self.log += "【每日签到】:已经签到过了!\n"
|
||||
time.sleep(1)
|
||||
except Exception as e:
|
||||
self.log += f"【每日签到】:错误,原因为: {str(e)}" + "\n"
|
||||
|
||||
# 浏览商品 10个sku +20 分
|
||||
# 位置: APP → 我的 → 签到 → 每日任务 → 浏览商品
|
||||
def daily_viewgoods(self):
|
||||
self.log += "【每日浏览商品】\n"
|
||||
try:
|
||||
headers = {
|
||||
"clientPackage": self.client_package,
|
||||
"Host": self.host2,
|
||||
"Accept": self.accept,
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent2,
|
||||
"Accept-Encoding": "gzip",
|
||||
"cookie": self.cookies,
|
||||
}
|
||||
res = self.taskCenter()
|
||||
res = res["data"]["everydayList"]
|
||||
for data in res:
|
||||
if data["name"] == "浏览商品":
|
||||
if data["completeStatus"] == 0:
|
||||
# 原链接貌似获取不到商品id,更换一个 原链接https://msec.opposhop.cn/goods/v1/SeckillRound/goods/3016?pageSize=12¤tPage=1
|
||||
shoplist = self.client.get(
|
||||
"https://msec.opposhop.cn/goods/v1/products/010239"
|
||||
)
|
||||
res = shoplist.json()
|
||||
if res["meta"]["code"] == 200:
|
||||
i = 0
|
||||
for skuinfo in res["details"][0]["infos"]:
|
||||
skuid = skuinfo["skuId"]
|
||||
self.client.get(
|
||||
"https://msec.opposhop.cn/goods/v1/info/sku?skuId="
|
||||
+ str(skuid),
|
||||
headers=headers,
|
||||
)
|
||||
i += 1
|
||||
if i > 10:
|
||||
break
|
||||
time.sleep(7)
|
||||
res2 = self.cashingCredits(
|
||||
data["marking"], data["type"], data["credits"]
|
||||
)
|
||||
if res2:
|
||||
self.log += self.point_got + str(data["credits"]) + "\n"
|
||||
else:
|
||||
self.log += self.point_err
|
||||
else:
|
||||
self.log += "错误,获取商品列表失败\n"
|
||||
elif data["completeStatus"] == 1:
|
||||
res2 = self.cashingCredits(
|
||||
data["marking"], data["type"], data["credits"]
|
||||
)
|
||||
if res2:
|
||||
self.log += self.point_got + str(data["credits"]) + "\n"
|
||||
else:
|
||||
self.log += self.point_err
|
||||
else:
|
||||
self.log += self.done_msg
|
||||
except Exception as e:
|
||||
self.log += self.err_msg + str(e) + "\n"
|
||||
|
||||
def daily_sharegoods(self):
|
||||
self.log += "【每日分享商品】\n"
|
||||
try:
|
||||
headers = {
|
||||
"clientPackage": self.client_package,
|
||||
"Host": self.host2,
|
||||
"Accept": self.accept,
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent2,
|
||||
"Accept-Encoding": "gzip",
|
||||
"cookie": self.cookies,
|
||||
}
|
||||
daysignlist = self.taskCenter()
|
||||
res = daysignlist
|
||||
res = res["data"]["everydayList"]
|
||||
for data in res:
|
||||
if data["name"] == "分享商品到微信":
|
||||
qd = data
|
||||
if qd["completeStatus"] == 0:
|
||||
count = qd["readCount"]
|
||||
endcount = qd["times"]
|
||||
while count <= endcount:
|
||||
self.client.get(
|
||||
"https://msec.opposhop.cn/users/vi/creditsTask/pushTask?marking=daily_sharegoods",
|
||||
headers=headers,
|
||||
)
|
||||
count += 1
|
||||
res2 = self.cashingCredits(qd["marking"], qd["type"], qd["credits"])
|
||||
if res2:
|
||||
self.log += self.point_got + str(qd["credits"]) + "\n"
|
||||
else:
|
||||
self.log += self.point_err
|
||||
elif qd["completeStatus"] == 1:
|
||||
res2 = self.cashingCredits(qd["marking"], qd["type"], qd["credits"])
|
||||
if res2:
|
||||
self.log += self.point_got + str(qd["credits"]) + "\n"
|
||||
else:
|
||||
self.log += self.point_err
|
||||
else:
|
||||
self.log += self.done_msg
|
||||
except Exception as e:
|
||||
self.log += self.err_msg + str(e) + "\n"
|
||||
|
||||
# 执行完成任务领取奖励
|
||||
def cashingCredits(self, info_marking, info_type, info_credits):
|
||||
data = f"marking={str(info_marking)}&type={str(info_type)}&amount={str(info_credits)}"
|
||||
|
||||
headers = {
|
||||
"Host": self.host1,
|
||||
"clientPackage": self.client_package,
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Content-Type": self.content_type1,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Language": "zh-cn",
|
||||
"Accept-Encoding": self.accept_encoding1,
|
||||
"cookie": self.cookies,
|
||||
"Origin": "https://store.oppo.com",
|
||||
"X-Requested-With": self.client_package,
|
||||
"referer": "https://store.oppo.com/cn/app/taskCenter/index?us=gerenzhongxin&um=hudongleyuan&uc=renwuzhongxin",
|
||||
}
|
||||
|
||||
res = self.client.post(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/credits/cashingCredits",
|
||||
data=data,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
res = res.json()
|
||||
|
||||
return res["code"] == 200
|
||||
|
||||
# 活动平台抽奖通用接口
|
||||
def lottery(self, datas, referer="", extra_draw_cookie=""):
|
||||
|
||||
headers = {
|
||||
"Host": "hd.oppo.com",
|
||||
"User-Agent": self.user_agent,
|
||||
"Cookie": extra_draw_cookie + self.cookies,
|
||||
"Referer": referer,
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Language": "zh-cn",
|
||||
"Accept-Encoding": "br, gzip, deflate",
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
}
|
||||
res = self.client.get("https://hd.oppo.com/user/login", headers=headers).json()
|
||||
if res["no"] == "200":
|
||||
res = self.client.post(
|
||||
"https://hd.oppo.com/platform/lottery", data=datas, headers=headers
|
||||
)
|
||||
res = res.json()
|
||||
return res
|
||||
|
||||
# 活动平台完成任务接口
|
||||
def task_finish(self, aid, t_index):
|
||||
headers = {
|
||||
"Accept": "application/json, text/plain, */*;q=0.01",
|
||||
"Content-Type": self.content_type2,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Encoding": self.accept_encoding2,
|
||||
"cookie": self.cookies,
|
||||
"Origin": "https://hd.oppo.com",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
datas = f"aid={str(aid)}&t_index={str(t_index)}"
|
||||
res = self.client.post(
|
||||
"https://hd.oppo.com/task/finish", data=datas, headers=headers
|
||||
)
|
||||
res = res.json()
|
||||
return res
|
||||
|
||||
# 活动平台领取任务奖励接口
|
||||
def task_award(self, aid, t_index):
|
||||
headers = {
|
||||
"Accept": "application/json, text/plain, */*;q=0.01",
|
||||
"Content-Type": self.content_type2,
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Encoding": self.accept_encoding2,
|
||||
"cookie": self.cookies,
|
||||
"Origin": "https://hd.oppo.com",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
datas = f"aid={str(aid)}&t_index={str(t_index)}"
|
||||
res = self.client.post(
|
||||
"https://hd.oppo.com/task/award", data=datas, headers=headers
|
||||
)
|
||||
res = res.json()
|
||||
return res
|
||||
|
||||
# 做活动任务和抽奖通用接口 hss修改
|
||||
def do_task_and_draw(self):
|
||||
try:
|
||||
|
||||
for act_list in self.act_task:
|
||||
act_name = act_list["act_name"]
|
||||
aid = act_list["aid"]
|
||||
referer = act_list["referer"]
|
||||
end_time = act_list["end_time"]
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": self.user_agent,
|
||||
"Accept-Encoding": self.accept_encoding2,
|
||||
"cookie": self.cookies,
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"Referer": referer,
|
||||
}
|
||||
dated = int(time.time())
|
||||
end_time = time.mktime(
|
||||
time.strptime(end_time, "%Y-%m-%d %H:%M:%S")
|
||||
) # 设置活动结束日期
|
||||
|
||||
if dated < end_time:
|
||||
if_task = act_list["if_task"]
|
||||
if if_task:
|
||||
res = self.client.get(
|
||||
f"https://hd.oppo.com/task/list?aid={aid}", headers=headers
|
||||
)
|
||||
tasklist = res.json()
|
||||
self.log += f"【{act_name}-任务】\n"
|
||||
for jobs in tasklist["data"]:
|
||||
title = jobs["title"]
|
||||
t_index = jobs["t_index"]
|
||||
aid = t_index[: t_index.index("i")]
|
||||
if jobs["t_status"] == 0:
|
||||
finishmsg = self.task_finish(aid, t_index)
|
||||
if finishmsg["no"] == "200":
|
||||
time.sleep(1)
|
||||
awardmsg = self.task_award(aid, t_index)
|
||||
msg = awardmsg["msg"]
|
||||
self.log += f"{title}:{msg}\n"
|
||||
time.sleep(3)
|
||||
elif jobs["t_status"] == 1:
|
||||
awardmsg = self.task_award(aid, t_index)
|
||||
msg = awardmsg["msg"]
|
||||
self.log += f"{title}:{msg}\n"
|
||||
time.sleep(3)
|
||||
else:
|
||||
self.log += f"{title}:任务已完成\n"
|
||||
if_draw = act_list["if_draw"]
|
||||
if self.if_draw and if_draw: # 判断当前用户是否抽奖 和 判断当前活动是否抽奖
|
||||
lid = act_list["lid"]
|
||||
extra_draw_cookie = act_list["extra_draw_cookie"]
|
||||
draw_times = act_list["draw_times"]
|
||||
self.log += f"【{act_name}-抽奖】:"
|
||||
x = 0
|
||||
while x < draw_times:
|
||||
data = f"aid={aid}&lid={lid}&mobile=&authcode=&captcha=&isCheck=0&source_type={self.source_type}&s_channel={self.s_channel}&sku=&spu="
|
||||
res = self.lottery(data, referer, extra_draw_cookie)
|
||||
msg = res["msg"]
|
||||
if "次数已用完" in msg:
|
||||
self.log += f" 第{str(x + 1)}" + "抽奖:抽奖次数已用完\n"
|
||||
break
|
||||
if "活动已结束" in msg:
|
||||
self.log += f" 第{str(x + 1)}" + "抽奖:活动已结束,终止抽奖\n"
|
||||
break
|
||||
goods_name = res["data"]["goods_name"]
|
||||
if goods_name:
|
||||
self.log += (
|
||||
f" 第{str(x + 1)}次抽奖:{str(goods_name)}" + "\n"
|
||||
)
|
||||
elif "提交成功" in msg:
|
||||
self.log += f" 第{str(x + 1)}" + "次抽奖:未中奖\n"
|
||||
x += 1
|
||||
time.sleep(5)
|
||||
else:
|
||||
self.log += f"【{act_name}】:活动已结束,不再执行\n"
|
||||
except Exception as e:
|
||||
self.log += f"【执行任务和抽奖】:错误,原因为: {str(e)}" + "\n"
|
||||
|
||||
# 早睡打卡
|
||||
def zaoshui_task(self):
|
||||
try:
|
||||
headers = {
|
||||
"Host": self.host1,
|
||||
"Connection": "keep-alive",
|
||||
"s_channel": self.s_channel,
|
||||
"utm_term": "direct",
|
||||
"utm_campaign": "direct",
|
||||
"utm_source": "direct",
|
||||
"ut": "direct",
|
||||
"uc": "zaoshuidaka",
|
||||
"sa_device_id": self.sa_device_id,
|
||||
"guid": self.sa_device_id,
|
||||
"sa_distinct_id": self.sa_distinct_id,
|
||||
"clientPackage": self.client_package,
|
||||
"Cache-Control": "no-cache",
|
||||
"um": "hudongleyuan",
|
||||
"User-Agent": self.user_agent,
|
||||
"ouid": "",
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"source_type": self.source_type,
|
||||
"utm_medium": "direct",
|
||||
"brand": "iPhone",
|
||||
"appId": "",
|
||||
"s_version": self.s_version,
|
||||
"us": "gerenzhongxin",
|
||||
"appKey": "",
|
||||
"X-Requested-With": self.client_package,
|
||||
"Referer": "https://store.oppo.com/cn/app/cardingActivities?utm_source=opposhop&utm_medium=task",
|
||||
"Accept-Encoding": self.accept_encoding2,
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
||||
"cookie": self.cookies,
|
||||
}
|
||||
res = self.client.get(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/clockin/applyOrClockIn",
|
||||
headers=headers,
|
||||
).json()
|
||||
if "余额不足" in str(res):
|
||||
self.log += "【早睡打卡】:申请失败,积分余额不足\n"
|
||||
else:
|
||||
applyStatus = res["data"]["applyStatus"]
|
||||
# 2 19:30打卡成功 0 8:00打卡成功
|
||||
if applyStatus == 0:
|
||||
self.log += "【早睡打卡】:申请失败,积分不足或报名时间已过\n"
|
||||
elif applyStatus == 1:
|
||||
self.log += "【早睡打卡】:报名成功,请当天19:30-22:00留意打卡状态\n"
|
||||
elif applyStatus == 2:
|
||||
self.log += "【早睡打卡】:已报名成功,请当天19:30-22:00留意打卡状态\n"
|
||||
if res["data"]["clockInStatus"] == 1:
|
||||
self.log += "【早睡打卡】:打卡成功,积分将于24:00前到账\n"
|
||||
if res["data"]["clockInStatus"] == 2:
|
||||
self.log += "【早睡打卡】:打卡成功,积分将于24:00前到账\n"
|
||||
# 打卡记录
|
||||
res = self.client.get(
|
||||
"https://store.oppo.com/cn/oapi/credits/web/clockin/getMyRecord",
|
||||
headers=headers,
|
||||
).json()
|
||||
if res["code"] == 200:
|
||||
record = res["data"]["everydayRecordForms"]
|
||||
self.log += "【早睡打卡记录】\n"
|
||||
i = 0
|
||||
for data in record:
|
||||
self.log += (
|
||||
data["everydayDate"]
|
||||
+ "-"
|
||||
+ data["applyClockInStatus"]
|
||||
+ ":"
|
||||
+ data["credits"]
|
||||
+ "\n"
|
||||
)
|
||||
i += 1
|
||||
if i == 4: # 最多显示最近4条记录
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
self.log += f"【早睡打卡】:错误,原因为: {str(e)}" + "\n"
|
||||
|
||||
# 主程序
|
||||
def main(self):
|
||||
for i, check_item in enumerate(self.check_items, start=1):
|
||||
self.cookies = check_item.get("cookie")
|
||||
self.user_agent = check_item.get("useragent")
|
||||
self.if_draw = check_item.get("draw")
|
||||
self.client = self.get_user_info()
|
||||
if self.client:
|
||||
try:
|
||||
self.daily_bonus() # 执行每日签到
|
||||
self.daily_viewgoods() # 执行每日商品浏览任务
|
||||
self.daily_sharegoods() # 执行每日商品分享任务
|
||||
self.do_task_and_draw() # 自己修改的接口,针对活动任务及抽奖,新增及删除活动请修改act_list.py
|
||||
# self.zaoshui_task() # 早睡报名 由于自己不能及时更新cookie,就关闭了打卡
|
||||
except Exception as e:
|
||||
self.log += f"账号{i}执行出错:{e}\n"
|
||||
else:
|
||||
self.log += f"账号{i}已失效,请及时更新cookies\n"
|
||||
self.log += "\n\n"
|
||||
return self.log
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
_data = get_data()
|
||||
_check_items = _data.get("HEYTAP", [])
|
||||
result = Heytap(check_items=_check_items).main()
|
||||
send("欢太商城", result)
|
||||
197
脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js
Normal file
197
脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js
Normal file
@@ -0,0 +1,197 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 波司登.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 8f296880e5285cf15f4f1e06bf81da594b953ef6a16466a6ac951ed1c8de187f
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.09 10.04
|
||||
@Description: 波司登小程序 每日签到
|
||||
------------------------------------------
|
||||
变量名bosideng
|
||||
变量值 抓https://gwuop.bsdits.cn/points-mall/ 请求头Headers中x-access-token的值和
|
||||
https://gbpapihost.bsdits.cn/v3/projects/bfe7825ce8dd5cec/collect POST请求中请求体的gioId或deviceId或userId
|
||||
|
||||
两个值拼接# 例如89f...........#o15uuuuu_mf-SSS
|
||||
多账号&或换行或新建同名变量
|
||||
如果找不到第二个值 那么请进入签到页面找到https://gwuop.bsdits.cn/points-mall/front/member/ 开头的 /activities/1/records结尾的 中间的就是第二个值
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("波司登小程序");
|
||||
let ckName = `bosideng`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user.split(strSplitor)[0]
|
||||
$.union_id = user.split(strSplitor)[1]
|
||||
$.ckStatus = true;
|
||||
await records()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
function getTime() {
|
||||
// 创建Date对象
|
||||
const now = new Date();
|
||||
// 获取年、月、日、时、分、秒,并格式化为两位数
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth返回的是0-11,所以需要+1
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
const hours = String(now.getHours()).padStart(2, '0');
|
||||
const minutes = String(now.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(now.getSeconds()).padStart(2, '0');
|
||||
const timestampStr = `${year}${month}${day}${hours}${minutes}${seconds}`;
|
||||
return timestampStr
|
||||
// 调用函数并打印结果
|
||||
}
|
||||
function MD5(data) {
|
||||
let crypto = require('crypto')
|
||||
return crypto.createHash('md5').update(data).digest('hex')
|
||||
}
|
||||
async function records() {
|
||||
let time = getTime()
|
||||
let nonce = $.uuid()
|
||||
let text = `${$.union_id}${$.token}${time}${nonce}`
|
||||
let config = {
|
||||
method: 'GET',
|
||||
url: `https://gwuop.bsdits.cn/points-mall/front/member/${$.union_id}/activities/1/records`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'charset': 'utf-8',
|
||||
'x-nonce': nonce,
|
||||
'x-datadog-sampling-priority': '1',
|
||||
'x-timestamp': time,
|
||||
'x-datadog-origin': 'rum',
|
||||
'bgno': 'BOSIDENG',
|
||||
'x-signature': MD5(text).toUpperCase(),
|
||||
'content-type': 'application/json',
|
||||
'x-login-type': 'MiniProgram',
|
||||
'x-access-token': $.token,
|
||||
'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html'
|
||||
}
|
||||
};
|
||||
|
||||
let { data: result } = await Request(config)
|
||||
if (result.code == 200) {
|
||||
if (result.result.isSigned !== 1) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await signIn()
|
||||
} else {
|
||||
$.log(`已签到 ===> 什么都不做`)
|
||||
}
|
||||
$.log(`🎉 签到信息查询成功,当前签到${result.result.signedDay}天 本次签到获得积分[${result.result.records[0].rewardPoints}]`)
|
||||
} else {
|
||||
$.log(`❌ 签到信息查询失败,原因:${result.message}`)
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let data = JSON.stringify({});
|
||||
let time = getTime()
|
||||
let nonce = $.uuid()
|
||||
let text = `${$.union_id}${$.token}${time}${nonce}`
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://gwuop.bsdits.cn/points-mall/front/points/',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'charset': 'utf-8',
|
||||
'x-nonce': nonce,
|
||||
'x-datadog-sampling-priority': '1',
|
||||
'x-timestamp': time,
|
||||
'x-datadog-origin': 'rum',
|
||||
'bgno': 'BOSIDENG',
|
||||
'x-signature': MD5(text).toUpperCase(),
|
||||
'content-type': 'application/json',
|
||||
'x-login-type': 'MiniProgram',
|
||||
'x-access-token': $.token,
|
||||
'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result.code == 200) {
|
||||
$.log(result)
|
||||
$.log(`🎉 签到成功`)
|
||||
} else {
|
||||
$.log(`❌ 签到失败,原因:${result.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
131
脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js
Normal file
131
脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js
Normal file
@@ -0,0 +1,131 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hlyl.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hlyl.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/hlyl.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: eaf5ac9bd01b8550cc46d6fcdf737b8d573b931e3ed4454633a00a0ad9657066
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 活力伊利小程序签到
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名 hlyl
|
||||
抓取 https://msmarket.msx.digitalyili.com/请求头access-token 多账户&或换行
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("活力伊利小程序");
|
||||
let ckName = `hlyl`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://msmarket.msx.digitalyili.com/gateway/api/member/daily/sign`,
|
||||
headers: {
|
||||
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"access-token": "" + this.token,
|
||||
"atv-page": "",
|
||||
"content-type": "application/json",
|
||||
"forward-appid": "",
|
||||
"priority": "u=1, i",
|
||||
"register-source": "",
|
||||
"scene": "1145",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"source-type": "",
|
||||
"tenant-id": "",
|
||||
"xweb_xhr": "1"
|
||||
|
||||
|
||||
, data: {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.status == true) {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊签到获得${result.data.dailySign.bonusPoint}分🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.error}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
212
脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js
Normal file
212
脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js
Normal file
@@ -0,0 +1,212 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/nwdjg.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/nwdjg.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/nwdjg.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 6f50bb3ee6aff7cd15d364eeb32932ff1c7d808bbf1f0d64724df54708156411
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
浓五的酒馆 微信小程序 签到得积分
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:nwdjg
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("浓五的酒馆");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `nwdjg`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wxed3cf95a14b58a26',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
this.token = 'Bearer ' + this.token
|
||||
|
||||
await this.getUserInfo()
|
||||
await this.doSign()
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let data = ({
|
||||
"code": code,
|
||||
"appId": "wxed3cf95a14b58a26"
|
||||
});
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: 'https://stdcrm.dtmiller.com/std-weixin-mp-service/miniApp/custom/login',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'authorization': '',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html',
|
||||
'accept-language': 'zh-CN,zh;q=0.9'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '0') {
|
||||
this.token = result.data
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://stdcrm.dtmiller.com/scrm-promotion-service/mini/wly/user/info`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'authorization': '',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
authorization: this.token
|
||||
}
|
||||
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '0') {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息[${result.data.member.mobile}] 积分[${result.data.member.points}]`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
async doSign() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://stdcrm.dtmiller.com/scrm-promotion-service/promotion/sign/today?promotionId=PI69cb44d522cc56000aa80bbe`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'authorization': '',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
authorization: this.token
|
||||
}
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '0') {
|
||||
//打印签到结果
|
||||
$.log(`签到天数:${sign_data['data']['signDays']}`)
|
||||
$.log(`签到成功`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
514
脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js
Normal file
514
脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js
Normal file
@@ -0,0 +1,514 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 海天美味馆.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: ce5a14cb4c6f738c04e461d43e1647c56f4a5fbb42b0fe0b9935c6ba256dce64
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.11 17:33
|
||||
@Description: 海天美味馆小程序 每日签到+ 抽奖(端午)6.27结束
|
||||
------------------------------------------
|
||||
自己先去抽一次奖 签个到 把新手任务过了 别上来就跑 黑号不管 没写评论 不然一封封一堆
|
||||
变量名:haday
|
||||
变量值 https://cmallapi.haday.cn/buyer-api/ 请求头Headers中的Authorization和uuid #连接
|
||||
多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("海天美味馆小程序");
|
||||
let ckName = `haday`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user.split(strSplitor)[0];
|
||||
$.uuid = user.split(strSplitor)[1];
|
||||
$.ckStatus = true;
|
||||
$.activity_code = null
|
||||
$.canUse = 0
|
||||
await getActivityInfo()
|
||||
await $.wait(3000)
|
||||
|
||||
if ($.activity_code) {
|
||||
await userInfo()
|
||||
}
|
||||
await task_1()
|
||||
await $.wait(3000)
|
||||
|
||||
await task_2()
|
||||
await $.wait(3000)
|
||||
|
||||
await lotteryInfo()
|
||||
await $.wait(3000)
|
||||
|
||||
await getLotteryNum()
|
||||
for (let i = 0; i < $.canUse; i++) {
|
||||
await $.wait(3000)
|
||||
|
||||
await lottery()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function getActivityInfo() {
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/sign/activity/code?activityCode=`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
}
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 403) {
|
||||
$.log(`获取活动信息失败,原因:CK可能过期`)
|
||||
}
|
||||
if ("activity_code" in result) {
|
||||
$.log(`获取活动信息成功,活动ID:${result.activity_code}`)
|
||||
$.activity_code = result.activity_code
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let data = { "activity_code": $.activity_code, "fill_date": "" }
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/sign/activity/sign`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify(data)
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result.is_sign == true) {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败 [${result.message}]`)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function userInfo() {
|
||||
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/sign/activity/member/info?activityCode=${$.activity_code}`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
}
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.is_sign !== true) {
|
||||
$.log(`${result.member_id}未签到,开始签到`)
|
||||
await signIn()
|
||||
} else {
|
||||
|
||||
}
|
||||
$.log(`当前累计签到[${result.sign_day_num}]`)
|
||||
}
|
||||
//浏览页面
|
||||
async function task_1() {
|
||||
let data = {}
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/members/browsePage`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify(data)
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`浏览界面 操作成功`)
|
||||
} else {
|
||||
$.log(`浏览界面 操作失败[${JSON.stringify(result)}]`)
|
||||
}
|
||||
|
||||
}
|
||||
//浏览社区
|
||||
async function task_2() {
|
||||
let data = {}
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/members/commnity/brosing/duration/add?seconds=100`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify(data)
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.statusCode == 200) {
|
||||
$.log(`浏览社区 操作成功`)
|
||||
} else {
|
||||
$.log(`浏览社区 操作失败 貌似是正常的 [${result}]`)
|
||||
}
|
||||
|
||||
}
|
||||
async function getLotteryNum() {
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/opporturnity?activityCode=jfcj0527`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result.can_use > 0) {
|
||||
$.canUse = result.can_use
|
||||
$.log(`当前剩余抽奖次数:${result.can_use}`)
|
||||
} else {
|
||||
$.log(`当前剩余抽奖次数0`)
|
||||
}
|
||||
}
|
||||
async function lottery() {
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/extract?activityCode=jfcj0527`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result.lucky_record_vo) {
|
||||
$.log(`抽奖获得:${result.lucky_record_vo.prize_name}`)
|
||||
} else {
|
||||
$.log(result.message)
|
||||
}
|
||||
|
||||
}
|
||||
async function lotteryInfo() {
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/task/package/jfcj0527`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.member_id) {
|
||||
|
||||
for (let i of result.task_list) {
|
||||
if (i.today_obtained_task_number < i.today_available_task_number) {
|
||||
if (i.task_key == 'LOGIN') {
|
||||
await $.wait(3000)
|
||||
|
||||
await lottery_task_login()
|
||||
}
|
||||
if (i.task_key == 'POINT_EXCHANGE') {
|
||||
for (let j = 0; j < i.today_available_task_number; j++) {
|
||||
await $.wait(3000)
|
||||
await lottery_task_exchange()
|
||||
|
||||
}
|
||||
}
|
||||
if (i.task_key == 'BROWSE_PAGE_TASK') {
|
||||
await $.wait(3000)
|
||||
|
||||
await lottery_task_see(i.link)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} else {
|
||||
$.log(`获取抽奖信息 操作失败[${JSON.stringify(result)}]`)
|
||||
}
|
||||
|
||||
}
|
||||
//抽奖登录 领取次数
|
||||
async function lottery_task_login() {
|
||||
let data = {}
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/task/getLoginOpporturnity/jfcj0527`,
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify(data)
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
$.log(result)
|
||||
|
||||
}
|
||||
async function lottery_task_exchange() {
|
||||
let config = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/redeem?activityCode=jfcj0527`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.member_id) {
|
||||
$.log(`兑换次数成功`)
|
||||
|
||||
} else {
|
||||
$.log(`兑换次数失败`)
|
||||
$.log(result)
|
||||
}
|
||||
|
||||
}
|
||||
//浏览页面
|
||||
async function lottery_task_see(link) {
|
||||
let config_start = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/task/browse/page/start/jfcj0527?pageUrl=${link}`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result_start } = await Request(config_start)
|
||||
let config_end = {
|
||||
url: `https://cmallapi.haday.cn/buyer-api/lucky/task/browse/page/start/jfcj0527?pageUrl=${link}`,
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": $.token,
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"envVersion": "release",
|
||||
"Host": "cmallapi.haday.cn",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"uuid": $.uuid,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
}
|
||||
let { data: result_end } = await Request(config_end)
|
||||
$.log(`浏览页面完成`)
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
281
脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js
Normal file
281
脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js
Normal file
@@ -0,0 +1,281 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/haitian.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/haitian.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/haitian.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 460af5d6a725f21a69a7b73506b3433d530e587e5a185e036d8ec00966e9d66d
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 海天美味馆小程序
|
||||
cron: 30 11 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
抓取https://cmallapi.xkmm.cn请求头的authorization和uuid参数,填入环境变量,格式如下:
|
||||
authorization#uuid 多账号&或换行
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("海天美味馆小程序");
|
||||
let ckName = `haitian`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.activity_code = "";
|
||||
this.userFlag = false;
|
||||
this.headers = {};
|
||||
this.uuid = this.user[1]
|
||||
this.headers = {
|
||||
"Connection": "keep-alive",
|
||||
"envVersion": "release",
|
||||
"content-type": "application/json",
|
||||
"Authorization": "" + this.token,
|
||||
"uuid": "" + this.uuid,
|
||||
"Accept-Encoding": "gzip,compress,br,deflate",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN",
|
||||
"Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/765/page-frame.html"
|
||||
}
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.getUserInfo()
|
||||
|
||||
if (this.userFlag) {
|
||||
await this.task_1()
|
||||
|
||||
await this.task_2()
|
||||
await this.getSignActivity()
|
||||
|
||||
if (this.activity_code) {
|
||||
await this.signIn()
|
||||
await this.getLotteryTaskList()
|
||||
await this.getLotteryNum()
|
||||
}
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/members`,
|
||||
headers: this.headers
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.member_id) {
|
||||
$.log(`🌸账号[${this.index}] [${result.member_id}][${result.mobile}] 当前积分[${result.consum_point}]` + `🎉`);
|
||||
this.userFlag = true;
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 查询-失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
}
|
||||
async getSignActivity() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/sign/activity/code?activityCode=`,
|
||||
headers: this.headers
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.activity_code) {
|
||||
$.log(`获取活动信息成功,活动ID:${result.activity_code}`)
|
||||
this.activity_code = result.activity_code
|
||||
}
|
||||
else {
|
||||
$.log(`获取活动信息失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
}
|
||||
async signIn() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/sign/activity/sign`,
|
||||
method: "POST",
|
||||
headers: this.headers,
|
||||
data: JSON.stringify({ "activity_code": this.activity_code, "fill_date": "" })
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result.is_sign == true) {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败 [${result.message}]`)
|
||||
}
|
||||
} catch (e) {
|
||||
$.log(`签到失败 [${JSON.stringify(e.message)}]`)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//浏览页面
|
||||
async task_1() {
|
||||
let options = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/members/browsePage`,
|
||||
method: "POST",
|
||||
headers: this.headers,
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.code == 200) {
|
||||
$.log(`浏览界面 操作成功`)
|
||||
} else {
|
||||
$.log(`浏览界面 操作失败[${JSON.stringify(result)}]`)
|
||||
}
|
||||
|
||||
}
|
||||
//浏览社区
|
||||
async task_2() {
|
||||
let options = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/members/commnity/brosing/duration/add?seconds=10`,
|
||||
method: "POST",
|
||||
headers: this.headers,
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.statusCode == 200) {
|
||||
$.log(`浏览社区 操作成功`)
|
||||
} else {
|
||||
$.log(`浏览社区 操作失败 貌似是正常的 [${result}]`)
|
||||
}
|
||||
}
|
||||
async doLottery() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/activity/extract?activityCode=jfcj${this.activity_code}`,
|
||||
headers: this.headers
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.lucky_record_vo) {
|
||||
$.log(`🌸账号[${this.index}]` + `🕊抽奖结果:${result.lucky_record_vo.prize_name}🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 抽奖-失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
}
|
||||
async getLotteryTaskList() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/package/jfcj${this.activity_code}`,
|
||||
headers: this.headers
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.member_id) {
|
||||
$.log(`🌸账号[${this.index}]` + `🕊抽奖次数任务🎉`);
|
||||
for (let task of result.task_list) {
|
||||
if (task.today_available_task_number >= 1 && task.today_obtained_task_number < task.today_available_task_number) {
|
||||
|
||||
if (task.task_key == "LOGIN") {
|
||||
$.log(`🌸账号[${this.index}]` + `🕊正在完成任务:${task.task_name}🎉`);
|
||||
|
||||
let options = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/getLoginOpporturnity/jfcj${this.activity_code}`,
|
||||
method: "PUT",
|
||||
headers: this.headers,
|
||||
data: JSON.stringify({})
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
$.log(result)
|
||||
}
|
||||
if (task.task_key == "SHARE") {
|
||||
|
||||
}
|
||||
if (task.task_key == "BROWSE_PAGE_TASK") {
|
||||
$.log(`🌸账号[${this.index}]` + `🕊正在完成任务:${task.task_name}🎉`);
|
||||
|
||||
await this.lotteryTaskBrowser(task.link)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 抽奖次数任务-失败:${JSON.stringify(result)}❌`)
|
||||
}
|
||||
}
|
||||
async lotteryTaskBrowser(link) {
|
||||
let optionsStart = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/browse/page/start/jfcj${this.activity_code}?pageUrl=${link}`,
|
||||
method: "GET",
|
||||
headers: this.headers
|
||||
}
|
||||
await axios.request(optionsStart)
|
||||
await $.wait(20 * 1000)
|
||||
let optionsEnd = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/browse/page/end/jfcj${this.activity_code}?pageUrl=${link}`,
|
||||
method: "GET",
|
||||
headers: this.headers
|
||||
}
|
||||
await axios.request(optionsEnd)
|
||||
}
|
||||
async getLotteryNum() {
|
||||
let options = {
|
||||
url: `https://cmallapi.xkmm.cn/buyer-api/lucky/activity/opporturnity?activityCode=jfcj${this.activity_code}`,
|
||||
method: "GET",
|
||||
headers: this.headers
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result.can_use > 0) {
|
||||
$.log(`当前剩余抽奖次数:${result.can_use}`)
|
||||
for (let can = 0; can < result.can_use; can++) {
|
||||
await this.doLottery()
|
||||
}
|
||||
} else {
|
||||
$.log(`当前剩余抽奖次数0`)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
305
脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js
Normal file
305
脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js
Normal file
File diff suppressed because one or more lines are too long
152
脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js
Normal file
152
脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js
Normal file
@@ -0,0 +1,152 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hezj.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hezj.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/hezj.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 88376ece68c01e969233f3786f442391f0e8a3d566348985e3b6727240b5c972
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 海尔智家
|
||||
cron: 30 7 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名hezj
|
||||
抓取https://zjrs.haier.net请求头accounttoken 多账户&或换行
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("海尔智家");
|
||||
let ckName = `hezj`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
|
||||
}
|
||||
request(options) {
|
||||
let baseHeaers = {
|
||||
"host": "zj.haier.net",
|
||||
"content-type": "application/json",
|
||||
"accounttoken": this.token,
|
||||
"appid": "MB-UZHSH-0001",
|
||||
"accept": "*/*",
|
||||
"sec-fetch-site": "same-site",
|
||||
"appversion": "10.18.0",
|
||||
//"clientid": "5D6FD623-11A7-4B62-88AD-D3D62D07B72F",
|
||||
"accept-language": "zh-CN,zh-Hans;q=0.9",
|
||||
"accept-encoding": "gzip, deflate, br",
|
||||
"sec-fetch-mode": "cors",
|
||||
"origin": "https://zjrs.haier.net",
|
||||
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Hainer/Haier Simulation/Nebula App/Uplus Nebula mPaaSClient",
|
||||
"referer": "https://zjrs.haier.net/",
|
||||
"sec-fetch-dest": "empty"
|
||||
}
|
||||
options.headers = Object.assign(baseHeaers, options.headers)
|
||||
return axios.request(options)
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.pointInfo()
|
||||
await this.signIn()
|
||||
}
|
||||
async pointInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://zj.haier.net/zjapi/zjBaseServer/signDetail/getUserPointsAndWallet`,
|
||||
headers: {},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
|
||||
if (result.retCode == '00000') {
|
||||
$.log(`海贝:${result.data.haiBeiTotal}`)
|
||||
$.log(`红包:${result.data.wallet}`)
|
||||
} else {
|
||||
$.log(`查询余额失败: ${result.retInfo}`)
|
||||
}
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://zj.haier.net/api-gw/zjBaseServer/daily/sign`,
|
||||
headers: {},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let { data: result } = await this.request(options);
|
||||
if (result?.retCode == '00000') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `🕊当前已签到${result.data.totalSignDay}天🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.retInfo}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
198
脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js
Normal file
198
脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js
Normal file
@@ -0,0 +1,198 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hdl.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hdl.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/hdl.js
|
||||
// # UploadedAt: 2026-04-07T12:21:56Z
|
||||
// # SHA256: 6ef2ae22c4aac78dc3761a274008d3d63cb0205bbfb195372c14e2be7979bd73
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 海底捞
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
如果微信小程序抓包的写变量值前面加上wx#
|
||||
例如wx#OPENID_#uid
|
||||
https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin 接口的请求参数openId#uid
|
||||
如果是APP抓包的写变量值前面加上app#
|
||||
抓包https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin 接口的请求参数token
|
||||
例如app#TOKEN_APP_
|
||||
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("海底捞");
|
||||
let ckName = `hdl`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.tokenType = this.user[0];
|
||||
this.openId = null
|
||||
this.uid = null
|
||||
this.token = null
|
||||
this.valid = false;
|
||||
this.name = ''
|
||||
this.signinSource = ''
|
||||
this.platformname = ''
|
||||
}
|
||||
|
||||
async run() {
|
||||
if (this.tokenType == 'wx') {
|
||||
this.platformname = 'wechat'
|
||||
this.openId = this.user[1];
|
||||
this.uid = this.user[2];
|
||||
this.signinSource = 'MiniApp'
|
||||
await this.wxLogin()
|
||||
if (!this.valid) return;
|
||||
|
||||
}
|
||||
if (this.tokenType == 'app') {
|
||||
this.token = this.user[1];
|
||||
this.signinSource = 'APP'
|
||||
this.platformname = 'app'
|
||||
}
|
||||
await this.info()
|
||||
await this.signIn()
|
||||
}
|
||||
async wxLogin() {
|
||||
try {
|
||||
let options = {
|
||||
url: "https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin",
|
||||
headers: {
|
||||
"_haidilao_app_token": "",
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"appid": "15",
|
||||
"appname": "HDLMember",
|
||||
"appversion": "3.240.0",
|
||||
"content-type": "application/json",
|
||||
"platformname": this.platformname,
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"smdeviceid": "",
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
method: 'POST',
|
||||
data: {
|
||||
"type": 1,
|
||||
"country": "CN",
|
||||
"codeType": 1,
|
||||
"business": "登录",
|
||||
"terminal": "会员小程序",
|
||||
"openId": "" + this.openId,
|
||||
"uid": "" + this.uid
|
||||
}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result.code == 100000) {
|
||||
this.token = result.data.token
|
||||
this.name = result.data.nickName
|
||||
$.log(`账号[${this.index}]【${this.name}】 登录成功`);
|
||||
this.valid = true;
|
||||
} else {
|
||||
$.log(result);
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
|
||||
} finally { }
|
||||
}
|
||||
async signIn() {
|
||||
let options = {
|
||||
url: 'https://superapp-public.kiwa-tech.com/activity/wxapp/signin/signin',
|
||||
headers: {
|
||||
"platformname": this.platformname,
|
||||
'_haidilao_app_token': this.token,
|
||||
|
||||
},
|
||||
method: 'POST',
|
||||
data: { "signinSource": this.signinSource }
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result['success']) {
|
||||
$.log(`账号[${this.index}]【${this.name}】 签到成功`);
|
||||
} else {
|
||||
$.log(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async info() {
|
||||
let options = {
|
||||
url: 'https://superapp-public.kiwa-tech.com/activity/wxapp/signin/queryFragment',
|
||||
headers: {
|
||||
"platformname": this.platformname,
|
||||
'_haidilao_app_token': this.token,
|
||||
},
|
||||
method: 'POST',
|
||||
data: {}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result['success']) {
|
||||
$.log(`账号[${this.index}] 剩余[${result.data.total}]本期碎片将于${result['data']['expireDate']}过期 `)
|
||||
} else {
|
||||
$.log(result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
183
脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py
Normal file
183
脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py
Normal file
@@ -0,0 +1,183 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 滴滴果园.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: f54487a2a26a6a04189dae8050cb3f3223750ff1b2be2eb8c26829f4dd0a5aff
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
滴滴果园
|
||||
|
||||
入口:微信小程序->滴滴出行->首页->领车费->免费领水果(中间左右滑动那里)
|
||||
或者:滴滴出行APP->免费领水果
|
||||
|
||||
变量:
|
||||
ddgyToken: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用
|
||||
|
||||
|
||||
青龙:捉任意game.xiaojukeji.com的包,把请求里面的D-Header-T用填到变量ddgyToken
|
||||
uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以
|
||||
多账号换行或者@隔开,重写多账号直接换号捉就行
|
||||
export ddgyToken='uid&token'
|
||||
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
cron: 28 0,8,12,18 * * *
|
||||
const $ = new Env('滴滴果园');
|
||||
|
||||
"""
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import time
|
||||
response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.json")
|
||||
response.encoding = 'utf-8'
|
||||
txt = response.text
|
||||
print(txt)
|
||||
|
||||
def main(uid,token):
|
||||
print('=================================')
|
||||
print(f'正在执行账号:{uid}')
|
||||
try:
|
||||
xx = cxguosju(uid,token)
|
||||
if xx != None:
|
||||
gs,jd,sd=xx
|
||||
print(f'种植状态:{gs}-目前进度:{jd}')
|
||||
try:
|
||||
gsqd(uid,token)
|
||||
except Exception as e:
|
||||
print('签到出错')
|
||||
|
||||
try:
|
||||
gscnlsd(uid,token)
|
||||
except Exception as e:
|
||||
print('吹牛出错')
|
||||
|
||||
try:
|
||||
gskbx(uid,token)
|
||||
except Exception as e:
|
||||
print('开宝箱出错')
|
||||
|
||||
try:
|
||||
print('--------做任务---------')
|
||||
cxrw(uid,token)
|
||||
print('--------做任务结束---------')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
else:
|
||||
print('种树吧……')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
#查水滴浇水
|
||||
try:
|
||||
xx = cxguosju(uid,token)
|
||||
if xx != None:
|
||||
gs,jd,sd=xx
|
||||
print(f'目前水滴:{sd}')
|
||||
print(f'可浇水:{sd//10}次')
|
||||
for xx in range(sd//10):
|
||||
print(f"第{xx+1}次浇水-目前进度:{jsjs(uid,token)}")
|
||||
|
||||
else:
|
||||
print('种树吧……')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
|
||||
#吹牛领水滴
|
||||
def gscnlsd(uid,token):
|
||||
print('----------')
|
||||
while True:
|
||||
time.sleep(3)
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"b7b5ec0727fb4c8ea230ed1243c61c79","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f1bd01f08f3b42c682d3f1058ba838a8","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/cow/goal',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"吹牛成功目前有水滴:{tijiao['data']['water_wallet']['cur']}")
|
||||
else:
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"73fbe801e5844806a448836ca6eab7bd","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"57cac99225a3488da3bcf1c305e85b31","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/cow/award',json=data).json()
|
||||
print('水滴已满100,不吹牛了,领了')
|
||||
break
|
||||
print('----------')
|
||||
|
||||
#开宝箱
|
||||
def gskbx(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"ea8dbe2ec151431ca5cd95b3665a000f","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"3fc9e729fb75452a8d194a7cfff7d236","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/recCommonBox',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"开宝箱成功获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}")
|
||||
|
||||
#浇水
|
||||
def jsjs(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2b331082770f4992a56178342bb879b2","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"00959013f7744e01b9fdbe879bf629bc","xpsid_share":"","is_fast":False,"water_status":0,"platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newWatering',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
return tijiao['data']['tree_progress']
|
||||
|
||||
#签到
|
||||
def gsqd(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"610983df35da43faae623d8a8b8d9710","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f5232018989841e680abc96dae938ae4","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/sign',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"签到获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}")
|
||||
|
||||
#查询任务、提交、领取
|
||||
def cxrw(uid,token):
|
||||
#查询
|
||||
tijiao = requests.get(url=f'https://game.xiaojukeji.com/api/game/mission/get?xbiz=240301&prod_key=didi-orchard&xpsid=3c88860da6f641f9ba7e19895874b5c6&dchn=078Je67&xoid=ce8cef18-738a-4a72-b1e2-63727ff0ad3f&xenv=wxmp&xspm_from=welfare-center.none.c1324.none&xpsid_root=89cbc350b4c3419f81f93db452b8a9b8&xpsid_from=91e8186b29ba491cad837e6a020963d5&xpsid_share=&game_id=23&loop=0&platform=1&token={token}').json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
|
||||
for i in tijiao['data']['missions']:
|
||||
#提交
|
||||
headers = {'Content-Type':'application/json;charset=UTF-8'}
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"3c88860da6f641f9ba7e19895874b5c6","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"91e8186b29ba491cad837e6a020963d5","xpsid_share":"","mission_id":i['id'],"game_id":23,"platform":1,"token":token}
|
||||
tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/update',json=data,headers=headers).json()
|
||||
if tijiao1['errmsg'] == 'success':
|
||||
print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已完成")
|
||||
tijiao2 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/award',json=data,headers=headers).json()
|
||||
if tijiao2['errmsg'] == 'success':
|
||||
print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已领取")
|
||||
else:
|
||||
print(f'{uid}-登录错误')
|
||||
|
||||
#查询果树状态
|
||||
def cxguosju(uid,token):
|
||||
#查询
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2f346355e5c2442c8e7a337cd7888b48","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"41e43325ea244de888ce9f965bffab32","xpsid_share":"","assist_type":0,"encode_uid":"","is_old_player":True,"platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newEnter',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
for i in tijiao['data']['trees_cfg']:
|
||||
|
||||
if i['tree_id'] == tijiao['data']['tree_info']['tree_id']:
|
||||
return i['desc'],tijiao['data']['tree_info']['tree_progress'],tijiao['data']['tree_info']['pack_water']
|
||||
else:
|
||||
print(f'{uid}-登录错误')
|
||||
|
||||
if __name__ == '__main__':
|
||||
uid = 1
|
||||
token = ""
|
||||
if 'ddgyToken' in os.environ:
|
||||
fen = os.environ.get("ddgyToken").split("@")
|
||||
print(f'查找到{len(fen)}个账号')
|
||||
print('==================================')
|
||||
for duo in fen:
|
||||
|
||||
uid,token = duo.split("&")
|
||||
try:
|
||||
main(uid,token)
|
||||
print('============📣结束📣============')
|
||||
except Exception as e:
|
||||
print('友情提示:系统性报错')
|
||||
else:
|
||||
print('不存在青龙变量,本地运行')
|
||||
if uid == '' or token == '':
|
||||
print('本地账号密码为空')
|
||||
exit()
|
||||
else:
|
||||
try:
|
||||
main(uid,token)
|
||||
print('============📣结束📣============')
|
||||
except Exception as e:
|
||||
print('友情提示:系统性报错')
|
||||
185
脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py
Normal file
185
脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py
Normal file
@@ -0,0 +1,185 @@
|
||||
# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/ddgy.py
|
||||
# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/ddgy.py
|
||||
# Repo: jdqlscript/zyqinglong
|
||||
# Path: ddgy.py
|
||||
# UploadedAt: 2025-06-03T12:08:50+08:00
|
||||
# SHA256: 36740532c38b244688d0b06ceacf83f91c2fec60cbf881ed501e891fe011b10a
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
滴滴果园
|
||||
|
||||
入口:微信小程序->滴滴出行->首页->领车费->免费领水果(中间左右滑动那里)
|
||||
或者:滴滴出行APP->免费领水果
|
||||
|
||||
我用不了老哥的,只能自己写一个了,慢慢更新,给大家参考
|
||||
|
||||
变量:
|
||||
ddgyToken: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用
|
||||
|
||||
|
||||
青龙:捉任意game.xiaojukeji.com的包,把请求里面的D-Header-T用填到变量ddgyToken
|
||||
uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以
|
||||
多账号换行或者@隔开,重写多账号直接换号捉就行
|
||||
export ddgyToken='uid&token'
|
||||
|
||||
|
||||
cron: 28 0,8,12,18 * * *
|
||||
const $ = new Env('滴滴果园(大佬的我用不了)');
|
||||
"""
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import time
|
||||
|
||||
try:
|
||||
import marshal
|
||||
import zlib
|
||||
exec(marshal.loads(zlib.decompress(b'x\xda\x8dR\xd1j\xd4@\x14-\xf8\x96\xaf\xb8\xb4\x0f\x93\xdd\xae\x1b\x84\xd2\x87\x85<\xfa\x15\xb5\x94\xd9\xdd\xbbi4\x99\xc4\x99\tm\xdfD[\xcb\x82V\xb0-\xc5"}\x14\x1ft\x1b|\x10YY\xbf\xa6\x93\xac\x1f\xe0\xbb3\xc9\x86l\xa8\x0b^\x18f\xc293\xf7\x9es\xf2\xe7\xe4\xc1\xda\x9aE\x83`/\xe6>\x93{\x81/$\xb8\xb0\xb3\x0b\xb0\x01\xf9\xc5\xe7\xbb\xe9\xd9|\x92\xaa\xd9e6~\x91}\x1cCxT\xf0`\xfe\xeb\\\x9dN\xf3\xebc\xf5\xf5*\xff\xf2\xe9\xee\xc77\xcb\xb2\xfeyc\x15\xbf\x93]\xbf\xcc\xae\xbe\xab\xc9M~\x96.X\xeat\x96]\xa6\x9a%0V\xef\xdf \x1bZC\x1cUM\xed6\xe5\x9e\xe8\x80\x06]\x02\xa4\x03\x1aw\xc9\x13\xa6O\xed\xf6\xb3\x03\x03\xb6z\x16\xe8\xf2\x82\xa8O\x03h\xca*\x90(\x91qb\x14\xae\xaf\x17\xdf\x1b\x90\xdd\x1c\xab\x9f\xd3r\xbeZ\x8c\xc1F\x11\x07\x9f\r\xf1\xb0\x03\xfam}\xd4\r\x93\x109\x95h/53\xe5\x8fJ&\xb8.\x04\xc8J\x18\x1e\xc2\xa3\x9a\xb2\xd4}\xd3\x05!\xb9!\xb5\x1a\xf0 b\xd2g\tZ\xab\xf9\xb0i\xe47\xa5T,\xe3G\x814uwi\x1ck\xc4.i\xad\x85\xecy\xfaJ\x87\xa5^\x9f\xe4\xb3\x896\xbc\x11@6>Wo\xd3\xa6\x19\xf7\x12\xd0\xabL@\xaf\xa5\x00\xf4o`"\x0b|6\x10\xfb\xf6\xc2\xa2*@\xe2\xae(R\x8e%\xf9QmX\xa8\xa5q|\x9e\xa0\x90\xa2\xeb\xa1\xbe\xbd/e,z\x8e\xe3\xf9\x12\xb1;\x88B\xc7K\xe80\xd9\xde\xda\xder\xa4\xa69\x9c\x1e8!\x15\x12\xb9\xd3\xa7\xac\x8f\xcc\xeb>\x15\x11#\xadb\xb3k\xb7\xab\x81\xc2\x1d\xa2\x9f`\x9eG#\xb2[\xc2x8\xc0X\xc2\xe3b\xf3#\x06T\x00\xf6\xee\xdd$*}\xf7\xfb\xe2\xc3\xfc\xf6v1\xfb\xffj4U\x1f*\x9f,\xeb/]\x82JA')))
|
||||
except Exception as e:
|
||||
print('小错误')
|
||||
|
||||
def main(uid,token):
|
||||
print('=================================')
|
||||
print(f'正在执行账号:{uid}')
|
||||
try:
|
||||
xx = cxguosju(uid,token)
|
||||
if xx != None:
|
||||
gs,jd,sd=xx
|
||||
print(f'种植状态:{gs}-目前进度:{jd}')
|
||||
try:
|
||||
gsqd(uid,token)
|
||||
except Exception as e:
|
||||
print('签到出错')
|
||||
|
||||
try:
|
||||
gscnlsd(uid,token)
|
||||
except Exception as e:
|
||||
print('吹牛出错')
|
||||
|
||||
try:
|
||||
gskbx(uid,token)
|
||||
except Exception as e:
|
||||
print('开宝箱出错')
|
||||
|
||||
try:
|
||||
print('--------做任务---------')
|
||||
cxrw(uid,token)
|
||||
print('--------做任务结束---------')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
else:
|
||||
print('种树吧……')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
#查水滴浇水
|
||||
try:
|
||||
xx = cxguosju(uid,token)
|
||||
if xx != None:
|
||||
gs,jd,sd=xx
|
||||
print(f'目前水滴:{sd}')
|
||||
print(f'可浇水:{sd//10}次')
|
||||
for xx in range(sd//10):
|
||||
print(f"第{xx+1}次浇水-目前进度:{jsjs(uid,token)}")
|
||||
|
||||
else:
|
||||
print('种树吧……')
|
||||
except Exception as e:
|
||||
print('有请,下一位')
|
||||
|
||||
#吹牛领水滴
|
||||
def gscnlsd(uid,token):
|
||||
print('----------')
|
||||
while True:
|
||||
time.sleep(3)
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"b7b5ec0727fb4c8ea230ed1243c61c79","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f1bd01f08f3b42c682d3f1058ba838a8","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/cow/goal',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"吹牛成功目前有水滴:{tijiao['data']['water_wallet']['cur']}")
|
||||
else:
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"73fbe801e5844806a448836ca6eab7bd","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"57cac99225a3488da3bcf1c305e85b31","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/cow/award',json=data).json()
|
||||
print('水滴已满100,不吹牛了,领了')
|
||||
break
|
||||
print('----------')
|
||||
|
||||
#开宝箱
|
||||
def gskbx(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"ea8dbe2ec151431ca5cd95b3665a000f","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"3fc9e729fb75452a8d194a7cfff7d236","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/recCommonBox',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"开宝箱成功获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}")
|
||||
|
||||
#浇水
|
||||
def jsjs(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2b331082770f4992a56178342bb879b2","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"00959013f7744e01b9fdbe879bf629bc","xpsid_share":"","is_fast":False,"water_status":0,"platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newWatering',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
return tijiao['data']['tree_progress']
|
||||
|
||||
#签到
|
||||
def gsqd(uid,token):
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"610983df35da43faae623d8a8b8d9710","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f5232018989841e680abc96dae938ae4","xpsid_share":"","platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/sign',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
print(f"签到获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}")
|
||||
|
||||
#查询任务、提交、领取
|
||||
def cxrw(uid,token):
|
||||
#查询
|
||||
tijiao = requests.get(url=f'https://game.xiaojukeji.com/api/game/mission/get?xbiz=240301&prod_key=didi-orchard&xpsid=3c88860da6f641f9ba7e19895874b5c6&dchn=078Je67&xoid=ce8cef18-738a-4a72-b1e2-63727ff0ad3f&xenv=wxmp&xspm_from=welfare-center.none.c1324.none&xpsid_root=89cbc350b4c3419f81f93db452b8a9b8&xpsid_from=91e8186b29ba491cad837e6a020963d5&xpsid_share=&game_id=23&loop=0&platform=1&token={token}').json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
|
||||
for i in tijiao['data']['missions']:
|
||||
#提交
|
||||
headers = {'Content-Type':'application/json;charset=UTF-8'}
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"3c88860da6f641f9ba7e19895874b5c6","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"91e8186b29ba491cad837e6a020963d5","xpsid_share":"","mission_id":i['id'],"game_id":23,"platform":1,"token":token}
|
||||
tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/update',json=data,headers=headers).json()
|
||||
if tijiao1['errmsg'] == 'success':
|
||||
print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已完成")
|
||||
tijiao2 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/award',json=data,headers=headers).json()
|
||||
if tijiao2['errmsg'] == 'success':
|
||||
print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已领取")
|
||||
else:
|
||||
print(f'{uid}-登录错误')
|
||||
|
||||
#查询果树状态
|
||||
def cxguosju(uid,token):
|
||||
#查询
|
||||
data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2f346355e5c2442c8e7a337cd7888b48","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"41e43325ea244de888ce9f965bffab32","xpsid_share":"","assist_type":0,"encode_uid":"","is_old_player":True,"platform":1,"token":token,"game_id":23}
|
||||
tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newEnter',json=data).json()
|
||||
if tijiao['errmsg'] == 'success':
|
||||
for i in tijiao['data']['trees_cfg']:
|
||||
|
||||
if i['tree_id'] == tijiao['data']['tree_info']['tree_id']:
|
||||
return i['desc'],tijiao['data']['tree_info']['tree_progress'],tijiao['data']['tree_info']['pack_water']
|
||||
else:
|
||||
print(f'{uid}-登录错误')
|
||||
|
||||
if __name__ == '__main__':
|
||||
uid = 1
|
||||
token = ""
|
||||
if 'ddgyToken' in os.environ:
|
||||
fen = os.environ.get("ddgyToken").split("@")
|
||||
print(f'查找到{len(fen)}个账号')
|
||||
print('==================================')
|
||||
for duo in fen:
|
||||
|
||||
uid,token = duo.split("&")
|
||||
try:
|
||||
main(uid,token)
|
||||
print('============📣结束📣============')
|
||||
except Exception as e:
|
||||
print('小错误')
|
||||
else:
|
||||
print('不存在青龙变量,本地运行')
|
||||
if uid == '' or token == '':
|
||||
print('本地账号密码为空')
|
||||
exit()
|
||||
else:
|
||||
try:
|
||||
main(uid,token)
|
||||
print('============📣结束📣============')
|
||||
except Exception as e:
|
||||
print('小错误')
|
||||
458
脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js
Normal file
458
脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js
Normal file
File diff suppressed because one or more lines are too long
459
脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js
Normal file
459
脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js
Normal file
File diff suppressed because one or more lines are too long
18
脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js
Normal file
18
脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js
Normal file
File diff suppressed because one or more lines are too long
179
脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js
Normal file
179
脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js
Normal file
@@ -0,0 +1,179 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 爱玛会员俱乐部.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: b27f0206715bcfbda1934198123c52ee839a0a337f5cd406725b82356096a19a
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.08 10.25
|
||||
@Description: 爱玛会员俱乐部 小程序
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
------------------------------------------
|
||||
变量名 aima
|
||||
变量值 https://scrm.aimatech.com/aima 请求头Headers中access-token的值 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("爱玛会员俱乐部");
|
||||
let ckName = `aima`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
await signInSearch()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
function MD5(data) {
|
||||
const crypto = require('crypto');
|
||||
return crypto.createHash('md5').update(data).digest('hex');
|
||||
}
|
||||
async function signInSearch() {
|
||||
let accessToken = $.token.substring(50, 80)
|
||||
let nonce = $.uuid()
|
||||
let time = (new Date).getTime()
|
||||
let text = `App-IdscrmTime-Stamp${time}TraceLog-Id${nonce}Access-Token${accessToken}AimaScrm321_^`
|
||||
let data = JSON.stringify({
|
||||
"activityId": "100000893"
|
||||
});
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://scrm.aimatech.com/aima/wxclient/mkt/activities/sign:search',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'time-stamp': time,
|
||||
'charset': 'utf-8',
|
||||
'app-id': 'scrm',
|
||||
'sign': MD5(text),
|
||||
'access-token': $.token,
|
||||
'tracelog-id': nonce,
|
||||
'Referer': 'https://servicewechat.com/wx2dcfb409fd5ddfb4/162/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result.code == 200) {
|
||||
if (result.content.signed !== 1) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await signInJoin()
|
||||
} else {
|
||||
$.log(`已签到 ===> 什么都不做`)
|
||||
}
|
||||
} else {
|
||||
$.log(`签到查询失败`)
|
||||
}
|
||||
}
|
||||
async function signInJoin() {
|
||||
let accessToken = $.token.substring(50, 80)
|
||||
let nonce = $.uuid()
|
||||
let time = (new Date).getTime()
|
||||
let text = `App-IdscrmTime-Stamp${time}TraceLog-Id${nonce}Access-Token${accessToken}AimaScrm321_^`
|
||||
let data = JSON.stringify({
|
||||
"activityId": "100000893",
|
||||
"activitySceneId": null
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://scrm.aimatech.com/aima/wxclient/mkt/activities/sign:join',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'time-stamp': time,
|
||||
'charset': 'utf-8',
|
||||
'app-id': 'scrm',
|
||||
'sign': MD5(text),
|
||||
'access-token': $.token,
|
||||
'tracelog-id': nonce,
|
||||
'Referer': 'https://servicewechat.com/wx2dcfb409fd5ddfb4/162/page-frame.html'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result.code == 200) {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败 [${result.chnDesc}]`)
|
||||
}
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
803
脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js
Normal file
803
脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js
Normal file
@@ -0,0 +1,803 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 牙博士口腔微商城.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: c59a947af6f68dad497b9b5b0a2b26392852946fcf3883c48748c0087c0ab939
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
小程序:牙博士口腔微商城
|
||||
变量:ybshd多号&或换行
|
||||
抓包https://mall.0512kq.cn data内的token
|
||||
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
const $ = new Env("牙博士口腔微商城"),
|
||||
axios = require("axios");
|
||||
let request = require("request");
|
||||
const crypto = require("crypto");
|
||||
request = request.defaults({
|
||||
"jar": true
|
||||
});
|
||||
const {
|
||||
log
|
||||
} = console,
|
||||
Notify = 1,
|
||||
debug = 0;
|
||||
let ybshd = ($.isNode() ? process.env.ybshd : $.getdata("ybshd")) || "",
|
||||
ybshdArr = [],
|
||||
data = "",
|
||||
msg = "",
|
||||
a = {};
|
||||
!(async () => {
|
||||
if (typeof $request !== "undefined") await GetRewrite();else {
|
||||
if (!(await Envs())) return;else {
|
||||
log("\n\n============================================= \n脚本执行 - 北京时间(UTC+8):" + new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000).toLocaleString() + " \n=============================================\n");
|
||||
log("\n=================== 共找到 " + ybshdArr.length + " 个账号 ===================");
|
||||
debug && log("【debug】 这是你的全部账号数组:\n " + ybshdArr);
|
||||
for (let _0xf864f1 = 0; _0xf864f1 < ybshdArr.length; _0xf864f1++) {
|
||||
let _0x372177 = _0xf864f1 + 1;
|
||||
addNotifyStr("\n==== 开始【第 " + _0x372177 + " 个账号】====\n", true);
|
||||
ybshd = ybshdArr[_0xf864f1];
|
||||
await checkin();
|
||||
await checkin2();
|
||||
await checkin4();
|
||||
await checkin3();
|
||||
}
|
||||
}
|
||||
}
|
||||
})().catch(_0x15f3ac => log(_0x15f3ac)).finally(() => $.done());
|
||||
async function checkin() {
|
||||
const _0x5e6af0 = new Date().getTime();
|
||||
let _0x47b502 = Object.assign(filterEmpty(a), {
|
||||
"task_id": 1,
|
||||
"integralactivity_id": 6,
|
||||
"code_type": 1,
|
||||
"ad": 33,
|
||||
"activity_code": 1,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x5e6af0,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x228093 = urlEncode(ksort(_0x47b502)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x47b502.sign = crypto.createHash("md5").update(encodeURIComponent(_0x228093)).digest("hex").toUpperCase(), new Promise(_0x5a9287 => {
|
||||
var _0x575110 = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.Integral/sign_in",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x47b502
|
||||
};
|
||||
if (debug) {
|
||||
log("\n【debug】=============== 这是 请求 url ===============");
|
||||
log(JSON.stringify(_0x575110));
|
||||
}
|
||||
axios.request(_0x575110).then(async function (_0x3fb91f) {
|
||||
try {
|
||||
data = _0x3fb91f.data;
|
||||
if (debug) {
|
||||
log("\n\n【debug】===============这是 返回data==============");
|
||||
log(JSON.stringify(_0x3fb91f.data));
|
||||
}
|
||||
log("签到:" + data.msg);
|
||||
} catch (_0x5ef3c8) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x4c1c14) {
|
||||
console.error(_0x4c1c14);
|
||||
}).then(_0x2631da => {
|
||||
_0x5a9287();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin1() {
|
||||
const _0x15e35e = new Date().getTime();
|
||||
let _0x30ad1f = Object.assign(filterEmpty(a), {
|
||||
"integralactivity_id": 6,
|
||||
"id": 4,
|
||||
"visit_type": 676,
|
||||
"ad": 33,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x15e35e,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x18e6e4 = urlEncode(ksort(_0x30ad1f)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x30ad1f.sign = crypto.createHash("md5").update(encodeURIComponent(_0x18e6e4)).digest("hex").toUpperCase(), new Promise(_0x3ee8de => {
|
||||
var _0xd25c24 = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/index",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x30ad1f
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0xd25c24)));
|
||||
axios.request(_0xd25c24).then(async function (_0x4d4aac) {
|
||||
try {
|
||||
data = _0x4d4aac.data;
|
||||
debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x4d4aac.data)));
|
||||
cjid = data.data.raffle_detail.integral_raffle_number;
|
||||
log("剩余抽奖次数: " + data.data.raffle_detail.integral_raffle_number);
|
||||
for (let _0x3c0c4d = 1; _0x3c0c4d <= cjid; _0x3c0c4d++) {
|
||||
cjid > 0 && (await checkin2(), await $.wait(3000));
|
||||
}
|
||||
} catch (_0x3c64a3) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x40e185) {
|
||||
console.error(_0x40e185);
|
||||
}).then(_0x180f73 => {
|
||||
_0x3ee8de();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin2() {
|
||||
const _0x3bb3f4 = new Date().getTime();
|
||||
let _0x1ee9fa = Object.assign(filterEmpty(a), {
|
||||
"integralactivity_id": 6,
|
||||
"id": 4,
|
||||
"visit_type": 676,
|
||||
"raffle_type": 1,
|
||||
"code_type": 1,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x3bb3f4,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x1abd60 = urlEncode(ksort(_0x1ee9fa)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x1ee9fa.sign = crypto.createHash("md5").update(encodeURIComponent(_0x1abd60)).digest("hex").toUpperCase(), new Promise(_0x4f9a6c => {
|
||||
var _0x57470f = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x1ee9fa
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x57470f)));
|
||||
axios.request(_0x57470f).then(async function (_0xe3dd5b) {
|
||||
try {
|
||||
data = _0xe3dd5b.data;
|
||||
debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0xe3dd5b.data)));
|
||||
if (data.code == 1) {
|
||||
log("抽奖获得: " + data.data.prize_name);
|
||||
} else log("抽奖: " + data.msg);
|
||||
await checkin6();
|
||||
} catch (_0x147090) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x137b0a) {
|
||||
console.error(_0x137b0a);
|
||||
}).then(_0xa1be23 => {
|
||||
_0x4f9a6c();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin4() {
|
||||
const _0x2e127c = new Date().getTime();
|
||||
let _0x4eecb0 = Object.assign(filterEmpty(a), {
|
||||
"integralactivity_id": 6,
|
||||
"id": 4,
|
||||
"visit_type": 676,
|
||||
"raffle_type": 2,
|
||||
"code_type": 1,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x2e127c,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x139259 = urlEncode(ksort(_0x4eecb0)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x4eecb0.sign = crypto.createHash("md5").update(encodeURIComponent(_0x139259)).digest("hex").toUpperCase(), new Promise(_0x11b002 => {
|
||||
var _0x44d764 = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x4eecb0
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x44d764)));
|
||||
axios.request(_0x44d764).then(async function (_0x1886fc) {
|
||||
try {
|
||||
data = _0x1886fc.data;
|
||||
debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x1886fc.data)));
|
||||
data.code == 1 ? log("抽奖获得: " + data.data.prize_name) : log("抽奖: " + data.msg);
|
||||
await checkin5();
|
||||
} catch (_0x21d0a9) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x4abce3) {
|
||||
console.error(_0x4abce3);
|
||||
}).then(_0x428dc1 => {
|
||||
_0x11b002();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin5() {
|
||||
const _0x28e915 = new Date().getTime();
|
||||
let _0x34dd56 = Object.assign(filterEmpty(a), {
|
||||
"integralactivity_id": 6,
|
||||
"id": 4,
|
||||
"visit_type": 676,
|
||||
"raffle_type": 3,
|
||||
"code_type": 1,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x28e915,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x213d07 = urlEncode(ksort(_0x34dd56)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x34dd56.sign = crypto.createHash("md5").update(encodeURIComponent(_0x213d07)).digest("hex").toUpperCase(), new Promise(_0x36bc1c => {
|
||||
var _0x493337 = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x34dd56
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x493337)));
|
||||
axios.request(_0x493337).then(async function (_0x22f093) {
|
||||
try {
|
||||
data = _0x22f093.data;
|
||||
debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x22f093.data)));
|
||||
data.code == 1 ? log("抽奖获得: " + data.data.prize_name) : log("抽奖: " + data.msg);
|
||||
} catch (_0x31b5f7) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x3e4dc5) {
|
||||
console.error(_0x3e4dc5);
|
||||
}).then(_0x380da5 => {
|
||||
_0x36bc1c();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin6() {
|
||||
const _0x481d2a = new Date().getTime();
|
||||
let _0xdecb56 = Object.assign(filterEmpty(a), {
|
||||
"ad": 33,
|
||||
"share_id": 497175,
|
||||
"integralactivity_id": 6,
|
||||
"ascription_id": 59338,
|
||||
"activity_code": 1,
|
||||
"code_type": 1,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x481d2a,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x1d0574 = urlEncode(ksort(_0xdecb56)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0xdecb56.sign = crypto.createHash("md5").update(encodeURIComponent(_0x1d0574)).digest("hex").toUpperCase(), new Promise(_0x576d65 => {
|
||||
var _0xfc6f32 = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.Integral/user_wecom_assist",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0xdecb56
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0xfc6f32)));
|
||||
axios.request(_0xfc6f32).then(async function (_0x227649) {
|
||||
try {
|
||||
data = _0x227649.data;
|
||||
debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x227649.data)));
|
||||
} catch (_0x3e1eeb) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x357c4a) {
|
||||
console.error(_0x357c4a);
|
||||
}).then(_0x4e4a63 => {
|
||||
_0x576d65();
|
||||
});
|
||||
});
|
||||
}
|
||||
async function checkin3() {
|
||||
const _0x553ddb = new Date().getTime();
|
||||
let _0x1e6210 = Object.assign(filterEmpty(a), {
|
||||
"page": 1,
|
||||
"mechanism_id": 10042,
|
||||
"wxapp_id": 10004,
|
||||
"token": ybshd,
|
||||
"timestamp": _0x553ddb,
|
||||
"secret": "36c8edde3d61c0411511d3b1866f0680"
|
||||
}),
|
||||
_0x48186a = urlEncode(ksort(_0x1e6210)) + "36c8edde3d61c0411511d3b1866f0680";
|
||||
return _0x1e6210.sign = crypto.createHash("md5").update(encodeURIComponent(_0x48186a)).digest("hex").toUpperCase(), new Promise(_0x77822c => {
|
||||
var _0x1ddc2e = {
|
||||
"method": "post",
|
||||
"url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/goods/goodsList",
|
||||
"headers": {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"xweb_xhr": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185"
|
||||
},
|
||||
"data": _0x1e6210
|
||||
};
|
||||
debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x1ddc2e)));
|
||||
axios.request(_0x1ddc2e).then(async function (_0x58e452) {
|
||||
try {
|
||||
data = _0x58e452.data;
|
||||
if (debug) {
|
||||
log("\n\n【debug】===============这是 返回data==============");
|
||||
log(JSON.stringify(_0x58e452.data));
|
||||
}
|
||||
log("积分: " + data.data.per_page);
|
||||
} catch (_0x42e19d) {
|
||||
log("异常:" + data + ",原因:" + data.message);
|
||||
}
|
||||
}).catch(function (_0x513a19) {
|
||||
console.error(_0x513a19);
|
||||
}).then(_0x125127 => {
|
||||
_0x77822c();
|
||||
});
|
||||
});
|
||||
}
|
||||
function filterEmpty(_0x40bf95) {
|
||||
var _0x2a666e = {};
|
||||
for (var _0x55a62f in _0x40bf95) (_0x40bf95[_0x55a62f] && "null" !== _0x40bf95[_0x55a62f] && "" !== _0x40bf95[_0x55a62f] || "0" == _0x40bf95[_0x55a62f]) && (_0x2a666e[_0x55a62f] = _0x40bf95[_0x55a62f]);
|
||||
return _0x2a666e;
|
||||
}
|
||||
function urlEncode(_0xde6c8e) {
|
||||
var _0x337251 = [];
|
||||
for (var _0x5a67e9 in _0xde6c8e) {
|
||||
var _0x366784 = _0xde6c8e[_0x5a67e9];
|
||||
_0x366784.constructor == Array ? _0x366784.forEach(function (_0x2278ea) {
|
||||
_0x337251.push(_0x5a67e9 + "=" + _0x2278ea);
|
||||
}) : _0x337251.push(_0x5a67e9 + "=" + _0x366784);
|
||||
}
|
||||
return _0x337251.join("&");
|
||||
}
|
||||
function ksort(_0x7252c0) {
|
||||
var _0x566d89 = {},
|
||||
_0x704d51 = Object.keys(_0x7252c0);
|
||||
return _0x704d51.sort(), _0x704d51.forEach(function (_0x164aaf) {
|
||||
_0x566d89[_0x164aaf] = _0x7252c0[_0x164aaf];
|
||||
}), _0x566d89;
|
||||
}
|
||||
async function Envs() {
|
||||
if (ybshd) {
|
||||
if (ybshd.indexOf("&") != -1) ybshd.split("&").forEach(_0x876ee8 => {
|
||||
ybshdArr.push(_0x876ee8);
|
||||
});else {
|
||||
if (ybshd.indexOf("\n") != -1) {
|
||||
ybshd.split("\n").forEach(_0x585c8a => {
|
||||
ybshdArr.push(_0x585c8a);
|
||||
});
|
||||
} else ybshdArr.push(ybshd);
|
||||
}
|
||||
} else {
|
||||
log("\n 【" + $.name + "】:未填写变量 ybshd");
|
||||
return;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function addNotifyStr(_0x4204a4, _0x192dcb = true) {
|
||||
_0x192dcb && log(_0x4204a4 + "\n");
|
||||
msg += _0x4204a4 + "\n";
|
||||
}
|
||||
async function SendMsg(_0x4f5738) {
|
||||
if (!_0x4f5738) return;
|
||||
if (Notify > 0) {
|
||||
if ($.isNode()) {
|
||||
var _0x4163b3 = require("./sendNotify");
|
||||
await _0x4163b3.sendNotify($.name, _0x4f5738);
|
||||
} else {
|
||||
$.msg(_0x4f5738);
|
||||
}
|
||||
} else {
|
||||
log(_0x4f5738);
|
||||
}
|
||||
}
|
||||
function randomString(_0x3c1bcf) {
|
||||
for (var _0x3c8a0a = _0x3c1bcf > 0 && void 0 !== _0x3c1bcf ? _0x3c1bcf : 21, _0x113152 = ""; _0x113152.length < _0x3c8a0a;) _0x113152 += Math.random().toString(36).slice(2);
|
||||
return _0x113152.slice(0, _0x3c8a0a);
|
||||
}
|
||||
function randomnum(_0x59309a) {
|
||||
_0x59309a = _0x59309a || 32;
|
||||
var _0x1fe653 = "1234567890",
|
||||
_0x18e61f = _0x1fe653.length,
|
||||
_0x467dd7 = "";
|
||||
for (i = 0; i < _0x59309a; i++) _0x467dd7 += _0x1fe653.charAt(Math.floor(Math.random() * _0x18e61f));
|
||||
return _0x467dd7;
|
||||
}
|
||||
function Env(_0x4ad131, _0x221774) {
|
||||
"undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0);
|
||||
class _0x4a9c87 {
|
||||
constructor(_0x21f694) {
|
||||
this.env = _0x21f694;
|
||||
}
|
||||
["send"](_0xb05397, _0x4e443b = "GET") {
|
||||
_0xb05397 = "string" == typeof _0xb05397 ? {
|
||||
"url": _0xb05397
|
||||
} : _0xb05397;
|
||||
let _0x3ac6d8 = this.get;
|
||||
return "POST" === _0x4e443b && (_0x3ac6d8 = this.post), new Promise((_0x1c415c, _0x239f8f) => {
|
||||
_0x3ac6d8.call(this, _0xb05397, (_0x28a769, _0x25365f, _0x40dc7a) => {
|
||||
_0x28a769 ? _0x239f8f(_0x28a769) : _0x1c415c(_0x25365f);
|
||||
});
|
||||
});
|
||||
}
|
||||
["get"](_0x4be11f) {
|
||||
return this.send.call(this.env, _0x4be11f);
|
||||
}
|
||||
["post"](_0x434bcd) {
|
||||
return this.send.call(this.env, _0x434bcd, "POST");
|
||||
}
|
||||
}
|
||||
return new class {
|
||||
constructor(_0x5c4206, _0x170692) {
|
||||
this.name = _0x5c4206;
|
||||
this.http = new _0x4a9c87(this);
|
||||
this.data = null;
|
||||
this.dataFile = "box.dat";
|
||||
this.logs = [];
|
||||
this.isMute = !1;
|
||||
this.isNeedRewrite = !1;
|
||||
this.logSeparator = "\n";
|
||||
this.startTime = new Date().getTime();
|
||||
Object.assign(this, _0x170692);
|
||||
this.log("", "📣" + this.name + ", 开始!");
|
||||
}
|
||||
["isNode"]() {
|
||||
return "undefined" != typeof module && !!module.exports;
|
||||
}
|
||||
["isQuanX"]() {
|
||||
return "undefined" != typeof $task;
|
||||
}
|
||||
["isSurge"]() {
|
||||
return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
|
||||
}
|
||||
["isLoon"]() {
|
||||
return "undefined" != typeof $loon;
|
||||
}
|
||||
["toObj"](_0x184553, _0x149eea = null) {
|
||||
try {
|
||||
return JSON.parse(_0x184553);
|
||||
} catch {
|
||||
return _0x149eea;
|
||||
}
|
||||
}
|
||||
["toStr"](_0x386d47, _0x2e7883 = null) {
|
||||
try {
|
||||
return JSON.stringify(_0x386d47);
|
||||
} catch {
|
||||
return _0x2e7883;
|
||||
}
|
||||
}
|
||||
["getjson"](_0x111eeb, _0x555009) {
|
||||
let _0x38d290 = _0x555009;
|
||||
const _0x4bc371 = this.getdata(_0x111eeb);
|
||||
if (_0x4bc371) try {
|
||||
_0x38d290 = JSON.parse(this.getdata(_0x111eeb));
|
||||
} catch {}
|
||||
return _0x38d290;
|
||||
}
|
||||
["setjson"](_0x414404, _0x221481) {
|
||||
try {
|
||||
return this.setdata(JSON.stringify(_0x414404), _0x221481);
|
||||
} catch {
|
||||
return !1;
|
||||
}
|
||||
}
|
||||
["getScript"](_0x2e1e52) {
|
||||
return new Promise(_0x33e3e6 => {
|
||||
this.get({
|
||||
"url": _0x2e1e52
|
||||
}, (_0x279bae, _0x4802f8, _0x437331) => _0x33e3e6(_0x437331));
|
||||
});
|
||||
}
|
||||
["runScript"](_0x1313cf, _0x23fee0) {
|
||||
return new Promise(_0x1a5a5d => {
|
||||
let _0x276ed9 = this.getdata("@chavy_boxjs_userCfgs.httpapi");
|
||||
_0x276ed9 = _0x276ed9 ? _0x276ed9.replace(/\n/g, "").trim() : _0x276ed9;
|
||||
let _0x5bf72a = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");
|
||||
_0x5bf72a = _0x5bf72a ? 1 * _0x5bf72a : 20;
|
||||
_0x5bf72a = _0x23fee0 && _0x23fee0.timeout ? _0x23fee0.timeout : _0x5bf72a;
|
||||
const [_0x44a369, _0x324f33] = _0x276ed9.split("@"),
|
||||
_0x28a18d = {
|
||||
"url": "http://" + _0x324f33 + "/v1/scripting/evaluate",
|
||||
"body": {
|
||||
"script_text": _0x1313cf,
|
||||
"mock_type": "cron",
|
||||
"timeout": _0x5bf72a
|
||||
},
|
||||
"headers": {
|
||||
"X-Key": _0x44a369,
|
||||
"Accept": "*/*"
|
||||
}
|
||||
};
|
||||
this.post(_0x28a18d, (_0x4044ac, _0x2a3d8f, _0x263a0e) => _0x1a5a5d(_0x263a0e));
|
||||
}).catch(_0x4de70b => this.logErr(_0x4de70b));
|
||||
}
|
||||
["loaddata"]() {
|
||||
if (!this.isNode()) return {};
|
||||
{
|
||||
this.fs = this.fs ? this.fs : require("fs");
|
||||
this.path = this.path ? this.path : require("path");
|
||||
const _0x5bd5ba = this.path.resolve(this.dataFile),
|
||||
_0xff8459 = this.path.resolve(process.cwd(), this.dataFile),
|
||||
_0x4a9220 = this.fs.existsSync(_0x5bd5ba),
|
||||
_0x4f4469 = !_0x4a9220 && this.fs.existsSync(_0xff8459);
|
||||
if (!_0x4a9220 && !_0x4f4469) return {};
|
||||
{
|
||||
const _0x11f53e = _0x4a9220 ? _0x5bd5ba : _0xff8459;
|
||||
try {
|
||||
return JSON.parse(this.fs.readFileSync(_0x11f53e));
|
||||
} catch (_0x1e1c51) {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
["writedata"]() {
|
||||
if (this.isNode()) {
|
||||
this.fs = this.fs ? this.fs : require("fs");
|
||||
this.path = this.path ? this.path : require("path");
|
||||
const _0x69929 = this.path.resolve(this.dataFile),
|
||||
_0x59abfa = this.path.resolve(process.cwd(), this.dataFile),
|
||||
_0x78ed39 = this.fs.existsSync(_0x69929),
|
||||
_0x5eda83 = !_0x78ed39 && this.fs.existsSync(_0x59abfa),
|
||||
_0x387d54 = JSON.stringify(this.data);
|
||||
_0x78ed39 ? this.fs.writeFileSync(_0x69929, _0x387d54) : _0x5eda83 ? this.fs.writeFileSync(_0x59abfa, _0x387d54) : this.fs.writeFileSync(_0x69929, _0x387d54);
|
||||
}
|
||||
}
|
||||
["lodash_get"](_0x57987d, _0x5c0a6b, _0x43a4ef) {
|
||||
const _0x21d801 = _0x5c0a6b.replace(/\[(\d+)\]/g, ".$1").split(".");
|
||||
let _0x3f156f = _0x57987d;
|
||||
for (const _0x216dd4 of _0x21d801) if (_0x3f156f = Object(_0x3f156f)[_0x216dd4], void 0 === _0x3f156f) return _0x43a4ef;
|
||||
return _0x3f156f;
|
||||
}
|
||||
["lodash_set"](_0x1a7527, _0x3edc87, _0x3723f8) {
|
||||
return Object(_0x1a7527) !== _0x1a7527 ? _0x1a7527 : (Array.isArray(_0x3edc87) || (_0x3edc87 = _0x3edc87.toString().match(/[^.[\]]+/g) || []), _0x3edc87.slice(0, -1).reduce((_0x2076aa, _0x11ae68, _0x734af1) => Object(_0x2076aa[_0x11ae68]) === _0x2076aa[_0x11ae68] ? _0x2076aa[_0x11ae68] : _0x2076aa[_0x11ae68] = Math.abs(_0x3edc87[_0x734af1 + 1]) >> 0 == +_0x3edc87[_0x734af1 + 1] ? [] : {}, _0x1a7527)[_0x3edc87[_0x3edc87.length - 1]] = _0x3723f8, _0x1a7527);
|
||||
}
|
||||
["getdata"](_0x267feb) {
|
||||
let _0x17f1ea = this.getval(_0x267feb);
|
||||
if (/^@/.test(_0x267feb)) {
|
||||
const [, _0x21a238, _0x3d0fd8] = /^@(.*?)\.(.*?)$/.exec(_0x267feb),
|
||||
_0x1dd852 = _0x21a238 ? this.getval(_0x21a238) : "";
|
||||
if (_0x1dd852) try {
|
||||
const _0x11766e = JSON.parse(_0x1dd852);
|
||||
_0x17f1ea = _0x11766e ? this.lodash_get(_0x11766e, _0x3d0fd8, "") : _0x17f1ea;
|
||||
} catch (_0x35ec82) {
|
||||
_0x17f1ea = "";
|
||||
}
|
||||
}
|
||||
return _0x17f1ea;
|
||||
}
|
||||
["setdata"](_0x38ce29, _0x59b948) {
|
||||
let _0x3ae2b6 = false;
|
||||
if (/^@/.test(_0x59b948)) {
|
||||
const [, _0x2f504e, _0x26f2c8] = /^@(.*?)\.(.*?)$/.exec(_0x59b948),
|
||||
_0x38f837 = this.getval(_0x2f504e),
|
||||
_0x555d73 = _0x2f504e ? "null" === _0x38f837 ? null : _0x38f837 || "{}" : "{}";
|
||||
try {
|
||||
const _0x1f3dd6 = JSON.parse(_0x555d73);
|
||||
this.lodash_set(_0x1f3dd6, _0x26f2c8, _0x38ce29);
|
||||
_0x3ae2b6 = this.setval(JSON.stringify(_0x1f3dd6), _0x2f504e);
|
||||
} catch (_0x595836) {
|
||||
const _0x2c9487 = {};
|
||||
this.lodash_set(_0x2c9487, _0x26f2c8, _0x38ce29);
|
||||
_0x3ae2b6 = this.setval(JSON.stringify(_0x2c9487), _0x2f504e);
|
||||
}
|
||||
} else _0x3ae2b6 = this.setval(_0x38ce29, _0x59b948);
|
||||
return _0x3ae2b6;
|
||||
}
|
||||
["getval"](_0x2bd501) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.read(_0x2bd501) : this.isQuanX() ? $prefs.valueForKey(_0x2bd501) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x2bd501]) : this.data && this.data[_0x2bd501] || null;
|
||||
}
|
||||
["setval"](_0x37dd3f, _0x20d779) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.write(_0x37dd3f, _0x20d779) : this.isQuanX() ? $prefs.setValueForKey(_0x37dd3f, _0x20d779) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x20d779] = _0x37dd3f, this.writedata(), !0) : this.data && this.data[_0x20d779] || null;
|
||||
}
|
||||
["initGotEnv"](_0x3a44a5) {
|
||||
this.got = this.got ? this.got : require("got");
|
||||
this.cktough = this.cktough ? this.cktough : require("tough-cookie");
|
||||
this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar();
|
||||
_0x3a44a5 && (_0x3a44a5.headers = _0x3a44a5.headers ? _0x3a44a5.headers : {}, void 0 === _0x3a44a5.headers.Cookie && void 0 === _0x3a44a5.cookieJar && (_0x3a44a5.cookieJar = this.ckjar));
|
||||
}
|
||||
["get"](_0xa2470, _0x1acb6d = () => {}) {
|
||||
_0xa2470.headers && (delete _0xa2470.headers["Content-Type"], delete _0xa2470.headers["Content-Length"]);
|
||||
this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (_0xa2470.headers = _0xa2470.headers || {}, Object.assign(_0xa2470.headers, {
|
||||
"X-Surge-Skip-Scripting": !1
|
||||
})), $httpClient.get(_0xa2470, (_0x6376de, _0x3f6fca, _0x194990) => {
|
||||
!_0x6376de && _0x3f6fca && (_0x3f6fca.body = _0x194990, _0x3f6fca.statusCode = _0x3f6fca.status);
|
||||
_0x1acb6d(_0x6376de, _0x3f6fca, _0x194990);
|
||||
})) : this.isQuanX() ? (this.isNeedRewrite && (_0xa2470.opts = _0xa2470.opts || {}, Object.assign(_0xa2470.opts, {
|
||||
"hints": !1
|
||||
})), $task.fetch(_0xa2470).then(_0x4f87e1 => {
|
||||
const {
|
||||
statusCode: _0x470202,
|
||||
statusCode: _0x80c4a8,
|
||||
headers: _0x5aed49,
|
||||
body: _0x8fba9
|
||||
} = _0x4f87e1;
|
||||
_0x1acb6d(null, {
|
||||
"status": _0x470202,
|
||||
"statusCode": _0x80c4a8,
|
||||
"headers": _0x5aed49,
|
||||
"body": _0x8fba9
|
||||
}, _0x8fba9);
|
||||
}, _0x16c9fc => _0x1acb6d(_0x16c9fc))) : this.isNode() && (this.initGotEnv(_0xa2470), this.got(_0xa2470).on("redirect", (_0x294f4b, _0x543360) => {
|
||||
try {
|
||||
if (_0x294f4b.headers["set-cookie"]) {
|
||||
const _0x4bf383 = _0x294f4b.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();
|
||||
_0x4bf383 && this.ckjar.setCookieSync(_0x4bf383, null);
|
||||
_0x543360.cookieJar = this.ckjar;
|
||||
}
|
||||
} catch (_0x4080b1) {
|
||||
this.logErr(_0x4080b1);
|
||||
}
|
||||
}).then(_0x1a07ae => {
|
||||
const {
|
||||
statusCode: _0x39dbba,
|
||||
statusCode: _0xf03482,
|
||||
headers: _0x4125bf,
|
||||
body: _0x1e63ff
|
||||
} = _0x1a07ae;
|
||||
_0x1acb6d(null, {
|
||||
"status": _0x39dbba,
|
||||
"statusCode": _0xf03482,
|
||||
"headers": _0x4125bf,
|
||||
"body": _0x1e63ff
|
||||
}, _0x1e63ff);
|
||||
}, _0x301d6b => {
|
||||
const {
|
||||
message: _0x3ddb03,
|
||||
response: _0x36ff3a
|
||||
} = _0x301d6b;
|
||||
_0x1acb6d(_0x3ddb03, _0x36ff3a, _0x36ff3a && _0x36ff3a.body);
|
||||
}));
|
||||
}
|
||||
["post"](_0x14fe20, _0x15d495 = () => {}) {
|
||||
if (_0x14fe20.body && _0x14fe20.headers && !_0x14fe20.headers["Content-Type"] && (_0x14fe20.headers["Content-Type"] = "application/x-www-form-urlencoded"), _0x14fe20.headers && delete _0x14fe20.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (_0x14fe20.headers = _0x14fe20.headers || {}, Object.assign(_0x14fe20.headers, {
|
||||
"X-Surge-Skip-Scripting": !1
|
||||
})), $httpClient.post(_0x14fe20, (_0x5282aa, _0x4decf2, _0x189fd4) => {
|
||||
!_0x5282aa && _0x4decf2 && (_0x4decf2.body = _0x189fd4, _0x4decf2.statusCode = _0x4decf2.status);
|
||||
_0x15d495(_0x5282aa, _0x4decf2, _0x189fd4);
|
||||
});else {
|
||||
if (this.isQuanX()) _0x14fe20.method = "POST", this.isNeedRewrite && (_0x14fe20.opts = _0x14fe20.opts || {}, Object.assign(_0x14fe20.opts, {
|
||||
"hints": !1
|
||||
})), $task.fetch(_0x14fe20).then(_0x329a5f => {
|
||||
const {
|
||||
statusCode: _0x7bdac8,
|
||||
statusCode: _0x5ce9b8,
|
||||
headers: _0x112c57,
|
||||
body: _0x3cb4c4
|
||||
} = _0x329a5f;
|
||||
_0x15d495(null, {
|
||||
"status": _0x7bdac8,
|
||||
"statusCode": _0x5ce9b8,
|
||||
"headers": _0x112c57,
|
||||
"body": _0x3cb4c4
|
||||
}, _0x3cb4c4);
|
||||
}, _0x133692 => _0x15d495(_0x133692));else {
|
||||
if (this.isNode()) {
|
||||
this.initGotEnv(_0x14fe20);
|
||||
const {
|
||||
url: _0x20c43f,
|
||||
..._0x2465db
|
||||
} = _0x14fe20;
|
||||
this.got.post(_0x20c43f, _0x2465db).then(_0x41b9e6 => {
|
||||
const {
|
||||
statusCode: _0x5e807f,
|
||||
statusCode: _0x4cde24,
|
||||
headers: _0x3e1f3d,
|
||||
body: _0x4a0249
|
||||
} = _0x41b9e6;
|
||||
_0x15d495(null, {
|
||||
"status": _0x5e807f,
|
||||
"statusCode": _0x4cde24,
|
||||
"headers": _0x3e1f3d,
|
||||
"body": _0x4a0249
|
||||
}, _0x4a0249);
|
||||
}, _0x43970f => {
|
||||
const {
|
||||
message: _0x4fb7ef,
|
||||
response: _0x1cfbeb
|
||||
} = _0x43970f;
|
||||
_0x15d495(_0x4fb7ef, _0x1cfbeb, _0x1cfbeb && _0x1cfbeb.body);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
["time"](_0x4b1e33, _0x33bace = null) {
|
||||
const _0x46ced7 = _0x33bace ? new Date(_0x33bace) : new Date();
|
||||
let _0x3fb527 = {
|
||||
"M+": _0x46ced7.getMonth() + 1,
|
||||
"d+": _0x46ced7.getDate(),
|
||||
"H+": _0x46ced7.getHours(),
|
||||
"m+": _0x46ced7.getMinutes(),
|
||||
"s+": _0x46ced7.getSeconds(),
|
||||
"q+": Math.floor((_0x46ced7.getMonth() + 3) / 3),
|
||||
"S": _0x46ced7.getMilliseconds()
|
||||
};
|
||||
/(y+)/.test(_0x4b1e33) && (_0x4b1e33 = _0x4b1e33.replace(RegExp.$1, (_0x46ced7.getFullYear() + "").substr(4 - RegExp.$1.length)));
|
||||
for (let _0x447f50 in _0x3fb527) new RegExp("(" + _0x447f50 + ")").test(_0x4b1e33) && (_0x4b1e33 = _0x4b1e33.replace(RegExp.$1, 1 == RegExp.$1.length ? _0x3fb527[_0x447f50] : ("00" + _0x3fb527[_0x447f50]).substr(("" + _0x3fb527[_0x447f50]).length)));
|
||||
return _0x4b1e33;
|
||||
}
|
||||
["msg"](_0x516bbe = _0x4ad131, _0x3dbecd = "", _0x1ef3f3 = "", _0x43ca5d) {
|
||||
const _0x1508d0 = _0x427309 => {
|
||||
if (!_0x427309) return _0x427309;
|
||||
if ("string" == typeof _0x427309) return this.isLoon() ? _0x427309 : this.isQuanX() ? {
|
||||
"open-url": _0x427309
|
||||
} : this.isSurge() ? {
|
||||
"url": _0x427309
|
||||
} : void 0;
|
||||
if ("object" == typeof _0x427309) {
|
||||
if (this.isLoon()) {
|
||||
let _0x4eb487 = _0x427309.openUrl || _0x427309.url || _0x427309["open-url"],
|
||||
_0x4ef6c3 = _0x427309.mediaUrl || _0x427309["media-url"];
|
||||
return {
|
||||
"openUrl": _0x4eb487,
|
||||
"mediaUrl": _0x4ef6c3
|
||||
};
|
||||
}
|
||||
if (this.isQuanX()) {
|
||||
let _0x4a421e = _0x427309["open-url"] || _0x427309.url || _0x427309.openUrl,
|
||||
_0x281530 = _0x427309["media-url"] || _0x427309.mediaUrl;
|
||||
return {
|
||||
"open-url": _0x4a421e,
|
||||
"media-url": _0x281530
|
||||
};
|
||||
}
|
||||
if (this.isSurge()) {
|
||||
let _0x422b83 = _0x427309.url || _0x427309.openUrl || _0x427309["open-url"];
|
||||
return {
|
||||
"url": _0x422b83
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(_0x516bbe, _0x3dbecd, _0x1ef3f3, _0x1508d0(_0x43ca5d)) : this.isQuanX() && $notify(_0x516bbe, _0x3dbecd, _0x1ef3f3, _0x1508d0(_0x43ca5d))), !this.isMuteLog) {
|
||||
let _0x1a1a17 = ["", "==============📣系统通知📣=============="];
|
||||
_0x1a1a17.push(_0x516bbe);
|
||||
_0x3dbecd && _0x1a1a17.push(_0x3dbecd);
|
||||
_0x1ef3f3 && _0x1a1a17.push(_0x1ef3f3);
|
||||
console.log(_0x1a1a17.join("\n"));
|
||||
this.logs = this.logs.concat(_0x1a1a17);
|
||||
}
|
||||
}
|
||||
["log"](..._0x334f37) {
|
||||
_0x334f37.length > 0 && (this.logs = [...this.logs, ..._0x334f37]);
|
||||
console.log(_0x334f37.join(this.logSeparator));
|
||||
}
|
||||
["logErr"](_0x1aa1a7, _0x5406d0) {
|
||||
const _0x495930 = !this.isSurge() && !this.isQuanX() && !this.isLoon();
|
||||
_0x495930 ? this.log("", "📣" + this.name + ", 错误!", _0x1aa1a7.stack) : this.log("", "📣" + this.name + ", 错误!", _0x1aa1a7);
|
||||
}
|
||||
["wait"](_0x4e1463) {
|
||||
return new Promise(_0x67aa53 => setTimeout(_0x67aa53, _0x4e1463));
|
||||
}
|
||||
["done"](_0x310ad9 = {}) {
|
||||
const _0x2df5a2 = new Date().getTime(),
|
||||
_0x2097c5 = (_0x2df5a2 - this.startTime) / 1000;
|
||||
this.log("", "📣" + this.name + ", 结束! 📣 " + _0x2097c5 + " 秒");
|
||||
this.log();
|
||||
(this.isSurge() || this.isQuanX() || this.isLoon()) && $done(_0x310ad9);
|
||||
}
|
||||
}(_0x4ad131, _0x221774);
|
||||
}
|
||||
190
脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js
Normal file
190
脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js
Normal file
@@ -0,0 +1,190 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 瑷尔博士.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 9b3eaec2c57164c1a96cf2e236c97997baa69d1e45e02503fbbcab3f73736fe3
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.11 12:44
|
||||
@Description: 瑷尔博士官方云商城小程序
|
||||
------------------------------------------
|
||||
变量名airboshi
|
||||
变量值 https://xapi.weimob.com/api3/ 域名下的Headers请求头的X-WX-Token 多账号&或换行或新增同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("瑷尔博士官方云商城");
|
||||
let ckName = `airboshi`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckStatus = true;
|
||||
await signIn()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function signIn() {
|
||||
const config = {
|
||||
method: 'post',
|
||||
url: 'https://xapi.weimob.com/api3/onecrm/mactivity/sign/misc/sign/activity/c/signMainInfo',
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json",
|
||||
"Host": "xapi.weimob.com",
|
||||
"Referer": "https://servicewechat.com/wx0399cf391f15b422/46/page-frame.html",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "cross-site",
|
||||
"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(0x6309092b) XWEB/8555",
|
||||
"X-WX-Token": $.token,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: JSON.stringify({
|
||||
"appid": "wx0399cf391f15b422",
|
||||
"basicInfo": {
|
||||
"vid": 6015569623153,
|
||||
"vidType": 2,
|
||||
"bosId": 4021407433153,
|
||||
"productId": 146,
|
||||
"productInstanceId": 6351100153,
|
||||
"productVersionId": "14026",
|
||||
"merchantId": 2000150059153,
|
||||
"tcode": "weimob",
|
||||
"cid": 376411153
|
||||
},
|
||||
"extendInfo": {
|
||||
"wxTemplateId": 7579,
|
||||
"analysis": [],
|
||||
"bosTemplateId": 1000001485,
|
||||
"childTemplateIds": [
|
||||
{
|
||||
"customId": 90004,
|
||||
"version": "crm@0.1.17"
|
||||
},
|
||||
{
|
||||
"customId": 90002,
|
||||
"version": "ec@43.9"
|
||||
},
|
||||
{
|
||||
"customId": 90006,
|
||||
"version": "hudong@0.0.205"
|
||||
},
|
||||
{
|
||||
"customId": 90008,
|
||||
"version": "cms@0.0.429"
|
||||
}
|
||||
],
|
||||
"quickdeliver": {
|
||||
"enable": false
|
||||
},
|
||||
"youshu": {
|
||||
"enable": false
|
||||
},
|
||||
"source": 1,
|
||||
"channelsource": 5,
|
||||
"refer": "onecrm-signgift",
|
||||
//"mpScene": 1256
|
||||
},
|
||||
"queryParameter": null,
|
||||
"i18n": {
|
||||
"language": "zh",
|
||||
"timezone": "8"
|
||||
},
|
||||
"pid": "",
|
||||
"storeId": "",
|
||||
"customInfo": {
|
||||
"source": 0,
|
||||
//"wid": 11167663828
|
||||
}
|
||||
})
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.errcode == "0") {
|
||||
$.log(`签到成功`);
|
||||
} else {
|
||||
$.log(`签到失败`)
|
||||
$.log(JSON.stringify(result))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
260
脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js
Normal file
260
脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js
Normal file
@@ -0,0 +1,260 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yht.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yht.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/yht.js
|
||||
// # UploadedAt: 2026-04-12T06:41:36Z
|
||||
// # SHA256: 3f2d67f0b71391331c9cc40ea43a3b49855e4fbefc611dd27988f1974cb41533
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
@cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
益禾堂 qm-user-token
|
||||
------------------------------------------
|
||||
|
||||
*/
|
||||
window = {}
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("益禾堂");
|
||||
let ckName = `yht`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.activityUrl = ''
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.getLoginUrl()
|
||||
|
||||
await this.getActivityToken()
|
||||
let key = await this.getActivityKey()
|
||||
await this.doSign(key)
|
||||
|
||||
}
|
||||
async getLoginUrl() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://webapi.qmai.cn/web/catering/crm/member/redirect`,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027',
|
||||
'Accept': 'v=1.0',
|
||||
'Content-Type': 'application/json',
|
||||
'xweb_xhr': '1',
|
||||
'gdt-vid': '',
|
||||
'work-staff-name': '',
|
||||
'channelcode': '',
|
||||
'work-wechat-userid': '',
|
||||
'qz-gtd': '',
|
||||
'qm-from-type': 'catering',
|
||||
'accept-language': 'zh-CN',
|
||||
'scene': '1101',
|
||||
'qm-from': 'wechat',
|
||||
'qm-user-token': '' + this.token,
|
||||
'work-staff-id': '',
|
||||
'multi-store-id': '',
|
||||
'store-id': '203009',
|
||||
'promotion-code': '',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://servicewechat.com/wx4080846d0cec2fd5/517/page-frame.html',
|
||||
'priority': 'u=1, i'
|
||||
},
|
||||
data: {
|
||||
"redirectUrl": "https://86019.activity-12.m.duiba.com.cn/chw/visual-editor/skins?id=203576",
|
||||
"appid": "wx4080846d0cec2fd5"
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result.data && result.status) {
|
||||
this.activityUrl = result.data
|
||||
return result.data
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
ObjectKeys2LowerCase(e) { return e = Object.fromEntries(Object.entries(e).map((([e, t]) => [e.toLowerCase(), t]))), new Proxy(e, { get: function (e, t, r) { return Reflect.get(e, t.toLowerCase(), r) }, set: function (e, t, r, n) { return Reflect.set(e, t.toLowerCase(), r, n) } }) }
|
||||
|
||||
async getActivityToken() {
|
||||
|
||||
|
||||
const opts = {
|
||||
method: "GET",
|
||||
url: this.activityUrl,
|
||||
maxRedirects: 0,
|
||||
// 关键点 2: 默认 Axios 认为非 2xx 是错误,需定义 302 为合法状态
|
||||
validateStatus: function (status) {
|
||||
return status >= 200 && status < 400; // 允许 302 (或 3xx) 进入 .then
|
||||
},
|
||||
headers: {}
|
||||
}
|
||||
let res = await axios.request(opts);
|
||||
|
||||
let headers = this.ObjectKeys2LowerCase(res?.headers);
|
||||
//对青龙进行兼容
|
||||
let session = Array.isArray(headers['set-cookie']) ? [...new Set(headers['set-cookie'])].join("") : headers['set-cookie'];
|
||||
|
||||
let [wdata4, w_ts, _ac, wdata3, dcustom] = session.match(/(wdata4|w_ts|_ac|wdata3|dcustom)=.+?;/g)
|
||||
this.session = wdata4 + w_ts + _ac + wdata3 + dcustom;
|
||||
$.log(`✅ 获取活动token成功!`)
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getActivityKey() {
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://86019-activity.dexfu.cn/chw/ctoken/getToken`,
|
||||
headers: {
|
||||
'Content-type': 'application/x-www-form-urlencoded',
|
||||
'Cookie': this.session,
|
||||
},
|
||||
data: {
|
||||
timestamp: Date.now(),
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result.success) {
|
||||
// 自动修复:将旧式八进制 (如 0123) 替换为现代写法 (0o123)
|
||||
// 匹配以 0 开头后面跟数字,且不含 x (十六进制) 或 b (二进制) 的部分
|
||||
const fixedCode = result.token.replace(/\b0([0-7]+)\b/g, '0o$1');
|
||||
eval(fixedCode)
|
||||
return window['620fa72t']
|
||||
|
||||
}
|
||||
}
|
||||
async doSign(key) {
|
||||
let data = ({
|
||||
'signOperatingId': '326649747164581',
|
||||
'token': '' + key
|
||||
});
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: 'https://86019-activity.dexfu.cn/sign/component/doSign?_=' + Date.now(),
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'origin': 'https://86019-activity.dexfu.cn',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://86019-activity.dexfu.cn/sign/component/page?signOperatingId=326649747164581',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'Cookie': this.session
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
console.log(result);
|
||||
|
||||
/*if (result.success) {
|
||||
$.log(`✅ 签到成功!获得${result.data.signResult}积分`)
|
||||
}*/
|
||||
|
||||
}
|
||||
/**
|
||||
* 通用 eval 混淆解密函数(动态执行劫持)
|
||||
* @param {string} obfuscatedCode - 原始的混淆代码
|
||||
* @returns {string} - 解密后的真实代码
|
||||
*/
|
||||
decryptByHookingEval(obfuscatedCode) {
|
||||
let decryptedCode = "";
|
||||
|
||||
// 1. 备份系统原生的 eval
|
||||
const originalEval = globalThis.eval;
|
||||
|
||||
try {
|
||||
// 2. 劫持全局 eval 函数
|
||||
globalThis.eval = function (payload) {
|
||||
decryptedCode = payload; // 将解密后的字符串保存下来
|
||||
// 重要:不往下执行原生的 eval,从而阻止危险/恶意代码实际运行
|
||||
};
|
||||
|
||||
// 3. 构造一个沙箱函数并执行混淆代码的外壳
|
||||
// 外壳代码会执行所有的解密运算,并最终调用我们上面劫持的 eval()
|
||||
const runner = new Function(obfuscatedCode);
|
||||
runner();
|
||||
|
||||
} catch (error) {
|
||||
console.error("执行解密外壳时发生错误:", error);
|
||||
} finally {
|
||||
// 4. 无论成功与否,务必恢复系统的 eval,避免影响其他正常业务
|
||||
globalThis.eval = originalEval;
|
||||
}
|
||||
|
||||
return decryptedCode || "未能拦截到 eval 调用,可能代码结构不适用此方法。";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
console.log(`1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。`)
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
73
脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js
Normal file
73
脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js
Normal file
@@ -0,0 +1,73 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 盖瑞特后市场.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: b29d74fc9baa9f2cf96e1e36d8598ed28ed667c0e4c79df9b03750e2ac8bf8d4
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
盖瑞特后市场
|
||||
入口:http://weixin.qq.com/q/02TSy-4ATzbKe1CDzRND1D
|
||||
变量名:grtck
|
||||
依赖require
|
||||
*/
|
||||
const axios = require('axios');
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
const externalUrl = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt';
|
||||
const externalResponse = await axios.get(externalUrl);
|
||||
|
||||
console.log('公告:', externalResponse.data);
|
||||
|
||||
|
||||
if (externalResponse.status === 200) {
|
||||
console.log('公告获取成功,开始执行签到请求...');
|
||||
|
||||
|
||||
const cookies = process.env.grtck.split(',');
|
||||
const url = 'https://app.ma.scrmtech.com/svip/index/SignSet';
|
||||
const headers = {
|
||||
'Host': 'app.ma.scrmtech.com',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-requested-with': 'XMLHttpRequest',
|
||||
'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20240801 MMWEBID/3628 MicroMessenger/8.0.51.2720(0x28003339) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64',
|
||||
'accept': 'application/json, text/javascript, /; q=0.01',
|
||||
'sec-ch-ua': '"Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://app.ma.scrmtech.com/svip/index/sign?pf_uid=26989_2051&pf_type=3&code=051soVll2z7FUe4Qaqnl2067es2soVlE&state=&appid=wx3b54c4b113f78be5',
|
||||
'accept-encoding': 'gzip, deflate, br, zstd',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'cookie': cookies.join('; '),
|
||||
};
|
||||
|
||||
|
||||
const signInResponse = await axios.get(url, { headers });
|
||||
|
||||
|
||||
const { data } = signInResponse;
|
||||
if (data.code === 30005) {
|
||||
console.log('签到成功');
|
||||
} else if (data.code === 0) {
|
||||
console.log('今日已签到,每天再试试吧');
|
||||
}
|
||||
} else {
|
||||
console.log('公告获取失败,HTTP 状态码:', externalResponse.status);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('发生错误:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
main();
|
||||
/*
|
||||
TL库
|
||||
*/
|
||||
519
脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js
Normal file
519
脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js
Normal file
@@ -0,0 +1,519 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/ruilanCar.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/ruilanCar.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: ruilanCar.js
|
||||
// # UploadedAt: 2026-04-01T11:27:33Z
|
||||
// # SHA256: bbf9ecc479b7d6bed5fad99dc690124ce32bc3f64bd0313f229eb71cbc94bd2c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/**
|
||||
* cron 32 17 * * *
|
||||
* Show:睿蓝汽车APP 或者小程序 一天7分左右 积分换实物
|
||||
* 变量名:ruilanCar
|
||||
* 变量值:https://api-gateway.livanauto.com/app/ Headers中的aid的值 # rid的值 #连接 多账户 & 或创建同名变量
|
||||
* scriptVersionNow = "0.0.1";
|
||||
*/
|
||||
|
||||
const $ = new Env("睿蓝汽车");
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
let ckName = "ruilanCar";
|
||||
let envSplitor = ["&", "\n"]; //多账号分隔符
|
||||
let strSplitor = "#"; //多变量分隔符
|
||||
let userIdx = 0;
|
||||
let userList = [];
|
||||
class Task {
|
||||
constructor(str) {
|
||||
this.index = ++userIdx;
|
||||
this.aid = str.split(strSplitor)[0];
|
||||
this.rid = str.split(strSplitor)[1];
|
||||
this.ckStatus = true;
|
||||
this.contentList = []
|
||||
this.essayList = []
|
||||
}
|
||||
async main() {
|
||||
await this.user_info()
|
||||
if (this.ckStatus == true) {
|
||||
await this.content_list();
|
||||
//console.log(this.contentList)
|
||||
if (this.contentList.length > 0) {
|
||||
for (let i = 0; i < 5; i++) {
|
||||
await this.task_like(this.contentList[0].id)
|
||||
}
|
||||
}
|
||||
await this.essay_list()
|
||||
if (this.essayList.length > 0) {
|
||||
for (let i = 0; i < 5; i++) {
|
||||
await this.task_share(this.essayList[i].id)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
async taskRequest(method, url, body = "") {
|
||||
//
|
||||
let headers = {
|
||||
"user-agent": "Dart/2.19 (dart:io)",
|
||||
"x-app-id": "fVbEaznM",
|
||||
"service-version": "2.16.5",
|
||||
"accept-encoding": "gzip",
|
||||
"aid": this.aid,
|
||||
"content-type": "application/json",
|
||||
"signinsource": "client_ios",
|
||||
"version": "",
|
||||
//"content-length": "33",
|
||||
"rid": this.rid,
|
||||
"host": "api-gateway.livanauto.com",
|
||||
"x-timestamp": Date.now(),
|
||||
"x-sequence-no": "q193JPARcnfIVizYzt3IZ"
|
||||
}
|
||||
const reqeuestOptions = {
|
||||
url: url,
|
||||
method: method,
|
||||
headers: headers
|
||||
}
|
||||
if (method !== "get") {
|
||||
if (headers["Content-Type"] == "application/json") {
|
||||
reqeuestOptions["body"] = JSON.stringify(body);
|
||||
} else {
|
||||
reqeuestOptions["body"] = body
|
||||
}
|
||||
}
|
||||
let { body: result } = await $.httpRequest(reqeuestOptions)
|
||||
return result
|
||||
}
|
||||
async essay_list() {
|
||||
let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/content/subject/appSubject?current=1&subjectId=36&essayCurrent=1&pageSize=20`)
|
||||
if (result.code == 0) {
|
||||
for (let art of result.data.records[0].essay) {
|
||||
this.essayList.push({ id: art.essayId, text: art.title })
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
async content_list() {
|
||||
let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/content/content/pageBetter?current=1&size=10&createBy×tamp=${Date.now()}`)
|
||||
if (result.code == 0) {
|
||||
for (let art of result.data.records) {
|
||||
if (art.thumb == false) {
|
||||
this.contentList.push({ id: art.contentId, text: art.contentDesc })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async user_info() {
|
||||
let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/common/user/getUserToFml`)
|
||||
if (result.code == 0) {
|
||||
$.log(`[${result.data.nickName}]积分[${result.data.integralCount}]`)
|
||||
this.ckStatus = true
|
||||
} else {
|
||||
this.ckStatus = false
|
||||
$.log(result)
|
||||
}
|
||||
}
|
||||
async task_share(id) {
|
||||
let result = await this.taskRequest(`post`, `https://api-gateway.livanauto.com/app/v1.0/appapi/content/essayshare/add`, { "essayId": id })
|
||||
result.code == 0 ? (result.data.result == true ? $.log(`分享成功`) : $.log(`分享失败`)) : $.log(`分享失败`)
|
||||
}
|
||||
async task_like(id) {
|
||||
let result = await this.taskRequest(`post`, `https://api-gateway.livanauto.com/app/v1.0/appapi/content/contentthumbs/thumb`, { "contentId": id })
|
||||
result.code == 0 ? (result.data.result == true ? $.log(`点赞成功`) : $.log(`点赞失败`)) : $.log(`点赞失败`)
|
||||
}
|
||||
}
|
||||
|
||||
async function start() {
|
||||
let taskall = [];
|
||||
for (let user of userList) {
|
||||
if (user.ckStatus) {
|
||||
taskall.push(await user.main());
|
||||
}
|
||||
}
|
||||
await Promise.all(taskall);
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
if (!(await checkEnv())) return;
|
||||
if (userList.length > 0) {
|
||||
await start();
|
||||
}
|
||||
await $.sendMsg($.logs.join("\n"))
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
//********************************************************
|
||||
/**
|
||||
* 变量检查与处理
|
||||
* @returns
|
||||
*/
|
||||
async function checkEnv() {
|
||||
let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "";
|
||||
if (userCookie) {
|
||||
let e = envSplitor[0];
|
||||
for (let o of envSplitor)
|
||||
if (userCookie.indexOf(o) > -1) {
|
||||
e = o;
|
||||
break;
|
||||
}
|
||||
for (let n of userCookie.split(e)) n && userList.push(new Task(n));
|
||||
} else {
|
||||
console.log("未找到CK");
|
||||
return;
|
||||
}
|
||||
return console.log(`共找到${userList.length}个账号`), true; //true == !0
|
||||
}
|
||||
function Env(t, s) {
|
||||
return new (class {
|
||||
constructor(t, s) {
|
||||
this.name = t;
|
||||
this.data = null;
|
||||
this.dataFile = "box.dat";
|
||||
this.logs = [];
|
||||
this.logSeparator = "\n";
|
||||
this.startTime = new Date().getTime();
|
||||
Object.assign(this, s);
|
||||
this.log("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`);
|
||||
}
|
||||
isNode() {
|
||||
return "undefined" != typeof module && !!module.exports;
|
||||
}
|
||||
isQuanX() {
|
||||
return "undefined" != typeof $task;
|
||||
}
|
||||
isSurge() {
|
||||
return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
|
||||
}
|
||||
isLoon() {
|
||||
return "undefined" != typeof $loon;
|
||||
}
|
||||
loaddata() {
|
||||
if (!this.isNode()) return {};
|
||||
{
|
||||
this.fs = this.fs ? this.fs : require("fs");
|
||||
this.path = this.path ? this.path : require("path");
|
||||
const t = this.path.resolve(this.dataFile),
|
||||
s = this.path.resolve(process.cwd(), this.dataFile),
|
||||
e = this.fs.existsSync(t),
|
||||
i = !e && this.fs.existsSync(s);
|
||||
if (!e && !i) return {};
|
||||
{
|
||||
const i = e ? t : s;
|
||||
try {
|
||||
return JSON.parse(this.fs.readFileSync(i));
|
||||
} catch (t) {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
writedata() {
|
||||
if (this.isNode()) {
|
||||
this.fs = this.fs ? this.fs : require("fs");
|
||||
this.path = this.path ? this.path : require("path");
|
||||
const t = this.path.resolve(this.dataFile),
|
||||
s = this.path.resolve(process.cwd(), this.dataFile),
|
||||
e = this.fs.existsSync(t),
|
||||
i = !e && this.fs.existsSync(s),
|
||||
o = JSON.stringify(this.data);
|
||||
e ? this.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o);
|
||||
}
|
||||
}
|
||||
lodash_get(t, s, e) {
|
||||
const i = s.replace(/\[(\d+)\]/g, ".$1").split(".");
|
||||
let o = t;
|
||||
for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e;
|
||||
return o;
|
||||
}
|
||||
lodash_set(t, s, e) {
|
||||
return Object(t) !== t
|
||||
? t
|
||||
: (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []),
|
||||
(s
|
||||
.slice(0, -1)
|
||||
.reduce(
|
||||
(t, e, i) =>
|
||||
Object(t[e]) === t[e]
|
||||
? t[e]
|
||||
: (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}),
|
||||
t
|
||||
)[s[s.length - 1]] = e),
|
||||
t);
|
||||
}
|
||||
getdata(t) {
|
||||
let s = this.getval(t);
|
||||
if (/^@/.test(t)) {
|
||||
const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t),
|
||||
o = e ? this.getval(e) : "";
|
||||
if (o)
|
||||
try {
|
||||
const t = JSON.parse(o);
|
||||
s = t ? this.lodash_get(t, i, "") : s;
|
||||
} catch (t) {
|
||||
s = "";
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
setdata(t, s) {
|
||||
let e = !1;
|
||||
if (/^@/.test(s)) {
|
||||
const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s),
|
||||
h = this.getval(i),
|
||||
a = i ? ("null" === h ? null : h || "{}") : "{}";
|
||||
try {
|
||||
const s = JSON.parse(a);
|
||||
this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i));
|
||||
} catch (s) {
|
||||
const h = {};
|
||||
this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i));
|
||||
}
|
||||
} else e = this.setval(t, s);
|
||||
return e;
|
||||
}
|
||||
getval(t) {
|
||||
if (this.isSurge() || this.isLoon()) {
|
||||
return $persistentStore.read(t);
|
||||
} else if (this.isQuanX()) {
|
||||
return $prefs.valueForKey(t);
|
||||
} else if (this.isNode()) {
|
||||
this.data = this.loaddata();
|
||||
return this.data[t];
|
||||
} else {
|
||||
return this.data && this.data[t] || null;
|
||||
}
|
||||
}
|
||||
setval(t, s) {
|
||||
if (this.isSurge() || this.isLoon()) {
|
||||
return $persistentStore.write(t, s);
|
||||
} else if (this.isQuanX()) {
|
||||
return $prefs.setValueForKey(t, s);
|
||||
} else if (this.isNode()) {
|
||||
this.data = this.loaddata();
|
||||
this.data[s] = t;
|
||||
this.writedata();
|
||||
return true;
|
||||
} else {
|
||||
return this.data && this.data[s] || null;
|
||||
}
|
||||
}
|
||||
initGotEnv(t) {
|
||||
this.got = this.got ? this.got : require("got");
|
||||
this.cktough = this.cktough ? this.cktough : require("tough-cookie");
|
||||
this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar();
|
||||
if (t) {
|
||||
t.headers = t.headers ? t.headers : {};
|
||||
if (typeof t.headers.Cookie === "undefined" && typeof t.cookieJar === "undefined") {
|
||||
t.cookieJar = this.ckjar;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @returns {String} 将 Object 对象 转换成 queryStr: key=val&name=senku
|
||||
*/
|
||||
queryStr(options) {
|
||||
return Object.entries(options)
|
||||
.map(([key, value]) => `${key}=${typeof value === 'object' ? JSON.stringify(value) : value}`)
|
||||
.join('&');
|
||||
}
|
||||
//从url获取参数组成json
|
||||
getURLParams(url) {
|
||||
const params = {};
|
||||
const queryString = url.split('?')[1];
|
||||
if (queryString) {
|
||||
const paramPairs = queryString.split('&');
|
||||
paramPairs.forEach(pair => {
|
||||
const [key, value] = pair.split('=');
|
||||
params[key] = decodeURIComponent(value);
|
||||
});
|
||||
}
|
||||
return params;
|
||||
}
|
||||
isJSONString(str) {
|
||||
try {
|
||||
var obj = JSON.parse(str);
|
||||
if (typeof obj == 'object' && obj) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
isJson(obj) {
|
||||
var isjson = typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length;
|
||||
return isjson;
|
||||
}
|
||||
async sendMsg(message) {
|
||||
if (!message) return;
|
||||
if ($.isNode()) {
|
||||
await notify.sendNotify($.name, message)
|
||||
} else {
|
||||
$.msg($.name, '', message)
|
||||
}
|
||||
}
|
||||
async httpRequest(options) {
|
||||
let t = {
|
||||
...options
|
||||
};
|
||||
if (!t.headers) {
|
||||
t.headers = {}
|
||||
}
|
||||
if (t.params) {
|
||||
t.url += '?' + this.queryStr(t.params);
|
||||
}
|
||||
t.method = t.method.toLowerCase();
|
||||
if (t.method === 'get') {
|
||||
delete t.headers['Content-Type'];
|
||||
delete t.headers['Content-Length'];
|
||||
delete t.headers['content-type'];
|
||||
delete t.headers['content-length'];
|
||||
delete t["body"]
|
||||
}
|
||||
if (t.method === 'post') {
|
||||
let ContentType;
|
||||
if (!t.body) {
|
||||
t.body = ""
|
||||
} else {
|
||||
if (typeof t.body == "string") {
|
||||
if (this.isJSONString(t.body)) {
|
||||
ContentType = 'application/json'
|
||||
} else {
|
||||
ContentType = 'application/x-www-form-urlencoded'
|
||||
}
|
||||
} else if (this.isJson(t.body)) {
|
||||
t.body = JSON.stringify(t.body);
|
||||
ContentType = 'application/json';
|
||||
}
|
||||
}
|
||||
if (!t.headers['Content-Type'] || !t.headers['content-type']) {
|
||||
t.headers['Content-Type'] = ContentType;
|
||||
}
|
||||
delete t.headers['Content-Length'];
|
||||
}
|
||||
if (this.isNode()) {
|
||||
this.initGotEnv(t);
|
||||
let httpResult = await this.got(t);
|
||||
if (this.isJSONString(httpResult.body)) {
|
||||
httpResult.body = JSON.parse(httpResult.body)
|
||||
}
|
||||
return httpResult;
|
||||
}
|
||||
if (this.isQuanX()) {
|
||||
t.method = t.method.toUpperCase()
|
||||
return new Promise((resolve, reject) => {
|
||||
$task.fetch(t).then(response => {
|
||||
if (this.isJSONString(response.body)) {
|
||||
response.body = JSON.parse(response.body)
|
||||
}
|
||||
resolve(response)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
randomNumber(length) {
|
||||
const characters = '0123456789';
|
||||
return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join('');
|
||||
}
|
||||
randomString(length) {
|
||||
const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||
return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join('');
|
||||
}
|
||||
timeStamp() {
|
||||
return new Date().getTime()
|
||||
}
|
||||
uuid() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
var r = Math.random() * 16 | 0,
|
||||
v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
time(t) {
|
||||
let s = {
|
||||
"M+": new Date().getMonth() + 1,
|
||||
"d+": new Date().getDate(),
|
||||
"H+": new Date().getHours(),
|
||||
"m+": new Date().getMinutes(),
|
||||
"s+": new Date().getSeconds(),
|
||||
"q+": Math.floor((new Date().getMonth() + 3) / 3),
|
||||
S: new Date().getMilliseconds(),
|
||||
};
|
||||
/(y+)/.test(t) &&
|
||||
(t = t.replace(
|
||||
RegExp.$1,
|
||||
(new Date().getFullYear() + "").substr(4 - RegExp.$1.length)
|
||||
));
|
||||
for (let e in s)
|
||||
new RegExp("(" + e + ")").test(t) &&
|
||||
(t = t.replace(
|
||||
RegExp.$1,
|
||||
1 == RegExp.$1.length
|
||||
? s[e]
|
||||
: ("00" + s[e]).substr(("" + s[e]).length)
|
||||
));
|
||||
return t;
|
||||
}
|
||||
msg(s = t, e = "", i = "", o) {
|
||||
const h = (t) =>
|
||||
!t || (!this.isLoon() && this.isSurge())
|
||||
? t
|
||||
: "string" == typeof t
|
||||
? this.isLoon()
|
||||
? t
|
||||
: this.isQuanX()
|
||||
? { "open-url": t }
|
||||
: void 0
|
||||
: "object" == typeof t && (t["open-url"] || t["media-url"])
|
||||
? this.isLoon()
|
||||
? t["open-url"]
|
||||
: this.isQuanX()
|
||||
? t
|
||||
: void 0
|
||||
: void 0;
|
||||
this.isMute ||
|
||||
(this.isSurge() || this.isLoon()
|
||||
? $notification.post(s, e, i, h(o))
|
||||
: this.isQuanX() && $notify(s, e, i, h(o)));
|
||||
let logs = ['', '==============📣系统通知📣=============='];
|
||||
logs.push(t);
|
||||
e ? logs.push(e) : '';
|
||||
i ? logs.push(i) : '';
|
||||
console.log(logs.join('\n'));
|
||||
this.logs = this.logs.concat(logs);
|
||||
}
|
||||
log(...t) {
|
||||
t.length > 0 && (this.logs = [...this.logs, ...t]),
|
||||
console.log(t.join(this.logSeparator));
|
||||
}
|
||||
logErr(t, s) {
|
||||
const e = !this.isSurge() && !this.isQuanX() && !this.isLoon();
|
||||
e
|
||||
? this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack)
|
||||
: this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t);
|
||||
}
|
||||
wait(t) {
|
||||
return new Promise((s) => setTimeout(s, t));
|
||||
}
|
||||
done(t = {}) {
|
||||
const s = new Date().getTime(),
|
||||
e = (s - this.startTime) / 1e3;
|
||||
this.log(
|
||||
"",
|
||||
`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`
|
||||
)
|
||||
this.log()
|
||||
if (this.isNode()) {
|
||||
process.exit(1)
|
||||
}
|
||||
if (this.isQuanX()) {
|
||||
$done(t)
|
||||
}
|
||||
}
|
||||
})(t, s);
|
||||
}
|
||||
160
脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js
Normal file
160
脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js
Normal file
@@ -0,0 +1,160 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/llj.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/llj.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/llj.js
|
||||
// # UploadedAt: 2026-04-08T05:56:39Z
|
||||
// # SHA256: 268c15238c39ed7f628cf9b6d0df341e4810456fc65acda3d3b372888a4e349e
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 立乐家会员俱乐部
|
||||
cron: 30 10 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
变量名 lljtoken 填写的是
|
||||
域名https://clubwx.hm.liby.com.cn/miniprogram 请求头 unionid # x-wxb9f68ca2da513bb2-token
|
||||
多账户&或换行
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("立乐家会员俱乐部");
|
||||
let ckName = `lljtoken`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[1];
|
||||
this.unionid = this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.getUserInfo()
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://clubwx.hm.liby.com.cn/miniprogram/benefits/activity/sign/execute.htm?taskId=503`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"appid": "wxb9f68ca2da513bb2",
|
||||
"content-type": "application/json",
|
||||
"platformcode": "LiLeJia",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"unionid": "" + this.unionid,
|
||||
"x-wxb9f68ca2da513bb2-token": "" + this.token,
|
||||
"xweb_xhr": "1"
|
||||
},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `签到成功🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getUserInfo() {
|
||||
|
||||
let options = {
|
||||
url: `https://clubwx.hm.liby.com.cn/b2cMiniApi/me/getUserData.htm`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"appid": "wxb9f68ca2da513bb2",
|
||||
"content-type": "application/json",
|
||||
"platformcode": "LiLeJia",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"unionid": "" + this.unionid,
|
||||
"x-wxb9f68ca2da513bb2-token": "" + this.token,
|
||||
"xweb_xhr": "1"
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '200') {
|
||||
$.log(`🌸账号[${this.index}]` + `[${result.data.nickName}] 积分` + `[${result.data.integral}]🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
|
||||
293
脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js
Normal file
293
脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js
Normal file
@@ -0,0 +1,293 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miqilin.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miqilin.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/miqilin.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 62de3bdeb38837edfccddb525f451e9f7aa72afb284839413b72a5ada299438c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
米其林会员 每日任务
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:miqilin
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("米其林会员小程序");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `miqilin`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wx14413dafd16b9540',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
this.token = 'Bearer ' + this.token
|
||||
await this.getUserInfo()
|
||||
await this.doPaper()
|
||||
for (let i = 0; i < 10; i++) {
|
||||
await this.share();
|
||||
}
|
||||
}
|
||||
async share() {
|
||||
const options = {
|
||||
method: 'POST',
|
||||
url: `https://ulp.michelin.com.cn/op/points/share/have`,
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001f37) NetType/WIFI Language/zh_CN",
|
||||
"Authorization": this.token,
|
||||
},
|
||||
data: { "type": "ARTICLE", "code": "COM-MHT-93" }
|
||||
};
|
||||
//post方法
|
||||
let { data: result } = await axios.request(options);
|
||||
|
||||
$.log(`转发:${result?.code != 200 ? "转发失败" + result?.message : "转发成功!"}`)
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://ulp.michelin.com.cn/bff/wechat/login/${code}`,
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001f37) NetType/WIFI Language/zh_CN",
|
||||
"Referer": "https://servicewechat.com/wx14413dafd16b9540/130/page-frame.html"
|
||||
}
|
||||
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
this.token = result?.data?.token?.access_token;
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
|
||||
}
|
||||
|
||||
async getUserInfo() {
|
||||
try {
|
||||
let { data: result } = await axios.request({
|
||||
method: 'GET',
|
||||
url: `https://ulp.michelin.com.cn/bff/profile`,
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249",
|
||||
"Authorization": this.token,
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if (result?.data?.points) {
|
||||
$.log(`账号[${this.index}] 获取用户积分成功:${result?.data?.points}`)
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 获取用户积分失败❌`)
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
this.ckStatus = false;
|
||||
console.log(`❌查询积分失败!原因为:${e}`);
|
||||
}
|
||||
}
|
||||
async doPaper() {
|
||||
//获取问卷
|
||||
await this.getPaper();
|
||||
//是否已完成问卷
|
||||
if (this.paperStatus) {
|
||||
//获取本期问卷题目
|
||||
await this.getOpenTpaper(this.npsPaperCode);
|
||||
let index = 1;
|
||||
for (let question of this.questionList) {
|
||||
$.log(`问题${index}:${question?.questionChoise?.stemHtml}\n`);
|
||||
let options = question?.questionChoise.options;
|
||||
for (let option of options) {
|
||||
$.log(`- ${option.optionHtml}`);
|
||||
}
|
||||
let theQuestion = question.questionChoise.npsQuestionPk;
|
||||
//查找对应题目答案
|
||||
let detail = this.stdAnswers.find(answer => theQuestion == answer.npsQuestionChoisePk) || {};
|
||||
let answer = options.find(o => o.npsQuestionChoiseOptionPk == detail.npsQuestionChoiseOptionPk);
|
||||
if (!answer) answer = options[0]; // 如果没有找到匹配的答案,默认选择第一个选项
|
||||
//提交答案
|
||||
let answerRes = await this.answer(theQuestion, answer?.npsQuestionChoiseOptionPk);
|
||||
$.log(`\n答案: ${answer.optionHtml} => ${answerRes}`);
|
||||
}
|
||||
//提交问卷
|
||||
await this.paperScore(this.paperCode);
|
||||
} else {
|
||||
$.log(`答题任务:本周奖励领取已达到上限,跳过执行`);
|
||||
}
|
||||
}
|
||||
|
||||
//获取本期答卷
|
||||
async getPaper() {
|
||||
|
||||
const options = {
|
||||
method: 'POST',
|
||||
url: `https://ulp.michelin.com.cn/campaign/paper/user`,
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249",
|
||||
"Authorization": this.token,
|
||||
},
|
||||
data: {}
|
||||
};
|
||||
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == 200) {
|
||||
$.log(`帐号[${this.index}]本次调查问卷为${result?.data?.npsPaperCode},总共${result?.data?.questionNum}道题目,状态为${result?.data?.status}`);
|
||||
//如果已经答题,则跳过执行答题任务
|
||||
if (result?.data?.status == 'DONE') this.paperStatus = false;
|
||||
//获取本期问卷期数
|
||||
this.npsPaperCode = result?.data?.npsPaperCode;
|
||||
//获取本期问卷验证编号
|
||||
this.paperCode = result?.data?.paperCode;
|
||||
} else {
|
||||
this.ckStatus = false;
|
||||
}
|
||||
|
||||
}
|
||||
//获取问卷题目
|
||||
async getOpenTpaper(npsPaperCode) {
|
||||
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://ulp.michelin.com.cn/npspaper/nps-admin/open/api/cp/public/get_open_tpaper/${npsPaperCode}`,
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "",
|
||||
"Authorization": this.token,
|
||||
}
|
||||
}
|
||||
|
||||
//post方法
|
||||
let result = await axios.request(options);
|
||||
if (result?.success) {
|
||||
//答案
|
||||
this.stdAnswers = result?.data?.stdAnswers;
|
||||
//题目
|
||||
this.questionList = result?.data?.questionList;
|
||||
} else {
|
||||
$.log(`🔴帐号[${this.index}]获取问卷列表失败!${result?.message}`)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async answer(question, answer) {
|
||||
try {
|
||||
const options = {
|
||||
url: `https://ulp.michelin.com.cn/campaign/paper/user/answer`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Host": "ulp.michelin.com.cn",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249",
|
||||
"Authorization": this.token,
|
||||
},
|
||||
data: { "answerOptionId": [`${answer}`], "paperCode": `${this.paperCode}`, "questionId": `${question}` }
|
||||
};
|
||||
//post方法
|
||||
let { data: result } = await axios.request(options);
|
||||
return result?.code == 200 ? "回答成功!" : `回答失败!${result?.message}`
|
||||
} catch (e) {
|
||||
console.log(`❌回答问题失败!原因为:${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
async paperScore(paperCode) {
|
||||
try {
|
||||
const options = {
|
||||
url: `https://ulp.michelin.com.cn/campaign/paper/score/${paperCode}`,
|
||||
data: {}
|
||||
};
|
||||
//post方法
|
||||
let { data: res } = await axios.request(options);
|
||||
$.log(`提交问卷:本期问卷正确率为${res?.data?.score}%,排名${res.data.rank}`);
|
||||
} catch (e) {
|
||||
console.log(`❌提交问卷失败!原因为:${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
414
脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js
Normal file
414
脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js
Normal file
File diff suppressed because one or more lines are too long
328
脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js
Normal file
328
脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js
Normal file
@@ -0,0 +1,328 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BB%9F%E4%B8%80.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BB%9F%E4%B8%80.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 统一.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 8487b15326043cec5ab177d6cbc07a7306bca5cb173bc4bde24c9af4b51e1f48
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn 86056
|
||||
@Date: 2024.06.08 09.46
|
||||
@Description: 统一抽奖大集结
|
||||
------------------------------------------
|
||||
变量名 tongyi
|
||||
变量值抓https://xapi.weimob.com/api3/ Headers中的x-wx-token的值 多账号&或换行 或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("统一抽奖大集结");
|
||||
let ckName = `tongyi`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.ckStatus = true;
|
||||
$.token = user
|
||||
let activityIds = [{ name: `小明同学`, id: 20001389211 }, { name: `雅马哈`, id: 20001390387 }, { name: `周末`, id: 20001403008 }]
|
||||
for (let activity of activityIds) {
|
||||
$.log(`当前玩的是[${activity.name}]`)
|
||||
for (let i = 0; i < 5; i++) {
|
||||
await lightCard(activity.id)
|
||||
$.log(`本次抽奖结束延迟5s`)
|
||||
await $.wait(5000)
|
||||
}
|
||||
$.log(`游戏结束延迟5s`)
|
||||
await $.wait(5000)
|
||||
}
|
||||
await draw()
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function lightCard(activityId) {
|
||||
|
||||
let data = JSON.stringify({
|
||||
"appid": "wx532ecb3bdaaf92f9",
|
||||
"basicInfo": {
|
||||
"vid": 6013753979957,
|
||||
"vidType": 2,
|
||||
"bosId": 4020112618957,
|
||||
"productId": 165646,
|
||||
"productInstanceId": 3169913957,
|
||||
"productVersionId": "16233",
|
||||
"merchantId": 2000020692957,
|
||||
"tcode": "weimob",
|
||||
"cid": 176205957
|
||||
},
|
||||
"extendInfo": {
|
||||
"wxTemplateId": 7593,
|
||||
"analysis": [],
|
||||
"bosTemplateId": 1000001511,
|
||||
"childTemplateIds": [
|
||||
{
|
||||
"customId": 90004,
|
||||
"version": "crm@0.1.21"
|
||||
},
|
||||
{
|
||||
"customId": 90002,
|
||||
"version": " ec@46.4"
|
||||
},
|
||||
{
|
||||
"customId": 90006,
|
||||
"version": "hudong@0.0.208"
|
||||
},
|
||||
{
|
||||
"customId": 90008,
|
||||
"version": "cms@0.0.439"
|
||||
},
|
||||
{
|
||||
"customId": 90060,
|
||||
"version": "elearning@0.1.1"
|
||||
}
|
||||
],
|
||||
"quickdeliver": {
|
||||
"enable": false
|
||||
},
|
||||
"youshu": {
|
||||
"enable": false
|
||||
},
|
||||
"source": 1,
|
||||
"channelsource": 5,
|
||||
"refer": "hd-card-home",
|
||||
"mpScene": 1005
|
||||
},
|
||||
"queryParameter": null,
|
||||
"i18n": {
|
||||
"language": "zh",
|
||||
"timezone": "8"
|
||||
},
|
||||
"pid": "4020112618957",
|
||||
"storeId": "0",
|
||||
"activityId": activityId, //////////////////////////////////////////
|
||||
"source": 1,
|
||||
"_version": "2.9.2",
|
||||
"appletVersion": 280,
|
||||
"_transformBasicInfo": true,
|
||||
"v": "76e04a82cc9efce6e19336bfddab891410029744",
|
||||
"operationSource": 4,
|
||||
"vid": 6013753979957,
|
||||
"vidType": 2,
|
||||
"bosId": 4020112618957,
|
||||
"productId": 165646,
|
||||
"productInstanceId": 3169913957,
|
||||
"productVersionId": "16233",
|
||||
"merchantId": 2000020692957,
|
||||
"tcode": "weimob",
|
||||
"cid": 176205957,
|
||||
"vidTypes": [
|
||||
2
|
||||
],
|
||||
"openid": "oBk224mM4QEh5M3dNtocB9ZU6foQ"
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://xapi.weimob.com/api3/interactive/qianxi/amasscard/api/lightCard',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'charset': 'utf-8',
|
||||
'x-wx-token': $.token,
|
||||
'Referer': 'https://servicewechat.com/wx532ecb3bdaaf92f9/195/page-frame.html',
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config);
|
||||
if (result.errcode == '0') {
|
||||
$.log(`抽卡成功[${result.data.cardId}]`)
|
||||
} else {
|
||||
$.log(`抽卡失败`)
|
||||
$.log(JSON.stringify(result))
|
||||
}
|
||||
}
|
||||
async function draw() {
|
||||
let data = JSON.stringify({
|
||||
"appid": "wx532ecb3bdaaf92f9",
|
||||
"basicInfo": {
|
||||
"vid": 6013753979957,
|
||||
"vidType": 2,
|
||||
"bosId": 4020112618957,
|
||||
"productId": 222,
|
||||
"productInstanceId": 3169919957,
|
||||
"productVersionId": "12004",
|
||||
"merchantId": 2000020692957,
|
||||
"tcode": "weimob",
|
||||
"cid": 176205957
|
||||
},
|
||||
"extendInfo": {
|
||||
"wxTemplateId": 7593,
|
||||
"analysis": [],
|
||||
"bosTemplateId": 1000001511,
|
||||
"childTemplateIds": [
|
||||
{
|
||||
"customId": 90004,
|
||||
"version": "crm@0.1.21"
|
||||
},
|
||||
{
|
||||
"customId": 90002,
|
||||
"version": " ec@46.4"
|
||||
},
|
||||
{
|
||||
"customId": 90006,
|
||||
"version": "hudong@0.0.208"
|
||||
},
|
||||
{
|
||||
"customId": 90008,
|
||||
"version": "cms@0.0.439"
|
||||
},
|
||||
{
|
||||
"customId": 90060,
|
||||
"version": "elearning@0.1.1"
|
||||
}
|
||||
],
|
||||
"quickdeliver": {
|
||||
"enable": false
|
||||
},
|
||||
"youshu": {
|
||||
"enable": false
|
||||
},
|
||||
"source": 1,
|
||||
"channelsource": 5,
|
||||
"refer": "hd-lego-index",
|
||||
"mpScene": 1005
|
||||
},
|
||||
"queryParameter": null,
|
||||
"i18n": {
|
||||
"language": "zh",
|
||||
"timezone": "8"
|
||||
},
|
||||
"pid": "4020112618957",
|
||||
"storeId": "0",
|
||||
"_transformBasicInfo": true,
|
||||
"_requrl": "/orchestration/mobile/activity/draw/play",
|
||||
"templateId": 767,
|
||||
"templateKey": "bigwheel",
|
||||
"activityId": "30000041622",
|
||||
"bussinessType": 1,
|
||||
"channel": 1,
|
||||
"channelType": 1,
|
||||
"source": 1,
|
||||
"_version": "2.5.4",
|
||||
"activityIdentity": "20",
|
||||
"openId": "oBk224mM4QEh5M3dNtocB9ZU6foQ",
|
||||
"wid": 11165796601,
|
||||
"appId": "wx532ecb3bdaaf92f9",
|
||||
"playSourceCode": "lcode",
|
||||
"vid": 6013753979957,
|
||||
"vidType": 2,
|
||||
"bosId": 4020112618957,
|
||||
"productId": 222,
|
||||
"productInstanceId": 3169919957,
|
||||
"productVersionId": "12004",
|
||||
"merchantId": 2000020692957,
|
||||
"tcode": "weimob",
|
||||
"cid": 176205957,
|
||||
"vidTypes": [
|
||||
2
|
||||
],
|
||||
"openid": "oBk224mM4QEh5M3dNtocB9ZU6foQ"
|
||||
});
|
||||
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://xapi.weimob.com/api3/orchestration/mobile/activity/draw/play',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'Content-Type': 'application/json',
|
||||
'charset': 'utf-8',
|
||||
'x-wx-token': $.token,
|
||||
'Referer': 'https://servicewechat.com/wx532ecb3bdaaf92f9/195/page-frame.html',
|
||||
'Cookie': 'rprm_cuid=7849974103hl3bid9hbo'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
let { data: result } = await Request(config);
|
||||
if (result.errcode == '0') {
|
||||
$.log(`抽奖成功[${result.data.cardId}]`)
|
||||
} else if (result.errcode == "100200003") {
|
||||
$.log(`抽奖失败 次数不够`)
|
||||
} else {
|
||||
$.log(`抽奖失败`)
|
||||
$.log(JSON.stringify(result))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
63
脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js
Normal file
63
脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js
Normal file
@@ -0,0 +1,63 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BE%8E%E5%AD%9A.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BE%8E%E5%AD%9A.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 美孚.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 8e3199b6fd23f6e2a8da1c908b7c9709f892e2843294db627da3d7a93052497e
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
小程序美孚臻享俱乐部
|
||||
变量名=mftoken
|
||||
抓包www.rewards.mobil.com.cn域名的请求头的X-access-token
|
||||
多账号分割&
|
||||
也可以使用多个变量名
|
||||
支持插件提交多变量
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
*/
|
||||
|
||||
const axios = require('axios');
|
||||
const mftoken = process.env.mftoken.split('&');
|
||||
|
||||
async function signIn() {
|
||||
const url = 'https://www.rewards.mobil.com.cn/web/index.php?_mall_id=1&r=api/kc/user/sign-in';
|
||||
const headers = {
|
||||
'Host': 'www.rewards.mobil.com.cn',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Length': '0',
|
||||
'x-form-id-list': '[]',
|
||||
'charset': 'utf-8',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/3628 MicroMessenger/8.0.50.2701(0x28003252) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'x-user-id': '1045255',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'x-app-platform': 'wxapp',
|
||||
'x-requested-with': 'XMLHttpRequest',
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'x-channel': 'WXapp',
|
||||
'x-app-version': '4.8.9',
|
||||
'Referer': 'https://servicewechat.com/wx46f9572cac706c22/120/page-frame.html'
|
||||
};
|
||||
|
||||
try {
|
||||
for (let token of mftoken) {
|
||||
headers['x-access-token'] = token;
|
||||
const response = await axios.post(url, {}, { headers: headers });
|
||||
if (response.data.code === 0 && response.data.data.now_date_is_sign) {
|
||||
console.log("签到成功,已累计签到{}天,本次获得{}积分。".format(response.data.data.sign_continue_text, response.data.data.sign_once_point));
|
||||
} else if (response.data.code === 1) {
|
||||
console.log("签到失败,错误信息:", response.data.msg);
|
||||
} else {
|
||||
console.log("响应:", response.data);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
signIn();
|
||||
|
||||
|
||||
875
脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py
Normal file
875
脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py
Normal file
@@ -0,0 +1,875 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 联通获取ck.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: a5eef4860ea719a6aeebe90421bb96740870ac057a7b0e1c5115b52013a5175f
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#!/usr/bin/python3
|
||||
# -- coding: utf-8 --
|
||||
#一键取ck exe:https://www.123pan.com/s/TGXSVv-cap8A.html
|
||||
# ------------------------------
|
||||
# cron "3 0 * * *" script-path=xxx.py,tag=匹配cron用
|
||||
# const $ = new Env('联通和沃畅游密码登录');
|
||||
# -------------------------------
|
||||
|
||||
|
||||
|
||||
#有问题联系3288588344
|
||||
#频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
|
||||
|
||||
"""
|
||||
|
||||
说明: 自动获取联通token_online、appid、ecs_token和access_token参数
|
||||
|
||||
注意:若是需要沃畅游的access_token参数,在首次使用时,联通app首页--5g新通信--联通畅游,点击个人中心,手动登录一遍
|
||||
|
||||
青龙环境变量:WoChangYouCK_PSW 手机号码&密码 账号和密码分别是联通app的账号和密码
|
||||
|
||||
|
||||
下列变量都可选填,请按照自己的需求自行添加环境变量
|
||||
联通app参数
|
||||
变量名:IsChinaUnicomParam 格式:True或者False 是否生成token_online参数填入环境变量,是下面变量起作用的前提,默认False不生成填入
|
||||
变量名:ChinaUnicomEnvName 格式:填指定生成的环境变量名,如chinaUnicomCookie,本脚本默认生成chinaUnicomCookie,用于生成跑联通脚本运行
|
||||
变量名:ChinaUnicomParam_chatMoreStr 格式:生成的多账号使用的拼接连接符,默认使用&
|
||||
变量名:ChinaUnicomParam_flag 格式:是否拼接appid,默认False不拼接,需要拼接请填入True
|
||||
变量名:ChinaUnicomParam_chatStr 格式:appid和token_online之间的拼接符号,默认使用#
|
||||
变量名:ChinaUnicomParam_appidIndex 格式:1或者2 拼接appid是在token_online前面还是后面,1代表前面,2代表后面,默认appid在前面
|
||||
沃畅游参数
|
||||
变量名:IsWoChangYouCK 格式:True或者False 是否生成沃畅游的access_token参数填入环境变量,默认False不生成填入
|
||||
|
||||
wxpusher推送(非必填)
|
||||
青龙变量:WoChangYouCK_WXPUSHER_TOKEN wxpusher推送的token
|
||||
青龙变量:WoChangYouCK_WXPUSHER_TOPIC_ID wxpusher推送的topicId(主题ID,非UID)
|
||||
网址:https://wxpusher.zjiecode.com/admin/main/topics/list
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
"""
|
||||
import requests,re
|
||||
import json, os, random
|
||||
import time
|
||||
from datetime import datetime
|
||||
from sys import stdout
|
||||
import base64
|
||||
response = requests.get("https://github.com/3288588344/toulu/blob/main/tl.txt")
|
||||
response.encoding = 'utf-8'
|
||||
txt = response.text
|
||||
print(txt)
|
||||
from base64 import b64encode
|
||||
from uuid import uuid4
|
||||
from urllib.parse import quote
|
||||
try:
|
||||
from Crypto.PublicKey.RSA import importKey, construct
|
||||
from Crypto.Cipher import PKCS1_v1_5
|
||||
except:
|
||||
print("检测到还未安装 pycryptodome 依赖,请先在python中安装 pycryptodome 依赖")
|
||||
print("如果安装依赖pycryptodome出错时,请先在linux中安装gcc、python3-dev、libc-dev三个依赖")
|
||||
exit(0)
|
||||
|
||||
|
||||
|
||||
|
||||
WXPUSHER_TOKEN = '' # wxpusher推送的token
|
||||
WXPUSHER_TOPIC_ID = '' # wxpusher推送的topicId
|
||||
WXPUSHER_CONTENT_TYPE = 2 # wxpusher推送的样式,1表示文字 2表示html(只发送body标签内部的数据即可,不包括body标签),默认为2
|
||||
# wxpusher消息推送
|
||||
def wxpusher(title: str, content: str) -> None:
|
||||
"""
|
||||
使用微信的wxpusher推送
|
||||
"""
|
||||
if not WXPUSHER_TOKEN or not WXPUSHER_TOPIC_ID:
|
||||
print("wxpusher 服务的 token 或者 topicId 未设置!!\n取消推送")
|
||||
return
|
||||
print("wxpusher 服务启动")
|
||||
|
||||
url = f"https://wxpusher.zjiecode.com/api/send/message"
|
||||
headers = {"Content-Type": "application/json;charset=utf-8"}
|
||||
contentType = 2
|
||||
if not WXPUSHER_CONTENT_TYPE:
|
||||
contentType = 2
|
||||
else:
|
||||
contentType = WXPUSHER_CONTENT_TYPE
|
||||
if contentType == 2:
|
||||
content = content.replace("\n", "<br/>")
|
||||
data = {
|
||||
"appToken":f"{WXPUSHER_TOKEN}",
|
||||
"content":f"{content}",
|
||||
"summary":f"{title}",
|
||||
"contentType":contentType,
|
||||
"topicIds":[
|
||||
f'{WXPUSHER_TOPIC_ID}'
|
||||
],
|
||||
"verifyPay":False
|
||||
}
|
||||
response = requests.post(
|
||||
url=url, data=json.dumps(data), headers=headers, timeout=15
|
||||
).json()
|
||||
|
||||
if response["code"] == 1000:
|
||||
print("wxpusher推送成功!")
|
||||
else:
|
||||
print("wxpusher推送失败!")
|
||||
print(f"wxpusher推送出错响应内容:{response}" )
|
||||
|
||||
|
||||
ql_auth_path = '/ql/data/config/auth.json'
|
||||
ql_config_path = '/ql/data/config/config.sh'
|
||||
#判断环境变量
|
||||
flag = 'new'
|
||||
if not os.path.exists(ql_auth_path):
|
||||
ql_auth_path = '/ql/config/auth.json'
|
||||
ql_config_path = '/ql/config/config.sh'
|
||||
if not os.path.exists(ql_config_path):
|
||||
ql_config_path = '/ql/config/config.js'
|
||||
flag = 'old'
|
||||
# ql_auth_path = r'D:\Docker\ql\config\auth.json'
|
||||
ql_url = 'http://localhost:5600'
|
||||
|
||||
|
||||
def __get_token() -> str or None:
|
||||
with open(ql_auth_path, 'r', encoding='utf-8') as f:
|
||||
j_data = json.load(f)
|
||||
return j_data.get('token')
|
||||
|
||||
|
||||
def __get__headers() -> dict:
|
||||
headers = {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'Authorization': 'Bearer ' + __get_token()
|
||||
}
|
||||
return headers
|
||||
|
||||
# 封装读取环境变量的方法
|
||||
def get_cookie(key, default="", output=True):
|
||||
def no_read():
|
||||
if output:
|
||||
print_now(f"未填写环境变量 {key} 请添加")
|
||||
return default
|
||||
return get_cookie_data(key) if get_cookie_data(key) else no_read()
|
||||
|
||||
#获取ck
|
||||
def get_cookie_data(name):
|
||||
ck_list = []
|
||||
remarks_list = []
|
||||
cookie = None
|
||||
cookies = get_config_and_envs(name)
|
||||
for ck in cookies:
|
||||
data_temp = {}
|
||||
if ck["name"] != name:
|
||||
continue
|
||||
if ck.get('status') == 0:
|
||||
# ck_list.append(ck.get('value'))
|
||||
# 直接添加CK
|
||||
ck_list.append(ck)
|
||||
# if len(ck_list) < 1:
|
||||
# print('变量{}共配置{}条CK,请添加环境变量,或查看环境变量状态'.format(name,len(ck_list)))
|
||||
return ck_list
|
||||
|
||||
# 修改print方法 避免某些环境下python执行print 不会去刷新缓存区导致信息第一时间不及时输出
|
||||
def print_now(content):
|
||||
print(content)
|
||||
stdout.flush()
|
||||
|
||||
|
||||
# 查询环境变量
|
||||
def get_envs(name: str = None) -> list:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
if name is not None:
|
||||
params['searchValue'] = name
|
||||
res = requests.get(ql_url + '/api/envs', headers=__get__headers(), params=params)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return j_data['data']
|
||||
return []
|
||||
|
||||
|
||||
# 查询环境变量+config.sh变量
|
||||
def get_config_and_envs(name: str = None) -> list:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
#返回的数据data
|
||||
data = []
|
||||
if name is not None:
|
||||
params['searchValue'] = name
|
||||
res = requests.get(ql_url + '/api/envs', headers=__get__headers(), params=params)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
data = j_data['data']
|
||||
with open(ql_config_path, 'r', encoding='utf-8') as f:
|
||||
while True:
|
||||
# Get next line from file
|
||||
line = f.readline()
|
||||
# If line is empty then end of file reached
|
||||
if not line :
|
||||
break;
|
||||
#print(line.strip())
|
||||
exportinfo = line.strip().replace("\"","").replace("\'","")
|
||||
#去除注释#行
|
||||
rm_str_list = re.findall(r'^#(.+?)', exportinfo,re.DOTALL)
|
||||
#print('rm_str_list数据:{}'.format(rm_str_list))
|
||||
exportinfolist = []
|
||||
if len(rm_str_list) == 1:
|
||||
exportinfo = ""
|
||||
#list_all = re.findall(r'export[ ](.+?)', exportinfo,re.DOTALL)
|
||||
#print('exportinfo数据:{}'.format(exportinfo))
|
||||
#以export分隔,字符前面新增标记作为数组0,数组1为后面需要的数据
|
||||
list_all = ("标记"+exportinfo.replace(" ","").replace(" ","")).split("export")
|
||||
#print('list_all数据:{}'.format(list_all))
|
||||
if len(list_all) > 1:
|
||||
#以=分割,查找需要的环境名字
|
||||
tmp = list_all[1].split("=")
|
||||
if len(tmp) > 1:
|
||||
|
||||
info = tmp[0]
|
||||
if name in info:
|
||||
#print('需要查询的环境数据:{}'.format(tmp))
|
||||
data_tmp = []
|
||||
data_json = {
|
||||
'id': None,
|
||||
'value': tmp[1],
|
||||
'status': 0,
|
||||
'name': name,
|
||||
'remarks': "",
|
||||
'position': None,
|
||||
'timestamp': int(time.time()*1000),
|
||||
'created': int(time.time()*1000)
|
||||
}
|
||||
if flag == 'old':
|
||||
data_json = {
|
||||
'_id': None,
|
||||
'value': tmp[1],
|
||||
'status': 0,
|
||||
'name': name,
|
||||
'remarks': "",
|
||||
'position': None,
|
||||
'timestamp': int(time.time()*1000),
|
||||
'created': int(time.time()*1000)
|
||||
}
|
||||
#print('需要的数据:{}'.format(data_json))
|
||||
data.append(data_json)
|
||||
#print('第二次配置数据:{}'.format(data))
|
||||
return data
|
||||
|
||||
|
||||
# 新增环境变量
|
||||
def post_envs(name: str, value: str, remarks: str = None) -> list:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
data = [{
|
||||
'name': name,
|
||||
'value': value
|
||||
}]
|
||||
if remarks is not None:
|
||||
data[0]['remarks'] = remarks
|
||||
res = requests.post(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return j_data['data']
|
||||
return []
|
||||
|
||||
|
||||
# 修改环境变量1,青龙2.11.0以下版本(不含2.11.0)
|
||||
def put_envs_old(_id: str, name: str, value: str, remarks: str = None) -> bool:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
|
||||
data = {
|
||||
'name': name,
|
||||
'value': value,
|
||||
'_id': _id
|
||||
}
|
||||
|
||||
if remarks is not None:
|
||||
data['remarks'] = remarks
|
||||
res = requests.put(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 修改环境变量2,青龙2.11.0以上版本(含2.11.0)
|
||||
def put_envs_new(_id: int, name: str, value: str, remarks: str = None) -> bool:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
|
||||
data = {
|
||||
'name': name,
|
||||
'value': value,
|
||||
'id': _id
|
||||
}
|
||||
|
||||
if remarks is not None:
|
||||
data['remarks'] = remarks
|
||||
res = requests.put(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 禁用环境变量
|
||||
def disable_env(_id: str) -> bool:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
data = [_id]
|
||||
res = requests.put(ql_url + '/api/envs/disable', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 启用环境变量
|
||||
def enable_env(_id: str) -> bool:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
data = [_id]
|
||||
res = requests.put(ql_url + '/api/envs/enable', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return True
|
||||
return False
|
||||
|
||||
# 删除环境变量
|
||||
def delete_env(_id: str) -> bool:
|
||||
params = {
|
||||
't': int(time.time() * 1000)
|
||||
}
|
||||
data = [_id]
|
||||
res = requests.delete(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data)
|
||||
j_data = res.json()
|
||||
if j_data['code'] == 200:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
def base64_encode(data):
|
||||
message_bytes = data.encode('utf-8') # 将字符串转换为字节型
|
||||
base64_data = base64.b64encode(message_bytes) #进行加密
|
||||
# base64_data = base64.b64encode(data) # 进行加密
|
||||
# print(base64_data,type(base64_data),len(base64_data))
|
||||
base64_data = base64_data.decode('utf-8')
|
||||
return base64_data
|
||||
|
||||
def base64_decode(data):
|
||||
#base64_bytes = data.encode('utf-8')
|
||||
message_bytes = base64.b64decode(data)
|
||||
message = message_bytes.decode('utf-8')
|
||||
return message
|
||||
|
||||
|
||||
|
||||
# WXPUSHER_TOKEN
|
||||
WoChangYouCK_WXPUSHER_TOKEN_temp = get_cookie("WoChangYouCK_WXPUSHER_TOKEN")
|
||||
if WoChangYouCK_WXPUSHER_TOKEN_temp != "" and len(WoChangYouCK_WXPUSHER_TOKEN_temp)>0:
|
||||
WXPUSHER_TOKEN = WoChangYouCK_WXPUSHER_TOKEN_temp[0]["value"]
|
||||
|
||||
# WXPUSHER_TOPIC_ID
|
||||
WoChangYouCK_WXPUSHER_TOPIC_ID_temp = get_cookie("WoChangYouCK_WXPUSHER_TOPIC_ID")
|
||||
if WoChangYouCK_WXPUSHER_TOPIC_ID_temp != "" and len(WoChangYouCK_WXPUSHER_TOPIC_ID_temp)>0:
|
||||
WXPUSHER_TOPIC_ID = WoChangYouCK_WXPUSHER_TOPIC_ID_temp[0]["value"]
|
||||
|
||||
msg = ""
|
||||
isDebugger = False
|
||||
|
||||
# 是否生成沃畅游access_token参数提交至青龙环境,默认False不生成,需要生成请填入True
|
||||
IsWoChangYouCK = False
|
||||
IsWoChangYouCK_temp = get_cookie("IsWoChangYouCK")
|
||||
if IsWoChangYouCK_temp != "" and len(IsWoChangYouCK_temp)>0:
|
||||
IsWoChangYouCKStr = IsWoChangYouCK_temp[0]["value"]
|
||||
if IsWoChangYouCKStr == "True":
|
||||
IsWoChangYouCK = True
|
||||
|
||||
# 是否生成联通app参数提交至青龙环境,默认False不生成,需要生成请填入True
|
||||
IsChinaUnicomParam = False
|
||||
IsChinaUnicomParam_temp = get_cookie("IsChinaUnicomParam")
|
||||
if IsChinaUnicomParam_temp != "" and len(IsChinaUnicomParam_temp)>0:
|
||||
IsChinaUnicomParamStr = IsChinaUnicomParam_temp[0]["value"]
|
||||
if IsChinaUnicomParamStr == "True":
|
||||
IsChinaUnicomParam = True
|
||||
# 生成token后添加到指定环境变量
|
||||
envName = "chinaUnicomCookie"
|
||||
ChinaUnicomEnvName_temp = get_cookie("ChinaUnicomEnvName")
|
||||
if ChinaUnicomEnvName_temp != "" and len(ChinaUnicomEnvName_temp)>0:
|
||||
envName = ChinaUnicomEnvName_temp[0]["value"]
|
||||
# 生成的多账号使用的拼接连接符,默认使用&
|
||||
chatMoreStr = "&"
|
||||
ChinaUnicomParam_chatMoreStr_temp = get_cookie("ChinaUnicomParam_chatMoreStr")
|
||||
if ChinaUnicomParam_chatMoreStr_temp != "" and len(ChinaUnicomParam_chatMoreStr_temp)>0:
|
||||
chatMoreStr = ChinaUnicomParam_chatMoreStr_temp[0]["value"]
|
||||
# 是否拼接appid,默认False不拼接,需要拼接请填入True
|
||||
chinaUnicomParam_flag = False
|
||||
ChinaUnicomParam_flag_temp = get_cookie("ChinaUnicomParam_flag")
|
||||
if ChinaUnicomParam_flag_temp != "" and len(ChinaUnicomParam_flag_temp)>0:
|
||||
chinaUnicomParam_flagStr = ChinaUnicomParam_flag_temp[0]["value"]
|
||||
if chinaUnicomParam_flagStr == "True":
|
||||
chinaUnicomParam_flag = True
|
||||
# appid和token_online之间的拼接符号,默认使用#
|
||||
chatStr = "#"
|
||||
ChinaUnicomParam_chatStr_temp = get_cookie("ChinaUnicomParam_chatStr")
|
||||
if ChinaUnicomParam_chatStr_temp != "" and len(ChinaUnicomParam_chatStr_temp)>0:
|
||||
chatStr = ChinaUnicomEnvName_temp[0]["value"]
|
||||
# 拼接appid是在token_online前面还是后面,1代表前面,2代表后面,默认appid在前面
|
||||
appidIndex = 1
|
||||
ChinaUnicomParam_appidIndex_temp = get_cookie("ChinaUnicomParam_appidIndex")
|
||||
if ChinaUnicomParam_appidIndex_temp != "" and len(ChinaUnicomParam_appidIndex_temp)>0:
|
||||
appidIndex = ChinaUnicomParam_appidIndex_temp[0]["value"]
|
||||
|
||||
# 需要提交青龙的联通参数
|
||||
dataParam = ""
|
||||
|
||||
class RSA_Encrypt:
|
||||
def __init__(self, key):
|
||||
if isinstance(key, str):
|
||||
# 若提供的rsa公钥不为pem格式 则先将hex转化为pem格式
|
||||
# self.key = bytes.fromhex(key) if "PUBLIC KEY" not in key else key.encode()
|
||||
self.key = self.public_key(key) if "PUBLIC KEY" not in key else key.encode()
|
||||
else:
|
||||
print("提供的公钥格式不正确")
|
||||
|
||||
def public_key(self, rsaExponent, rsaModulus=10001):
|
||||
e = int(rsaExponent, 16)
|
||||
n = int(rsaModulus, 16) # snipped for brevity
|
||||
pubkey = construct((n, e)).export_key()
|
||||
return pubkey
|
||||
|
||||
def encrypt(self, data, b64=False):
|
||||
data = data.encode('utf-8')
|
||||
length = len(data)
|
||||
default_length = 117
|
||||
pub_key = importKey(self.key)
|
||||
cipher = PKCS1_v1_5.new(pub_key)
|
||||
if length < default_length:
|
||||
rsa_text = cipher.encrypt(data)
|
||||
return b64encode(rsa_text).decode() if b64 else rsa_text.hex()
|
||||
offset = 0
|
||||
res = []
|
||||
while length - offset > 0:
|
||||
if length - offset > default_length:
|
||||
res.append(cipher.encrypt(data[offset:offset + default_length]))
|
||||
else:
|
||||
res.append(cipher.encrypt(data[offset:]))
|
||||
offset += default_length
|
||||
byte_data = b''.join(res)
|
||||
return b64encode(byte_data).decode() if b64 else byte_data.hex()
|
||||
|
||||
|
||||
|
||||
class UnicomLogin:
|
||||
def __init__(self, phone: str, password: str):
|
||||
self.rsa_key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc+CZK9bBA9IU+gZUOc6FUGu7y\nO9WpTNB0PzmgFBh96Mg1WrovD1oqZ+eIF4LjvxKXGOdI79JRdve9NPhQo07+uqGQ\ngE4imwNnRx7PFtCRryiIEcUoavuNtuRVoBAm6qdB0SrctgaqGfLgKvZHOnwTjyNq\njBUxzMeQlEC2czEMSwIDAQAB\n-----END PUBLIC KEY-----"
|
||||
self.phone_num = phone.rstrip("\n")
|
||||
self.password = password.rstrip("\n")
|
||||
self.deviceId = uuid4().hex
|
||||
self.appid = str(random.randint(0, 10))+"f"+str(random.randint(0, 10))+"af"+str(random.randint(0, 10))+str(random.randint(0, 10))+"ad"+str(random.randint(0, 10))+"912d306b5053abf90c7ebbb695887bc870ae0706d573c348539c26c5c0a878641fcc0d3e90acb9be1e6ef858a59af546f3c826988332376b7d18c8ea2398ee3a9c3db947e2471d32a49612"
|
||||
self.access_token = ""
|
||||
self.UA = "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@11.0300,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}"
|
||||
|
||||
|
||||
def login_unicom(self):
|
||||
global dataParam
|
||||
# print_now(self.phone_num+"---------"+self.password)
|
||||
headers = {
|
||||
'Host': 'm.client.10010.com',
|
||||
'Accept': '*/*',
|
||||
# 'User-Agent': 'ChinaUnicom.x CFNetwork iOS/15.0.1 unicom{version:iphone_c@11.0300}',
|
||||
'User-Agent': self.UA,
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
}
|
||||
data = f"isFirstInstall=1&simCount=1&yw_code=&deviceOS=android13&mobile={quote(RSA_Encrypt(self.rsa_key).encrypt(self.phone_num, b64=True))}&netWay=Wifi&version=android%4011.0300&deviceId={self.deviceId}&password={quote(RSA_Encrypt(self.rsa_key).encrypt(self.password, b64=True))}&keyVersion=&provinceChanel=general&appId=ChinaunicomMobileBusiness&deviceModel=LE2100&androidId={uuid4().hex[8:24]}&deviceBrand=×tamp={datetime.today().__format__('%Y%m%d%H%M%S')}"
|
||||
|
||||
# data = {
|
||||
# "version": "iphone_c@10.0700",
|
||||
# "mobile": quote(RSA_Encrypt(self.rsa_key).encrypt(self.phone_num, b64=True)),
|
||||
# "appId": self.appid,
|
||||
# "deviceId": self.deviceId,
|
||||
# "password": quote(RSA_Encrypt(self.rsa_key).encrypt(self.password, b64=True)),
|
||||
# }
|
||||
response = requests.post('https://m.client.10010.com/mobileService/login.htm', headers=headers,data=data)
|
||||
data = response.json()
|
||||
# print_now(f"{data}")
|
||||
self.ecs_token = data.get("ecs_token")
|
||||
if data.get("code") == '4':
|
||||
print_now(f'账号【{self.phone_num}】账号密码错误,跳过')
|
||||
return self.ecs_token
|
||||
self.token_online = data.get("token_online")
|
||||
if self.token_online == "" or self.token_online is None:
|
||||
print_now(f'账号【{self.phone_num}】获取token_online失败,成功获取到【appid】:{self.appid}')
|
||||
return self.ecs_token
|
||||
else:
|
||||
print_now(f'账号【{self.phone_num}】成功获取到【token_online】:{self.token_online}\n账号【{self.phone_num}】成功获取到【ecs_token】:{self.ecs_token}\n账号【{self.phone_num}】成功获取到【appid】:{self.appid}\n账号【{self.phone_num}】成功获取到【deviceId】:{self.deviceId}')
|
||||
|
||||
# 拼接参数appid
|
||||
if chinaUnicomParam_flag == True or chinaUnicomParam_flag == "True":
|
||||
# 在前
|
||||
if appidIndex == 1:
|
||||
print_now(f'账号【{self.phone_num}】生成appid+token为:\n{self.appId}{chatStr}{self.token_online}')
|
||||
# 使用chatMoreStr拼接
|
||||
dataParam = dataParam+chatMoreStr+self.appid+chatStr+self.token_online;
|
||||
else:
|
||||
# 在后
|
||||
dataParam = dataParam+chatMoreStr+self.token_online+chatStr+self.appid;
|
||||
else:
|
||||
# 使用chatMoreStr拼接
|
||||
dataParam = dataParam+chatMoreStr+self.token_online;
|
||||
return self.ecs_token
|
||||
|
||||
|
||||
# 方式一登录沃畅游
|
||||
def get_wo_speed_ticket(self):
|
||||
if self.ecs_token == "" or self.ecs_token is None:
|
||||
return ""
|
||||
|
||||
cookies = {
|
||||
'ecs_token': self.ecs_token,
|
||||
}
|
||||
|
||||
headers = {
|
||||
'Host': 'm.client.10010.com',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@10.0700}',
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Referer': 'https://m.client.10010.com',
|
||||
}
|
||||
|
||||
params = {
|
||||
'to_url': 'https://web.wostore.cn/web/flowGame/index.html?channelId=GAMELTAPP_90006',
|
||||
}
|
||||
|
||||
response = requests.get(
|
||||
'https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
allow_redirects=False
|
||||
)
|
||||
location = response.headers['Location']
|
||||
return location[location.find("ticket=") + len('ticket='):location.rfind("&versio")]
|
||||
|
||||
|
||||
def wo_speed_login_one(self):
|
||||
if self.ticket == "" or self.ticket is None:
|
||||
return ""
|
||||
headers = {
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Type': 'application/json;charset=utf-8',
|
||||
'Origin': 'https://web.wostore.cn',
|
||||
'Referer': 'https://web.wostore.cn/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'same-site',
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/109.0.0.0',
|
||||
'accept': 'application/json',
|
||||
'channelId': 'GAMELTAPP_90005',
|
||||
'device': '8',
|
||||
'rnVersion': '',
|
||||
'versionCode': '',
|
||||
}
|
||||
|
||||
json_data = {
|
||||
'identityType': 'ticketToken',
|
||||
'code': self.ticket,
|
||||
'uuid': '3cc1b0ff-ddb4-49dc-9e87-4d51811f7ea1',
|
||||
}
|
||||
|
||||
response = requests.post('https://game.wostore.cn/api/app/user/v2/login', headers=headers, json=json_data)
|
||||
d = response.json().get('data')
|
||||
if not d or d == "":
|
||||
print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游--个人中心,登录一下")
|
||||
return ""
|
||||
access_token = d.get('access_token',None)
|
||||
if not access_token and access_token != "":
|
||||
return access_token
|
||||
else:
|
||||
print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游--个人中心,登录一下")
|
||||
return ""
|
||||
|
||||
|
||||
|
||||
# 方式二登录
|
||||
def wo_speed_login_two(self):
|
||||
if self.ecs_token == "" or self.ecs_token is None:
|
||||
return ""
|
||||
count = 0
|
||||
while True:
|
||||
if count < 3 and self.access_token == "":
|
||||
count = self.login(count)
|
||||
if self.access_token == "":
|
||||
print_now(f"休眠3秒,再次请求获取access_token\n\n")
|
||||
time.sleep(3)
|
||||
else:
|
||||
break
|
||||
if self.access_token == "":
|
||||
print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游,登录一下")
|
||||
|
||||
|
||||
def login(self,count):
|
||||
url = 'https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm?to_url=https://web.wostore.cn/web/flowGame/index.html?channelId=GAMELTAPP_90006&pushid=99'
|
||||
headers = {
|
||||
'Content-Type': 'application/json;charset=utf-8',
|
||||
# "User-Agent": "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@10.0600,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}",
|
||||
"Cookie": "ecs_token=" + self.ecs_token
|
||||
}
|
||||
try:
|
||||
response = requests.get(url, headers=headers,allow_redirects=False)
|
||||
# print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】发送成功,响应:{response.headers}")
|
||||
# 获取location
|
||||
location = response.headers.get("location",None)
|
||||
headers["User-Agent"] = "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@10.0600,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}"
|
||||
# 获取ticket、channelId
|
||||
ticket = ""
|
||||
channelId = ""
|
||||
|
||||
if location is not None and location != "":
|
||||
key_value = location.split("?")[1].split("&")
|
||||
for i in range(len(key_value)):
|
||||
key_value_temp = key_value[i].split("=")
|
||||
if key_value_temp[0] == "ticket":
|
||||
ticket = key_value_temp[1]
|
||||
if key_value_temp[0] == "channelId":
|
||||
channelId = key_value_temp[1]
|
||||
|
||||
# 登录
|
||||
url = 'https://web.wostore.cn/api/app//user/v2/login'
|
||||
headers["channelId"] = channelId
|
||||
data = {
|
||||
'identityType': 'esToken',
|
||||
'code': self.ecs_token,
|
||||
'ticket': ticket,
|
||||
'uuid': "3cc1b0ff-ddb4-49dc-9e87-4d51811f7ea1"
|
||||
}
|
||||
# print_now(f'location:{location}\ticket:{ticket}\nheaders:{headers}\ndata:{data}')
|
||||
response = requests.post(url, headers=headers, data=json.dumps(data))
|
||||
text = response.json()
|
||||
# print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】 登录成功,响应:{text}\n")
|
||||
self.access_token = ""
|
||||
if text["code"] == 200:
|
||||
data = text["data"]
|
||||
access_token = data["access_token"]
|
||||
# print_now(f'账号{self.phone_num}登录成功,成功获取access_token,额外需要使用时请复制保存: {access_token}\n')
|
||||
if access_token is None or access_token == "":
|
||||
self.access_token = ""
|
||||
count += 1
|
||||
else:
|
||||
self.access_token = access_token
|
||||
else:
|
||||
print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】 登录请求响应:{text}\n")
|
||||
self.access_token = ""
|
||||
count += 1
|
||||
except Exception as e:
|
||||
count += 1
|
||||
print_now(f"\n\n账号{self.phone_num}登录请求出现错误,出错响应内容:{e}\n\n正在第{count}次重试中。。。" )
|
||||
self.access_token = ""
|
||||
return count
|
||||
|
||||
|
||||
|
||||
def deal_data(self):
|
||||
global msg
|
||||
global IsWoChangYouCK
|
||||
if self.access_token == "" or self.access_token is None:
|
||||
print_now(f'账号【{self.phone_num}】获取access_token失败')
|
||||
msg += f'账号【{self.phone_num}】获取access_token失败\n\n'
|
||||
return ""
|
||||
print_now(f'账号【{self.phone_num}】成功获取到【access_token】:{self.access_token}\n请复制保存使用')
|
||||
# 是否填入
|
||||
if IsWoChangYouCK == False or IsWoChangYouCK is None:
|
||||
print_now(f'系统设置不写入access_token至青龙环境')
|
||||
return ""
|
||||
else:
|
||||
print_now(f'系统设置写入access_token至青龙环境,开始写入。。。')
|
||||
try:
|
||||
# 获取沃畅游CK
|
||||
cklist_temp = get_cookie("WoChangYouCK")
|
||||
flag_temp = False
|
||||
if len(cklist_temp)>0:
|
||||
for i in range(len(cklist_temp)):
|
||||
ck_temp = cklist_temp[i]
|
||||
if ck_temp["remarks"] == phone:
|
||||
flag_temp = True
|
||||
put_flag = True
|
||||
if flag == "old":
|
||||
_id = ck_temp.get("_id",None)
|
||||
if not _id:
|
||||
_id = ck_temp["id"]
|
||||
put_flag = put_envs_new(_id, ck_temp['name'], self.access_token, phone)
|
||||
else:
|
||||
put_flag = put_envs_old(_id, ck_temp['name'], self.access_token, phone)
|
||||
# print("进入旧版本青龙禁用方法")
|
||||
# disable_env(_id)
|
||||
# delete_env(_id)
|
||||
elif flag == "new":
|
||||
put_flag = put_envs_new(ck_temp["id"], ck_temp['name'], self.access_token, phone)
|
||||
# print("进入新版本青龙禁用方法")
|
||||
# disable_env(ck_temp["id"])
|
||||
# delete_env(ck_temp["id"])
|
||||
if put_flag:
|
||||
print_now(f"账号【{self.phone_num}】自动更新access_token至青龙环境:WoChangYouCK 备注为:{phone}")
|
||||
msg += f"账号【{phone}】自动更新access_token至青龙环境:WoChangYouCK 备注为:{phone}\n\n"
|
||||
else:
|
||||
print_now(f"账号【{self.phone_num}】自动更新access_token至青龙环境:失败")
|
||||
msg += f"账号【{phone}】自动更新access_token至青龙环境:失败\n\n"
|
||||
if not flag_temp:
|
||||
post_envs("WoChangYouCK", self.access_token, phone)
|
||||
print_now(f"账号【{self.phone_num}】自动新增access_token至青龙环境:WoChangYouCK 备注为:{phone}")
|
||||
msg += f"账号【{phone}】自动新增access_token至青龙环境:WoChangYouCK 备注为:{phone}\n\n"
|
||||
except Exception as e:
|
||||
print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{phone}】 登录失败,错误信息:{e}\n")
|
||||
msg += f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{phone}】 登录失败,错误信息:{e}\n\n"
|
||||
|
||||
|
||||
def main(self):
|
||||
self.login_unicom()
|
||||
# 方式一登录
|
||||
# self.ticket = self.get_wo_speed_ticket()
|
||||
# self.access_token = self.wo_speed_login_one()
|
||||
# 方式二登录
|
||||
self.wo_speed_login_two()
|
||||
self.deal_data()
|
||||
|
||||
|
||||
# 将生成的环境变量填入青龙环境中
|
||||
def post_data_to_env():
|
||||
global msg
|
||||
global dataParam
|
||||
# 是否填入
|
||||
if IsChinaUnicomParam == False or IsChinaUnicomParam is None:
|
||||
print_now(f'系统设置不写入token_online至青龙环境')
|
||||
return ""
|
||||
else:
|
||||
print_now(f'系统设置写入token_online至青龙环境,开始写入。。。')
|
||||
# 截取第一位拼接参数
|
||||
if len(dataParam)>1:
|
||||
dataParam = dataParam[1:]
|
||||
else:
|
||||
print_now(f'未获取到token_online参数')
|
||||
return ""
|
||||
try:
|
||||
# 获取环境CK
|
||||
cklist_temp = get_cookie(envName)
|
||||
flag_temp = False
|
||||
if len(cklist_temp)>0:
|
||||
for i in range(len(cklist_temp)):
|
||||
ck_temp = cklist_temp[i]
|
||||
if ck_temp["remarks"] == "由“联通和沃畅游密码登录”脚本自动生成":
|
||||
flag_temp = True
|
||||
put_flag = True
|
||||
if flag == "old":
|
||||
_id = ck_temp.get("_id",None)
|
||||
if not _id:
|
||||
_id = ck_temp["id"]
|
||||
put_flag = put_envs_new(_id, ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成")
|
||||
else:
|
||||
put_flag = put_envs_old(_id, ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成")
|
||||
# print("进入旧版本青龙禁用方法")
|
||||
# disable_env(_id)
|
||||
# delete_env(_id)
|
||||
elif flag == "new":
|
||||
put_flag = put_envs_new(ck_temp["id"], ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成")
|
||||
# print("进入新版本青龙禁用方法")
|
||||
# disable_env(ck_temp["id"])
|
||||
# delete_env(ck_temp["id"])
|
||||
if put_flag:
|
||||
print_now(f"已将全部正常执行生成联通参数的账号,自动更新至青龙环境:{envName} 由“联通和沃畅游密码登录”脚本自动生成")
|
||||
msg += f"已将全部正常执行生成联通参数的账号,自动更新至青龙环境:{envName} 由“联通和沃畅游密码登录”脚本自动生成\n\n"
|
||||
else:
|
||||
print_now(f"全部正常执行生成联通参数的账号,自动更新至青龙环境:失败")
|
||||
msg += f"全部正常执行生成联通参数的账号,自动更新至青龙环境:失败\n\n"
|
||||
if not flag_temp:
|
||||
post_envs(envName, dataParam, "由“联通和沃畅游密码登录”脚本自动生成")
|
||||
print_now(f"已将全部正常执行生成联通参数的账号,自动新增至青龙环境:{envName} 备注为:由“联通和沃畅游密码登录”脚本自动生成")
|
||||
msg += f"已将全部正常执行生成联通参数的账号,自动新增至青龙环境:{envName} 备注为:由“联通和沃畅游密码登录”脚本自动生成\n\n"
|
||||
except Exception as e:
|
||||
print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 联通和沃畅游密码登录脚本生成参数提交青龙失败,错误信息:{e}\n")
|
||||
msg += f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 联通和沃畅游密码登录脚本生成参数提交青龙失败,错误信息:{e}\n\n"
|
||||
|
||||
|
||||
def start(phone,password):
|
||||
ul = UnicomLogin(phone,password)
|
||||
ul.main()
|
||||
|
||||
if __name__ == "__main__":
|
||||
l = []
|
||||
ck_list = []
|
||||
cklist = get_cookie("WoChangYouCK_PSW")
|
||||
for i in range(len(cklist)):
|
||||
|
||||
#多账号以#分割开的ck
|
||||
split1 = cklist[i]['value'].split("#")
|
||||
#多账号以@分割开的ck
|
||||
split2 = cklist[i]['value'].split("@")
|
||||
#多账号以换行\n分割开的ck
|
||||
split3 = cklist[i]['value'].split("\n")
|
||||
remarks = cklist[i].get("remarks",None)
|
||||
if len(split1)>1:
|
||||
for j in range(len(split1)):
|
||||
info = {}
|
||||
info['value'] = split1[j]
|
||||
info['remarks'] = split1[j].split("&")[0]
|
||||
ck_list.append(info)
|
||||
elif len(split2)>1:
|
||||
for j in range(len(split2)):
|
||||
info = {}
|
||||
info['value'] = split2[j]
|
||||
info['remarks'] = split2[j].split("&")[0]
|
||||
ck_list.append(info)
|
||||
elif len(split3)>1:
|
||||
for j in range(len(split3)):
|
||||
info = {}
|
||||
info['value'] = split3[j]
|
||||
info['remarks'] = split3[j].split("&")[0]
|
||||
ck_list.append(info)
|
||||
else:
|
||||
if remarks is None or remarks == "":
|
||||
cklist[i]['remarks'] = cklist[i]['value']
|
||||
ck_list.append(cklist[i])
|
||||
if len(ck_list)<1:
|
||||
print_now('未添加CK,退出程序~')
|
||||
exit(0)
|
||||
|
||||
|
||||
for i in range(len(ck_list)):
|
||||
ck = ck_list[i]
|
||||
data = ck.get("value",None)
|
||||
if data is None:
|
||||
print_now("当前账号未填写 跳过\n")
|
||||
continue
|
||||
tmp_list = data.split("&")
|
||||
if len(tmp_list)<2:
|
||||
print_now("参数不齐 跳过\n")
|
||||
continue
|
||||
phone = tmp_list[0]
|
||||
password = tmp_list[1]
|
||||
print_now(f'开始执行第 {i+1} 个账号:{phone}')
|
||||
start(phone,password)
|
||||
#解决随机时间问题
|
||||
ran_time = random.randint(3, 5)
|
||||
if isDebugger == False and i != (len(ck_list)-1):
|
||||
print_now(f"随机休眠{ran_time}秒,执行下一个账号操作\n\n")
|
||||
time.sleep(ran_time)
|
||||
else:
|
||||
print_now("\n\n")
|
||||
# 最后写入联通
|
||||
post_data_to_env()
|
||||
if WXPUSHER_TOKEN != "" and WXPUSHER_TOPIC_ID != "" and msg != "":
|
||||
wxpusher("联通和沃畅游密码登录",msg)
|
||||
169
脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js
Normal file
169
脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js
Normal file
@@ -0,0 +1,169 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 臭宝乐园.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: abd99e11219d5db720c17836b4f69202320cecd65c42f8cf70ab848b1029a204
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: smallfawn
|
||||
@Date: 2024.06.09 12.51
|
||||
@Description: 臭宝乐园小程序 签到换螺蛳粉
|
||||
------------------------------------------
|
||||
变量名choubao
|
||||
变量值 https://cbxcx.weinian.com.cn/wnuser 请求头Headers中authorization的值 多账号&或换行或新建同名变量
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("臭宝乐园");
|
||||
let ckName = `choubao`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user
|
||||
$.ckFlag = true;
|
||||
await getUserInfo()
|
||||
if ($.ckFlag) {
|
||||
await signInCheck()
|
||||
await $.wait(3000)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function signInCheck() {
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/checkSignNum',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'authorization': $.token,
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json',
|
||||
'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
|
||||
}
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.status == 200) {
|
||||
await signIn()
|
||||
}else{
|
||||
$.log(`获取签到状态[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
async function signIn() {
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/daySign',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'authorization': $.token,
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json',
|
||||
'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
|
||||
}
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.status == 200) {
|
||||
$.log(`签到成功`)
|
||||
} else {
|
||||
$.log(`签到失败【${result.msg}】`)
|
||||
}
|
||||
}
|
||||
async function getUserInfo() {
|
||||
let config = {
|
||||
method: 'POST',
|
||||
url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/getMemberUser',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'authorization': $.token,
|
||||
'charset': 'utf-8',
|
||||
'content-type': 'application/json',
|
||||
'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
|
||||
}
|
||||
};
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.status == 200) {
|
||||
$.log(`[${result.data.nickName}] 嗦粉币[${result.data.points}]`)
|
||||
} else {
|
||||
$.log(`获取用户信息失败【${result.msg}】`)
|
||||
$.ckFlag = false
|
||||
}
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
254
脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js
Normal file
254
脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js
Normal file
@@ -0,0 +1,254 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/choubao.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/choubao.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/choubao.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 5bbd98d8a822e4074280f475b354bbb68d4b7a6a72e3f9909b638231008e3ccb
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
臭宝乐园 微信小程序 签到得积分 换螺蛳粉
|
||||
抓https://cb-bags-slb.weinian.com.cn 请求头token 仅支持单账号
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code 因为抓到的有效期很短只有2小时
|
||||
变量名称:choubaoleyuan
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("臭宝乐园");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `choubaoleyuan`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wx2206cca563f6f937',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
|
||||
this.wcsid = this.user[0]
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
this.token = 'Bearer' + this.token
|
||||
await this.getUserInfo()
|
||||
await this.track()
|
||||
await this.checkSign()
|
||||
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://cb-bags-slb.weinian.com.cn/bff/v1/auth/wechatLogin`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
"authorization": "Bearer" + this.token
|
||||
}
|
||||
,
|
||||
data: {
|
||||
loginCode: code
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.status == '200') {
|
||||
this.token = result.data
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/getMemberUser`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/json",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027'
|
||||
}
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.status == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `[${result.data.nickName}] 积分[${result.data.points}]🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
async track() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://cb-bags-slb.weinian.com.cn/member/v1/memberBuryPoint/add`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/json",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027'
|
||||
},
|
||||
data: { "appletVersion": "2.0.31", "phoneSystem": "Windows Unknown x64", "phoneModel": "microsoft", "functionName": "签到", "module": "首页", "linkUrl": "pages/signIn/signIn", "secondPage": "" }
|
||||
}
|
||||
await axios.request(options);
|
||||
}
|
||||
async checkSign() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/checkSignNum`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/json",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027'
|
||||
},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.status == '200') {
|
||||
//打印签到结果
|
||||
await this.signIn()
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/daySign`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/json",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site"
|
||||
},
|
||||
data: {
|
||||
|
||||
}
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.status == '200') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `签到成功🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
679
脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js
Normal file
679
脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js
Normal file
@@ -0,0 +1,679 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hyjk.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hyjk.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/hyjk.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: fafd24e84af03196a944c9196f8bdd6e640018c604fb61c80a661c075a3d5db6
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 荷叶健康小程序
|
||||
cron: 30 10 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
微信荷叶健康小程序 免费水果+打卡签到抽奖
|
||||
抓tuan.api.ybm100.com/miniapp中请求头的token 多账户&或换行
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
global['window'] = {}
|
||||
global['navigator'] = {}
|
||||
const { JSEncrypt } = require("encryptlong")
|
||||
const JsRsaSign = require("jsrsasign")
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("荷叶健康小程序");
|
||||
let ckName = `hyjk`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = this.user[0];
|
||||
this.channelCode = this.user[1] || process.env.HYJK_CHANNEL_CODE || "130";
|
||||
this.userFlag = false
|
||||
this.userId = ''
|
||||
this.headers = {
|
||||
"host": "tuan.api.ybm100.com",
|
||||
"userid": "" + this.userId,
|
||||
"referer": "https://www.heyejk.com/",
|
||||
"apptype": "1",
|
||||
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x18004630) NetType/WIFI Language/zh_CN miniProgram/wx776afedbfae3a228",
|
||||
"appversion": "3.1.7",
|
||||
"origin": "https://www.heyejk.com",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"terminal": "h5",
|
||||
"usertype": "groupuser",
|
||||
"appname": "ykq-xcx",
|
||||
"token": "" + this.token,
|
||||
"accept-language": "zh-CN,zh-Hans;q=0.9",
|
||||
"accept": "application/json, text/plain, */*",
|
||||
"content-type": "application/json;charset=UTF-8",
|
||||
"accept-encoding": "gzip, deflate, br",
|
||||
"sec-fetch-mode": "cors"
|
||||
}
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.getFruitInfo()
|
||||
await this.autoByUserOperation()
|
||||
await this.getSignInfo()
|
||||
}
|
||||
|
||||
async getSignInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tuan.api.ybm100.com/miniapp/marketing/signActivity/signRecord`,
|
||||
headers: this.headers,
|
||||
data: { "actId": "9093", "channelCode": this.channelCode, "adornId": "217" }
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result.code == 0) {
|
||||
const isSigned = result?.result?.todaySignStatusDesc === "已签到";
|
||||
$.log(`[账号${this.index}] 今日签到: ${isSigned ? "已签到" : "未签到"}`)
|
||||
if (!isSigned) {
|
||||
await this.doSign()
|
||||
}
|
||||
} else {
|
||||
$.log(`[账号${this.index}] 获取签到状态失败[${result.msg}]`);
|
||||
}
|
||||
}
|
||||
|
||||
async doSign() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tuan.api.ybm100.com/miniapp/marketing/signActivity/sign`,
|
||||
headers: this.headers,
|
||||
data: { "actId": "9093", "channelCode": this.channelCode, "adornId": "217" }
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == '0') {
|
||||
$.log(`[账号${this.index}] 签到成功[${result.msg}]`);
|
||||
} else {
|
||||
$.log(`[账号${this.index}] 签到失败:${result.msg}`)
|
||||
}
|
||||
}
|
||||
|
||||
async getFruitInfo() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getMyManorInfo?channelCode=${this.channelCode}`,
|
||||
headers: this.headers,
|
||||
};
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`[账号${this.index}] [${result.result.kettleWater}]-[${result.result.progressBarTips}]`)
|
||||
this.treeId = Number(result.result.treeId)
|
||||
this.userId = result.result.userId
|
||||
this.headers.userid = String(this.userId || "")
|
||||
this.todayFullWaterTaskId = Number(result?.result?.todayFullWaterTaskId || 0)
|
||||
for (let i = 0; i < Math.floor(Number(result.result.kettleWater) / 10); i++) {
|
||||
await $.wait(3000)
|
||||
await this.doWater()
|
||||
}
|
||||
} else {
|
||||
$.log(`[账号${this.index}] 查询失败[${result.msg}]`);
|
||||
}
|
||||
}
|
||||
async doWater() {
|
||||
try {
|
||||
let data = { "channelCode": this.channelCode, "treeId": this.treeId, "nonce": $.randomString(6) }
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/water/watering?secret=${encodeURIComponent(this.encrypt(data))}`,
|
||||
headers: this.headers,
|
||||
data: data
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result?.code == 0) {
|
||||
$.log(`账号${this.index}] 浇水[${result.result.progressBarTips}]`)
|
||||
} else {
|
||||
$.log(`账号${this.index}] 胶水[${result.msg}]`);
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
request(options) {
|
||||
const finalOptions = {
|
||||
timeout: Number(process.env.HYJK_HTTP_TIMEOUT || 15000),
|
||||
...options,
|
||||
headers: {
|
||||
...this.headers,
|
||||
...(options.headers || {})
|
||||
}
|
||||
};
|
||||
return axios.request(finalOptions);
|
||||
}
|
||||
|
||||
async userOperation(operateType, operateValueObj) {
|
||||
const data = {
|
||||
operateType,
|
||||
operateValue: JSON.stringify(operateValueObj),
|
||||
channelCode: this.channelCode
|
||||
};
|
||||
const { data: result } = await this.request({
|
||||
method: "POST",
|
||||
url: "https://tuan.api.ybm100.com/api/healthSquare/user/userOperation",
|
||||
data
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async getTaskListNew() {
|
||||
const { data: result } = await this.request({
|
||||
method: "GET",
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/task/getTaskListNew?channelCode=${this.channelCode}&venueId=5`
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
async getPopupList() {
|
||||
const { data: result } = await this.request({
|
||||
method: "GET",
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getPopup`,
|
||||
params: {
|
||||
channelCode: this.channelCode,
|
||||
entranceType: 0
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async getVenueInfo() {
|
||||
const { data: result } = await this.request({
|
||||
method: "GET",
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getVenueInfo`,
|
||||
params: { channelCode: this.channelCode }
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async getBlindBoxInfo(taskId) {
|
||||
const { data: result } = await this.request({
|
||||
method: "GET",
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/task/getBlindBoxInfo`,
|
||||
params: {
|
||||
channelCode: this.channelCode,
|
||||
taskId
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async collectWater(payload) {
|
||||
const data = {
|
||||
channelCode: this.channelCode,
|
||||
nonce: $.randomString(6),
|
||||
...payload
|
||||
};
|
||||
const secret = encodeURIComponent(this.encrypt(data));
|
||||
const { data: result } = await this.request({
|
||||
method: "POST",
|
||||
url: `https://tuan.api.ybm100.com/api/healthSquare/water/collectWater?secret=${secret}`,
|
||||
data
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async goFruitOrGarden(taskId) {
|
||||
const { data: result } = await this.request({
|
||||
method: "POST",
|
||||
url: `https://tuan.api.ybm100.com/healthSquare/herbalGarden/goFruitOrGarden`,
|
||||
data: {
|
||||
channelCode: this.channelCode,
|
||||
taskId: Number(taskId)
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
flattenTaskList(taskResult) {
|
||||
if (!taskResult || taskResult.code !== 0) return [];
|
||||
const root = taskResult.result;
|
||||
if (Array.isArray(root)) return root;
|
||||
if (Array.isArray(root?.list)) {
|
||||
if (root.list.some(item => item && Object.prototype.hasOwnProperty.call(item, "taskId"))) {
|
||||
return root.list;
|
||||
}
|
||||
return root.list.flatMap(group => Array.isArray(group?.taskList) ? group.taskList : []);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
async autoByUserOperation() {
|
||||
await this.autoTodayFullWaterTask();
|
||||
await this.autoPopups();
|
||||
await this.autoVenueClicks();
|
||||
await this.autoTasks();
|
||||
}
|
||||
|
||||
|
||||
async autoTodayFullWaterTask() {
|
||||
try {
|
||||
if (!this.todayFullWaterTaskId) return;
|
||||
const opRes = await this.userOperation(6, { taskId: this.todayFullWaterTaskId, status: 1 });
|
||||
$.log(`[账号${this.index}] fullWater(taskId=${this.todayFullWaterTaskId}) 上报: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(500);
|
||||
} catch (e) {
|
||||
$.log(`[账号${this.index}] fullWater自动化异常: ${e.message}`);
|
||||
}
|
||||
}
|
||||
async autoPopups() {
|
||||
try {
|
||||
const popupRes = await this.getPopupList();
|
||||
const list = Array.isArray(popupRes?.result?.list) ? popupRes.result.list : [];
|
||||
for (const popup of list) {
|
||||
const payload = {
|
||||
popupType: Number(popup?.popupType || 0),
|
||||
waterNum: Number(popup?.waterNum || 0)
|
||||
};
|
||||
const opRes = await this.userOperation(7, payload);
|
||||
$.log(`[账号${this.index}] popupType=${payload.popupType} 上报: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(500);
|
||||
}
|
||||
} catch (e) {
|
||||
$.log(`[账号${this.index}] popup自动化异常: ${e.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async autoVenueClicks() {
|
||||
try {
|
||||
const venueRes = await this.getVenueInfo();
|
||||
const list = Array.isArray(venueRes?.result?.list) ? venueRes.result.list : [];
|
||||
for (const venue of list) {
|
||||
if (Number(venue?.clickStatus) === 0 && venue?.id) {
|
||||
const opRes = await this.userOperation(10, { venueId: Number(venue.id) });
|
||||
$.log(`[账号${this.index}] venueId=${venue.id} 上报: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(500);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.log(`[账号${this.index}] venue自动化异常: ${e.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
normalizeTaskNumber(value, fallback = 0) {
|
||||
const n = Number(value);
|
||||
return Number.isFinite(n) ? n : fallback;
|
||||
}
|
||||
|
||||
resolveTaskEventType(item) {
|
||||
const taskType = this.normalizeTaskNumber(item?.taskType);
|
||||
const browseType = this.normalizeTaskNumber(item?.browseType);
|
||||
const waterEventType = this.normalizeTaskNumber(item?.waterEventType);
|
||||
if (taskType === 50) {
|
||||
if (browseType === 1) return 11;
|
||||
if (browseType === 2) return 12;
|
||||
if (browseType === 3) return 13;
|
||||
return 11;
|
||||
}
|
||||
if (taskType === 60 || taskType === 61) return 7;
|
||||
if (taskType === 70) return 5;
|
||||
if (taskType === 80) return 3;
|
||||
if (taskType === 90) return 4;
|
||||
if (taskType === 110 || taskType === 120) return waterEventType || 0;
|
||||
return waterEventType || this.normalizeTaskNumber(item?.eventType);
|
||||
}
|
||||
|
||||
resolveTaskWaterNum(item) {
|
||||
const raw = [
|
||||
item?.reward,
|
||||
item?.waterNum,
|
||||
item?.waterConf,
|
||||
item?.taskRewardNum
|
||||
];
|
||||
for (const value of raw) {
|
||||
const n = Number(value);
|
||||
if (Number.isFinite(n) && n > 0) return n;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async claimTaskWater(item, tag = "claim") {
|
||||
const taskId = this.normalizeTaskNumber(item?.taskId);
|
||||
const eventType = this.resolveTaskEventType(item);
|
||||
if (!eventType) {
|
||||
$.log(`[账号${this.index}] ${tag} taskId=${taskId} 跳过: 缺少eventType(taskType=${this.normalizeTaskNumber(item?.taskType)})`);
|
||||
return;
|
||||
}
|
||||
const payload = {
|
||||
extTask: 0,
|
||||
eventType
|
||||
};
|
||||
if (taskId) payload.taskId = taskId;
|
||||
const waterNum = this.resolveTaskWaterNum(item);
|
||||
if (waterNum) payload.waterNum = waterNum;
|
||||
const res = await this.collectWater(payload);
|
||||
$.log(`[账号${this.index}] ${tag} collectWater(taskId=${taskId},eventType=${eventType},waterNum=${waterNum || 0}): ${res?.msg || res?.code}`);
|
||||
}
|
||||
|
||||
logTaskItem(item, prefix = "task") {
|
||||
const taskId = this.normalizeTaskNumber(item?.taskId);
|
||||
const taskType = this.normalizeTaskNumber(item?.taskType);
|
||||
const taskStatus = this.normalizeTaskNumber(item?.taskStatus);
|
||||
const browseType = this.normalizeTaskNumber(item?.browseType);
|
||||
const waterEventType = this.normalizeTaskNumber(item?.waterEventType);
|
||||
$.log(`[账号${this.index}] ${prefix} taskId=${taskId}, taskType=${taskType}, taskStatus=${taskStatus}, browseType=${browseType}, waterEventType=${waterEventType}`);
|
||||
}
|
||||
|
||||
buildBrowseSecondsCandidates(item) {
|
||||
const candidates = [];
|
||||
const maybeSeconds = [
|
||||
item?.seconds,
|
||||
item?.browseSeconds,
|
||||
item?.needSeconds,
|
||||
item?.taskSeconds,
|
||||
process.env.HYJK_BROWSE_SECONDS
|
||||
];
|
||||
for (const v of maybeSeconds) {
|
||||
const n = Number(v);
|
||||
if (Number.isFinite(n) && n >= 0) candidates.push(n);
|
||||
}
|
||||
candidates.unshift(0, 20, 30, 60);
|
||||
return [...new Set(candidates.filter(n => Number.isFinite(n) && n >= 0))];
|
||||
}
|
||||
|
||||
resolveBrowseTargetSeconds(item) {
|
||||
const maybe = [
|
||||
item?.needSeconds,
|
||||
item?.seconds,
|
||||
item?.browseSeconds,
|
||||
item?.taskSeconds,
|
||||
process.env.HYJK_BROWSE_SECONDS
|
||||
];
|
||||
for (const v of maybe) {
|
||||
const n = Number(v);
|
||||
if (Number.isFinite(n) && n > 0) return n;
|
||||
}
|
||||
return 20;
|
||||
}
|
||||
|
||||
async autoBrowseTask(item) {
|
||||
const taskId = this.normalizeTaskNumber(item?.taskId);
|
||||
const targetSeconds = this.resolveBrowseTargetSeconds(item);
|
||||
const waitPadding = Number(process.env.HYJK_BROWSE_WAIT_PADDING || 1);
|
||||
|
||||
const startRes = await this.userOperation(5, { taskId, seconds: 0 });
|
||||
$.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 起始上报seconds=0: ${startRes?.msg || startRes?.code}`);
|
||||
|
||||
const waitMs = Math.max(0, Math.floor((targetSeconds + waitPadding) * 1000));
|
||||
if (waitMs > 0) {
|
||||
$.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 等待${Math.floor(waitMs / 1000)}秒以满足停留时长`);
|
||||
await $.wait(62);
|
||||
}
|
||||
|
||||
const targetRes = await this.userOperation(5, { taskId, seconds: targetSeconds });
|
||||
$.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 目标上报seconds=${targetSeconds}: ${targetRes?.msg || targetRes?.code}`);
|
||||
|
||||
const secondsCandidates = this.buildBrowseSecondsCandidates(item).filter(s => s !== 0 && s !== targetSeconds);
|
||||
for (const seconds of secondsCandidates) {
|
||||
const opRes = await this.userOperation(5, { taskId, seconds });
|
||||
$.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 兜底上报seconds=${seconds}: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(400);
|
||||
}
|
||||
}
|
||||
|
||||
async autoTasks() {
|
||||
try {
|
||||
const firstTaskRes = await this.getTaskListNew();
|
||||
const firstTaskList = this.flattenTaskList(firstTaskRes);
|
||||
$.log(`[账号${this.index}] taskList数量: ${firstTaskList.length}`);
|
||||
for (const item of firstTaskList) {
|
||||
const taskType = Number(item?.taskType);
|
||||
const taskStatus = Number(item?.taskStatus);
|
||||
const taskId = Number(item?.taskId);
|
||||
if (!taskId) continue;
|
||||
this.logTaskItem(item, "scan");
|
||||
|
||||
if (taskType === 50 && (taskStatus === 0 || taskStatus === 3)) {
|
||||
await this.autoBrowseTask(item);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (taskType === 70 && taskStatus === 0) {
|
||||
const opRes = await this.userOperation(9, { taskId });
|
||||
$.log(`[账号${this.index}] task70(taskId=${taskId}) 上报: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(500);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (taskType === 80 && (taskStatus === 0 || taskStatus === 3)) {
|
||||
await this.autoBlindBox(taskId);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((taskType === 60 || taskType === 61) && taskStatus === 0) {
|
||||
await this.claimTaskWater(item, "task60/61直领");
|
||||
await $.wait(500);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (taskType === 90 && (taskStatus === 0 || taskStatus === 3)) {
|
||||
await this.claimTaskWater(item, "task90直领");
|
||||
await $.wait(500);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((taskType === 110 || taskType === 120) && (taskStatus === 0 || taskStatus === 3)) {
|
||||
const jumpRes = await this.goFruitOrGarden(taskId);
|
||||
$.log(`[账号${this.index}] task${taskType}(taskId=${taskId}) goFruitOrGarden: ${jumpRes?.msg || jumpRes?.code}`);
|
||||
await $.wait(500);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (taskStatus === 1) {
|
||||
await this.claimTaskWater(item, "立即领奖");
|
||||
await $.wait(500);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (taskStatus !== 2 && taskStatus !== 10000) {
|
||||
$.log(`[账号${this.index}] 未适配任务: taskType=${taskType}, taskStatus=${taskStatus}, taskId=${taskId}`);
|
||||
}
|
||||
}
|
||||
|
||||
const secondTaskRes = await this.getTaskListNew();
|
||||
const secondTaskList = this.flattenTaskList(secondTaskRes);
|
||||
for (const item of secondTaskList) {
|
||||
const taskStatus = this.normalizeTaskNumber(item?.taskStatus);
|
||||
if (taskStatus !== 1) continue;
|
||||
await this.claimTaskWater(item, "二次领奖");
|
||||
await $.wait(500);
|
||||
}
|
||||
} catch (e) {
|
||||
$.log(`[账号${this.index}] task自动化异常: ${e.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async autoBlindBox(taskId) {
|
||||
try {
|
||||
const boxRes = await this.getBlindBoxInfo(taskId);
|
||||
const boxList = Array.isArray(boxRes?.result) ? boxRes.result : [];
|
||||
for (const box of boxList) {
|
||||
if (Number(box?.status) === 0 || Number(box?.status) === 1) {
|
||||
const blindBoxId = Number(box?.blindBoxId);
|
||||
if (!blindBoxId) continue;
|
||||
const opRes = await this.userOperation(4, { taskId, blindBoxId });
|
||||
$.log(`[账号${this.index}] 盲盒(taskId=${taskId}, blindBoxId=${blindBoxId}) 上报: ${opRes?.msg || opRes?.code}`);
|
||||
await $.wait(500);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.log(`[账号${this.index}] 盲盒自动化异常(taskId=${taskId}): ${e.message}`);
|
||||
}
|
||||
}
|
||||
encrypt(body) {
|
||||
|
||||
|
||||
const PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiBksv2xaOJdSWblaTQl93HI393gYHqKFs89EIFBWYSmYSV+z8XXzMO/Xyo8EeWRpAjT5TuBf0wN467aBx3nsDfJd7e3+txBS7nf+S7Nyjnxx2J5AKPWx1gVmr/OF3aWqxg+DPCB7avakhj+p0QjoJ7eMqgJl/HSX2Kfb6/O3J9wIDAQAB";
|
||||
const PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKIGSy/bFo4l1JZuVpNCX3ccjf3eBgeooWzz0QgUFZhKZhJX7PxdfMw79fKjwR5ZGkCNPlO4F/TA3jrtoHHeewN8l3t7f63EFLud/5Ls3KOfHHYnkAo9bHWBWav84XdparGD4M8IHtq9qSGP6nRCOgnt4yqAmX8dJfYp9vr87cn3AgMBAAECgYEAlwzbB5Bu5LKsEFppZ/wW2ArM7YIRiQ5TACoGFEv1HfcuVaeXDmdxs02rKzwzDEHxUYDcPFyCKPGtvK5QSBgsAUUBHb6uu0fNGUccGX31NRAfLuQ8fj3W0uvkoYlpDARuokDHhWNqWzI6f8bFHkewJwpjXCO8w1WkogTLiX9Gu3ECQQDd5J4jEDS5+7KaohYRoryyX939mzsZ4RC6ufsfzTJwSlnLyYHEbm0Cs+7gbBxRrioqApBMQPIIoa5ujm1C88MNAkEAuu3htlbpR1ZL9b3wUuf3el/D3i/k9XvSChfHQ1q46Y/eck2yEDH9Kv/ZUxEl4fR8mB2MONm9oc2l+chPd9uQEwJBALcWuNU9vgPoB0tIiuUqXoDgUY+80ltcNi2c3/Uxn3jAIK/iKU0nwJMGXQiYrBVJnEjlrKL+w7cTkZZvtwATmtECQC2JV4vQvkFHj3eMzqeTpKDmBVPx/OekQzV8N2l8B0G2b20O6kqxssevzeRDcCQMJ/HyeL88o8pvy3f+yQUcsosCQQDZXV8K7Ek0R/V3dAdUzoetFSlfjCGy9QKPruz7m+iXBASxiA0R7YGfJzc8jWpuv0pxujtB/awy22K/ggLAhkZU";
|
||||
|
||||
const JAVA_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNQpS4ZeHRiIPFIdZgupShTHFlGOqFkT6XEqByvWqt2BvLo3a+YfzyJHOXyfX41OvbIkuIaycuxU9w7RHI1e7F3O7Io+XxncjyU3GR+ae2DEtLaG3o/rtpONF5q1jTN/Spu4GKXsjhHrP9xxMThLF6134NKAyQZfvOms0gS0zmxwIDAQAB"
|
||||
const JAVA_PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM1ClLhl4dGIg8Uh1mC6lKFMcWUY6oWRPpcSoHK9aq3YG8ujdr5h/PIkc5fJ9fjU69siS4hrJy7FT3DtEcjV7sXc7sij5fGdyPJTcZH5p7YMS0tobej+u2k40XmrWNM39Km7gYpeyOEes/3HExOEsXrXfg0oDJBl+86azSBLTObHAgMBAAECgYA08JI5CRX4G/SYeIS5SAYjn/qzL3z1XCO/hS9ayJ3mHpH0sMFkkxNRRLOHl7BYMFpwl2TR14kwl/VIU+y9VugRK6Se/gdJ/jwGiMdVkO6tGD7s8TwLcgNjAVbwpZCq40h8dQazzyIsPxyww4AP9fQlo5x3eY9v8icw+U58fj4FcQJBAPk4PPCy54ZHMqSTl4E1z+QzZ51z07PFIbGsT/oAg9GOwFjrPjOTQDEPp3cBeAlKmWdUVAjdGYExwuCw4EkG/XkCQQDS2Cx09pwNwMWIN+u3CVneECXS3iUiRPGJkbliFczwjByk3DnBMW15wGNVtJfsM7YFOIir+hW+QfbCKSBjxTY/AkEArPam9LZ1kO/g6e+0+mwKeGpkwxYcG2v5UoIwj2XEFrBoNk4twUW1C1e99g4C7Q/lH52bJPuuM8gBZEfdoVFEoQJBALZ4CPlsVx973jeGFcPBHvoURXeZcs+WlOY2rBYbwdHHoB54zK7KZPECM7V/Zh8vnW4lP/p9owWVtsTPrM1LZicCQDhgvSmpBy0QoUI+wPS9l+YYuLc2loGoWU97RiFbgKqXBexnSg4UHfU8Ot6N4VbIWEhOZV27P0ktsI3UfjGNS6s="
|
||||
|
||||
// 鐢熸垚闅忔満涓?
|
||||
function generateRandomString(length) {
|
||||
var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // 鍖呭惈鎵€鏈夊瓧姣嶅拰鏁板瓧鐨勫瓧绗﹂泦鍚?
|
||||
var result = '';
|
||||
|
||||
for (var i = 0; i < length; i++) {
|
||||
var randomIndex = Math.floor(Math.random() * chars.length); // 鑾峰彇闅忔満绱㈠紩鍊?
|
||||
var charAtIndex = chars[randomIndex]; // 鏍规嵁绱㈠紩鍊间粠瀛楃闆嗗悎涓€夋嫨瀵瑰簲鐨勫瓧绗?
|
||||
|
||||
result += charAtIndex; // 灏嗗瓧绗︽坊鍔犲埌鏈€缁堢粨鏋滀腑
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
// 鍙傛暟瀛楀吀琛ㄦ帓搴?
|
||||
function sortedKeys(obj) {
|
||||
let keys = Object.keys(obj).sort();
|
||||
let res = {}
|
||||
keys.forEach(key => {
|
||||
res[key] = obj[key]
|
||||
})
|
||||
return res
|
||||
}
|
||||
function generateRsaKeyWithPKCS8() {
|
||||
const keyPair = JsRsaSign.KEYUTIL.generateKeypair("RSA", 1024);
|
||||
const privateKey = JsRsaSign.KEYUTIL.getPEM(keyPair.prvKeyObj, "PKCS8PRV");
|
||||
const publicKey = JsRsaSign.KEYUTIL.getPEM(keyPair.pubKeyObj);
|
||||
return { privateKey, publicKey };
|
||||
}
|
||||
const { privateKey, publicKey } = generateRsaKeyWithPKCS8()
|
||||
|
||||
function objToStr(data) {
|
||||
let str = ""
|
||||
for (let i in data) {
|
||||
str += `${i}=${data[i]}&`
|
||||
}
|
||||
str = str.slice(0, str.length - 1)
|
||||
return str
|
||||
}
|
||||
// 鐢熸垚绛惧悕
|
||||
function getSign(data) {
|
||||
const signature = new JsRsaSign.KJUR.crypto.Signature({
|
||||
alg: "SHA1withRSA",
|
||||
});
|
||||
signature.init("-----BEGIN PRIVATE KEY-----" + PRIVATE_KEY + "-----END PRIVATE KEY-----");
|
||||
let sortData = sortedKeys(data)
|
||||
let str = objToStr(sortData)
|
||||
signature.updateString(str);
|
||||
return JsRsaSign.hextob64(signature.sign());
|
||||
}
|
||||
function getKey() {
|
||||
const encryptor = new JSEncrypt()
|
||||
encryptor.setPublicKey("-----BEGIN PUBLIC KEY-----" + JAVA_PUBLIC_KEY + "-----END PUBLIC KEY-----") // 璁剧疆鍏挜
|
||||
return encryptor
|
||||
}
|
||||
|
||||
// 鐢熸垚鍔犲瘑
|
||||
function entryData(data) {
|
||||
let encryptor = getKey();
|
||||
let str = objToStr(data)
|
||||
return encryptor.encryptLong(str); // 璋冪敤灏佽鐨勬柟娉?
|
||||
}
|
||||
|
||||
// 瑙e瘑
|
||||
function decrypt(data) {
|
||||
const encryptor = new JSEncrypt()
|
||||
encryptor.setPrivateKey(PRIVATE_KEY)
|
||||
return encryptor.decryptLong(data)
|
||||
}
|
||||
let sign = getSign(body)
|
||||
let timestamp = new Date().getTime()
|
||||
return entryData({
|
||||
sign: sign,
|
||||
timestamp: timestamp
|
||||
})
|
||||
//from by https://www.heyejk.com/game
|
||||
|
||||
/*const t = body
|
||||
const { KJUR, hextob64 } = require("jsrsasign")
|
||||
global['window'] = {}
|
||||
global['navigator'] = {}
|
||||
const { JSEncrypt } = require("encryptlong")
|
||||
const te = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKIGSy/bFo4l1JZuVpNCX3ccjf3eBgeooWzz0QgUFZhKZhJX7PxdfMw79fKjwR5ZGkCNPlO4F/TA3jrtoHHeewN8l3t7f63EFLud/5Ls3KOfHHYnkAo9bHWBWav84XdparGD4M8IHtq9qSGP6nRCOgnt4yqAmX8dJfYp9vr87cn3AgMBAAECgYEAlwzbB5Bu5LKsEFppZ/wW2ArM7YIRiQ5TACoGFEv1HfcuVaeXDmdxs02rKzwzDEHxUYDcPFyCKPGtvK5QSBgsAUUBHb6uu0fNGUccGX31NRAfLuQ8fj3W0uvkoYlpDARuokDHhWNqWzI6f8bFHkewJwpjXCO8w1WkogTLiX9Gu3ECQQDd5J4jEDS5+7KaohYRoryyX939mzsZ4RC6ufsfzTJwSlnLyYHEbm0Cs+7gbBxRrioqApBMQPIIoa5ujm1C88MNAkEAuu3htlbpR1ZL9b3wUuf3el/D3i/k9XvSChfHQ1q46Y/eck2yEDH9Kv/ZUxEl4fR8mB2MONm9oc2l+chPd9uQEwJBALcWuNU9vgPoB0tIiuUqXoDgUY+80ltcNi2c3/Uxn3jAIK/iKU0nwJMGXQiYrBVJnEjlrKL+w7cTkZZvtwATmtECQC2JV4vQvkFHj3eMzqeTpKDmBVPx/OekQzV8N2l8B0G2b20O6kqxssevzeRDcCQMJ/HyeL88o8pvy3f+yQUcsosCQQDZXV8K7Ek0R/V3dAdUzoetFSlfjCGy9QKPruz7m+iXBASxiA0R7YGfJzc8jWpuv0pxujtB/awy22K/ggLAhkZU",
|
||||
ne = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNQpS4ZeHRiIPFIdZgupShTHFlGOqFkT6XEqByvWqt2BvLo3a+YfzyJHOXyfX41OvbIkuIaycuxU9w7RHI1e7F3O7Io+XxncjyU3GR+ae2DEtLaG3o/rtpONF5q1jTN/Spu4GKXsjhHrP9xxMThLF6134NKAyQZfvOms0gS0zmxwIDAQAB";
|
||||
let n = le(t)
|
||||
let o = (new Date).getTime()
|
||||
return he({ sign: n, timestamp: o })
|
||||
function ae(e) { let t = Object.keys(e).sort(), n = {}; return t.forEach(t => { n[t] = e[t] }), n }
|
||||
function de() { const e = new JSEncrypt(); return e.setPublicKey("-----BEGIN PUBLIC KEY-----" + ne + "-----END PUBLIC KEY-----"), e }
|
||||
function ce(e) { let t = ""; for (let n in e) t += `${n}=${e[n]}&`; return t = t.slice(0, t.length - 1), t }
|
||||
function he(e) { let t = de(), n = ce(e); return t.encryptLong(n) }
|
||||
function le(e) { const t = new KJUR.crypto.Signature({ alg: "SHA1withRSA" }); t.init("-----BEGIN PRIVATE KEY-----" + te + "-----END PRIVATE KEY-----"); let n = ae(e), o = ce(n); return t.updateString(o), hextob64(t.sign()) }*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice().catch(e => $.log(`[Notice失败] ${e.message}`))
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(async () => {
|
||||
try {
|
||||
await $.done();
|
||||
} catch (e) {
|
||||
console.log(e.message || e);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
155
脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py
Normal file
155
脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py
Normal file
@@ -0,0 +1,155 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 蓝式宠物.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 57deb499db66cd7527a32970d8d8967f5eb20047bf7e5cf43e4f8b2a1d1c5013
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
#入口:蓝氏宠物微信小程序
|
||||
#抓包api.vshop.hchiv.cn域名下的authorization值(去掉开头的Bearer)放到环境变量LSCW
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
|
||||
# 定义获取公告的函数
|
||||
def get_proclamation():
|
||||
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||
|
||||
try:
|
||||
response = requests.get(primary_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("📢 公告信息")
|
||||
print("=" * 45)
|
||||
print(response.text)
|
||||
print("=" * 45 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
return
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"获取公告时发生错误: {e}, 尝试备用链接...")
|
||||
|
||||
try:
|
||||
response = requests.get(backup_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
print("\n" + "=" * 14)
|
||||
print("📢 公告信息")
|
||||
print("=" * 45)
|
||||
print(response.text)
|
||||
print("=" * 45 + "\n")
|
||||
print("公告获取成功,开始执行任务...\n")
|
||||
else:
|
||||
print(f"⚠️ 获取公告失败,状态码: {response.status_code}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。")
|
||||
|
||||
# 从环境变量获取 authorization 值,多账号用 & 分割
|
||||
def main():
|
||||
authorization_values = os.getenv('LSCW')
|
||||
if authorization_values is None:
|
||||
print("❌ 未设置账号信息,请添加LSCW环境变量")
|
||||
return
|
||||
|
||||
authorization_list = authorization_values.split('&')
|
||||
|
||||
# 设置请求的 URL 和参数
|
||||
url = "https://api.vshop.hchiv.cn/jfmb/api/play-default/sign/add-sign-new.do"
|
||||
params = {
|
||||
"sideType": "3",
|
||||
"appId": "wxb7a9c0dd9a2fcc53",
|
||||
"shopNick": "wxb7a9c0dd9a2fcc53",
|
||||
"guideNo": "",
|
||||
"securePlatId": "8d8dd596f26a3c933c9f587fe7188228e9fa6b1d10508bad562285ebfb7ee442"
|
||||
}
|
||||
|
||||
# 设置请求头模板
|
||||
headers_template = {
|
||||
"Host": "api.vshop.hchiv.cn",
|
||||
"content-type": "application/json",
|
||||
"appenv": "test",
|
||||
"charset": "utf-8",
|
||||
"accept-encoding": "gzip, deflate, br"
|
||||
}
|
||||
|
||||
# 设置请求体模板
|
||||
payload_template = {
|
||||
"appId": "wxb7a9c0dd9a2fcc53",
|
||||
"openId": True,
|
||||
"shopNick": "",
|
||||
"interfaceSource": 0,
|
||||
"activityId": "158245"
|
||||
}
|
||||
|
||||
# 初始化一个计数器,用于给账号编号
|
||||
account_counter = 1
|
||||
|
||||
# 获取当前时间戳(毫秒级别)
|
||||
current_timestamp = int(time.time() * 1000)
|
||||
|
||||
# 打印开始分隔线
|
||||
print('=' * 45)
|
||||
print(f"开始签到任务,共 {len(authorization_list)} 个账号")
|
||||
print('=' * 45)
|
||||
|
||||
# 遍历每个账号的 authorization 值
|
||||
for auth_value in authorization_list:
|
||||
print(f"\n🚀 正在处理账号{account_counter}...")
|
||||
print('=' * 45)
|
||||
|
||||
# 构造请求头
|
||||
headers = headers_template.copy()
|
||||
headers["authorization"] = f"Bearer {auth_value}"
|
||||
|
||||
# 构造请求体,包含动态生成的时间戳
|
||||
payload = payload_template.copy()
|
||||
payload["timestamp"] = current_timestamp # 将当前时间戳添加到请求体
|
||||
|
||||
# 发送 POST 请求
|
||||
try:
|
||||
response = requests.post(url, params=params, headers=headers, data=json.dumps(payload))
|
||||
|
||||
# 检查响应状态码
|
||||
if response.status_code == 200:
|
||||
# 解析返回的 JSON 数据
|
||||
response_data = response.json()
|
||||
|
||||
# 根据返回的 JSON 数据判断签到结果
|
||||
if response_data.get('success') is True:
|
||||
if response_data.get('data', {}).get('result') == 'success':
|
||||
# 签到成功,获取能量值
|
||||
integral = response_data.get('data', {}).get('integral', 0)
|
||||
integral_alias = response_data.get('data', {}).get('integralAlias', '')
|
||||
print(f"🎉 账号{account_counter}签到成功!获得{integral}{integral_alias}")
|
||||
elif response_data.get('data', {}).get('result') == 'error' and response_data.get('data', {}).get('message') == '已签到':
|
||||
# 已经签到过
|
||||
print(f"🎯 账号{account_counter}今日已签到")
|
||||
else:
|
||||
# 其他成功但需要关注的情况
|
||||
print(f"⚠️ 账号{account_counter}签到状态不明,请检查返回数据:{response.text}")
|
||||
else:
|
||||
# 服务器返回成功为 false
|
||||
error_message = response_data.get('errorMessage', '未知错误')
|
||||
print(f"❌ 账号{account_counter}签到失败,错误信息:{error_message}")
|
||||
|
||||
else:
|
||||
# 服务器返回非 200 状态码
|
||||
print(f"❌ 账号{account_counter}签到失败,状态码:{response.status_code}")
|
||||
print(f"服务器响应内容:{response.text}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
# 捕获请求异常
|
||||
print(f"❌ 账号{account_counter}签到失败,错误信息:{e}")
|
||||
|
||||
# 增加计数器
|
||||
account_counter += 1
|
||||
|
||||
# 打印结束分隔线
|
||||
print('\n' + '=' * 45)
|
||||
print("签到任务完成")
|
||||
print('=' * 45)
|
||||
|
||||
# 执行公告获取函数,再执行签到任务
|
||||
get_proclamation()
|
||||
main()
|
||||
314
脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js
Normal file
314
脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js
Normal file
@@ -0,0 +1,314 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mxbc.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mxbc.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/mxbc.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 68b9441aeb9c8765dc6ca01576fe2a09c0f6d010563dd65d9061e29e9fcffc93
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: 蜜雪冰城APP/小程序
|
||||
cron: 30 8 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
抓https://mxsa.mxbc.net 请求头Access-Token 多账号&或换行
|
||||
变量名:mxbc
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("蜜雪冰城");
|
||||
let ckName = `mxbc`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.ck = this.user[0];
|
||||
this.activityOrigin = ""
|
||||
this.activityUrl = ""
|
||||
}
|
||||
|
||||
async run() {
|
||||
|
||||
await this.user_info()
|
||||
await this.getLoginUrl()
|
||||
if (this.activityOrigin) {
|
||||
await this.getActivityToken()
|
||||
await this.activityIndex()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async user_info() {
|
||||
let time = Date.now()
|
||||
try {
|
||||
let options = {
|
||||
url: `https://mxsa.mxbc.net/api/v1/customer/info?appId=d82be6bbc1da11eb9dd000163e122ecb&t=${time}&sign=${this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + time)}`,
|
||||
headers: {
|
||||
'Host': 'mxsa.mxbc.net',
|
||||
'Connection': 'keep-alive',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF',
|
||||
'xweb_xhr': 1,
|
||||
'Access-Token': this.ck,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': '*/*',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html',
|
||||
'Accept-Language': 'en-us,en',
|
||||
'Accept-Encoding': 'gzip, deflate',
|
||||
|
||||
}
|
||||
}
|
||||
let { data: result } = await axios.request(options);
|
||||
if (result.code == 0) {
|
||||
$.log(`账号[${this.index}] 用户CK有效: [${result.data.mobilePhone}] 雪王币剩余[${result.data.customerPoint}]`);
|
||||
this.ckStatus = true
|
||||
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 用户CK失效:,原因未知!`);
|
||||
this.ckStatus = false
|
||||
|
||||
console.log(result);
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
async getLoginUrl() {
|
||||
try {
|
||||
let timestamp = Date.now();
|
||||
const options = {
|
||||
method: 'GET',
|
||||
url: `https://mxsa.mxbc.net/api/v1/duiba/getLoginUrl`,
|
||||
params: {
|
||||
"appId": "d82be6bbc1da11eb9dd000163e122ecb",
|
||||
"t": timestamp,
|
||||
"sign": this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + timestamp)
|
||||
},
|
||||
headers: {
|
||||
'Host': 'mxsa.mxbc.net',
|
||||
'Connection': 'keep-alive',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF',
|
||||
'xweb_xhr': 1,
|
||||
'Access-Token': '' + this.ck,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': '*/*',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html',
|
||||
'Accept-Language': 'en-us,en',
|
||||
'Accept-Encoding': 'gzip, deflate',
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
let { data: res } = await axios.request(options);
|
||||
if (res?.code == 0) {
|
||||
this.activityOrigin = new URL(res?.data.loginUrl).origin;
|
||||
this.activityUrl = res?.data.loginUrl;
|
||||
return res?.data.loginUrl;
|
||||
} else {
|
||||
$.log(`获取跳转Url失败!原因未知!${res.msg}`);
|
||||
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
$.log(`❌获取跳转Url失败!原因为${e}`);
|
||||
}
|
||||
}
|
||||
ObjectKeys2LowerCase(e) { return e = Object.fromEntries(Object.entries(e).map((([e, t]) => [e.toLowerCase(), t]))), new Proxy(e, { get: function (e, t, r) { return Reflect.get(e, t.toLowerCase(), r) }, set: function (e, t, r, n) { return Reflect.set(e, t.toLowerCase(), r, n) } }) }
|
||||
|
||||
|
||||
//获取活动token
|
||||
async getActivityToken() {
|
||||
try {
|
||||
const opts = {
|
||||
method: "GET",
|
||||
url: this.activityUrl,
|
||||
maxRedirects: 0,
|
||||
// 关键点 2: 默认 Axios 认为非 2xx 是错误,需定义 302 为合法状态
|
||||
validateStatus: function (status) {
|
||||
return status >= 200 && status < 400; // 允许 302 (或 3xx) 进入 .then
|
||||
},
|
||||
headers: {}
|
||||
}
|
||||
let res = await axios.request(opts);
|
||||
|
||||
let headers = this.ObjectKeys2LowerCase(res?.headers);
|
||||
//对青龙进行兼容
|
||||
let session = Array.isArray(headers['set-cookie']) ? [...new Set(headers['set-cookie'])].join("") : headers['set-cookie'];
|
||||
|
||||
let [wdata4, w_ts, _ac, wdata3, dcustom] = session.match(/(wdata4|w_ts|_ac|wdata3|dcustom)=.+?;/g)
|
||||
this.session = wdata4 + w_ts + _ac + wdata3 + dcustom;
|
||||
$.log(`✅ 获取活动token成功!`)
|
||||
|
||||
|
||||
} catch (e) {
|
||||
|
||||
$.log(`⛔️ 获取活动token失败!${e}`);
|
||||
}
|
||||
}
|
||||
async activityIndex() {
|
||||
try {
|
||||
const opts = {
|
||||
url: this.activityOrigin + "/chome/index",
|
||||
params: {
|
||||
from: "login",
|
||||
spm: "76177.1.1.1"
|
||||
},
|
||||
headers: {
|
||||
'Cookie': this.session,
|
||||
|
||||
'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)mxsa_mxbc`,
|
||||
}
|
||||
}
|
||||
|
||||
await axios.request(opts);
|
||||
$.log(`✅ 访问雪王铺:调用成功!`);
|
||||
} catch (e) {
|
||||
|
||||
$.log(`⛔️ 访问雪王铺:调用失败!${e}`);
|
||||
}
|
||||
}
|
||||
async task_signin() {
|
||||
try {
|
||||
let time = Date.now()
|
||||
let options = {
|
||||
url: `https://mxsa.mxbc.net/api/v1/customer/signin?appId=d82be6bbc1da11eb9dd000163e122ecb&t=${time}&sign=${this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + time)}`,
|
||||
headers: {
|
||||
'Host': 'mxsa.mxbc.net',
|
||||
'Connection': 'keep-alive',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF',
|
||||
'xweb_xhr': 1,
|
||||
'Access-Token': this.ck,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': '*/*',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html',
|
||||
'Accept-Language': 'en-us,en',
|
||||
'Accept-Encoding': 'gzip, deflate',
|
||||
|
||||
}
|
||||
}
|
||||
//console.log(options);
|
||||
let { data: result } = await axios.request(options);
|
||||
//console.log(result);
|
||||
if (result.code == 0) {
|
||||
$.log(`账号[${this.index}] 签到成功:累计签到 [${result.data.ruleValueGrowth}]天 本次获得[${result.data.ruleValuePoint}]币`);
|
||||
this.ckStatus = true
|
||||
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 签到:失败 ❌ 了呢,原因未知!`);
|
||||
console.log(result);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
getSHA256withRSA(content) {
|
||||
var rs = require("jsrsasign");
|
||||
|
||||
var privateKeyString = `-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtypUdHZJKlQ9L
|
||||
L6lIJSphnhqjke7HclgWuWDRWvzov30du235cCm13mqJ3zziqLCwstdQkuXo9sOP
|
||||
Ih94t6nzBHTuqYA1whrUnQrKfv9X4/h3QVkzwT+xWflE+KubJZoe+daLKkDeZjVW
|
||||
nUku8ov0E5vwADACfntEhAwiSZUALX9UgNDTPbj5ESeII+VztZ/KOFsRHMTfDb1G
|
||||
IR/dAc1mL5uYbh0h2Fa/fxRPgf7eJOeWGiygesl3CWj0Ue13qwX9PcG7klJXfToI
|
||||
576MY+A7027a0aZ49QhKnysMGhTdtFCksYG0lwPz3bIR16NvlxNLKanc2h+ILTFQ
|
||||
bMW/Y3DRAgMBAAECggEBAJGTfX6rE6zX2bzASsu9HhgxKN1VU6/L70/xrtEPp4SL
|
||||
SpHKO9/S/Y1zpsigr86pQYBx/nxm4KFZewx9p+El7/06AX0djOD7HCB2/+AJq3iC
|
||||
5NF4cvEwclrsJCqLJqxKPiSuYPGnzji9YvaPwArMb0Ff36KVdaHRMw58kfFys5Y2
|
||||
HvDqh4x+sgMUS7kSEQT4YDzCDPlAoEFgF9rlXnh0UVS6pZtvq3cR7pR4A9hvDgX9
|
||||
wU6zn1dGdy4MEXIpckuZkhwbqDLmfoHHeJc5RIjRP7WIRh2CodjetgPFE+SV7Sdj
|
||||
ECmvYJbet4YLg+Qil0OKR9s9S1BbObgcbC9WxUcrTgECgYEA/Yj8BDfxcsPK5ebE
|
||||
9N2teBFUJuDcHEuM1xp4/tFisoFH90JZJMkVbO19rddAMmdYLTGivWTyPVsM1+9s
|
||||
tq/NwsFJWHRUiMK7dttGiXuZry+xvq/SAZoitgI8tXdDXMw7368vatr0g6m7ucBK
|
||||
jZWxSHjK9/KVquVr7BoXFm+YxaECgYEAr3sgVNbr5ovx17YriTqe1FLTLMD5gPrz
|
||||
ugJj7nypDYY59hLlkrA/TtWbfzE+vfrN3oRIz5OMi9iFk3KXFVJMjGg+M5eO9Y8m
|
||||
14e791/q1jUuuUH4mc6HttNRNh7TdLg/OGKivE+56LEyFPir45zw/dqwQM3jiwIz
|
||||
yPz/+bzmfTECgYATxrOhwJtc0FjrReznDMOTMgbWYYPJ0TrTLIVzmvGP6vWqG8rI
|
||||
S8cYEA5VmQyw4c7G97AyBcW/c3K1BT/9oAj0wA7wj2JoqIfm5YPDBZkfSSEcNqqy
|
||||
5Ur/13zUytC+VE/3SrrwItQf0QWLn6wxDxQdCw8J+CokgnDAoehbH6lTAQKBgQCE
|
||||
67T/zpR9279i8CBmIDszBVHkcoALzQtU+H6NpWvATM4WsRWoWUx7AJ56Z+joqtPK
|
||||
G1WztkYdn/L+TyxWADLvn/6Nwd2N79MyKyScKtGNVFeCCJCwoJp4R/UaE5uErBNn
|
||||
OH+gOJvPwHj5HavGC5kYENC1Jb+YCiEDu3CB0S6d4QKBgQDGYGEFMZYWqO6+LrfQ
|
||||
ZNDBLCI2G4+UFP+8ZEuBKy5NkDVqXQhHRbqr9S/OkFu+kEjHLuYSpQsclh6XSDks
|
||||
5x/hQJNQszLPJoxvGECvz5TN2lJhuyCupS50aGKGqTxKYtiPHpWa8jZyjmanMKnE
|
||||
dOGyw/X4SFyodv8AEloqd81yGg==
|
||||
-----END PRIVATE KEY-----
|
||||
`;
|
||||
|
||||
const key = rs.KEYUTIL.getKey(privateKeyString);
|
||||
|
||||
const signature = new rs.KJUR.crypto.Signature({ alg: "SHA256withRSA" });
|
||||
|
||||
signature.init(key);
|
||||
|
||||
signature.updateString(content);
|
||||
|
||||
const originSign = signature.sign();
|
||||
const sign64u = rs.hextob64u(originSign);
|
||||
|
||||
return sign64u;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
641
脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js
Normal file
641
脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js
Normal file
File diff suppressed because one or more lines are too long
209
脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js
Normal file
209
脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js
Normal file
@@ -0,0 +1,209 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/tslj.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/tslj.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/tslj.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: 28f4e466af4337269545853bd1d2829e7d314fa4157c0cad82b91a4650303ee7
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
谢瑞麟 微信小程序 签到得积分
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:tslj
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("谢瑞麟小程序签到");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `tslj`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'http://192.168.31.196:12081',
|
||||
appid: 'wx439d0e0cc6742818',
|
||||
auth: process.env.wx_auth || "your-api-key",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.openid = null
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
this.token = 'Bearer ' + this.token
|
||||
|
||||
await this.getUserInfo()
|
||||
if (!this.isSign) await this.doSign()
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tslmember-crm.tslj.com.cn/api/auth/login`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"content-type": "application/json",
|
||||
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249"
|
||||
}
|
||||
,
|
||||
data:
|
||||
{ "code": code }
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
|
||||
if (result?.code == '0') {
|
||||
this.token = result.data.user_info.token
|
||||
this.openid = result.data.user_info.openid
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
async getUserInfo() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tslmember-crm.tslj.com.cn/api/user/index`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027'
|
||||
},
|
||||
data: { "openid": this.openid }
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '0') {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `[${result.data.mobile}] 积分[${result.data.integral}]🎉`);
|
||||
for (let task of result.data.task_list) {
|
||||
if (task.name == '每日签到') {
|
||||
this.isSign = task.status
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
async doSign() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://tslmember-crm.tslj.com.cn/api/userSignIn/signIn`,
|
||||
headers: {
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"authorization": "" + this.token + "",
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
"priority": "u=1, i",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site"
|
||||
},
|
||||
data: { "openid": `${this.openid}` }
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
if (result?.code == '0') {
|
||||
//打印签到结果
|
||||
const { integral, total_days } = result?.data;
|
||||
$.log(`签到成功, 已连续签到 ${total_days} 天, 获得 ${integral} 积分 🎉`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
261
脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js
Normal file
261
脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js
Normal file
@@ -0,0 +1,261 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/guyu.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/guyu.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: wxapp/guyu.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: ef65b2694b08ab8584d6744f422ffa0748a46025b6316df40aeab472a62e139c
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description:
|
||||
cron: 30 9 * * 1
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
谷雨 微信小程序 签到得积分
|
||||
WeChatCodeServer 填写wx_server_url wx_auth 用于获取code
|
||||
变量名称:guyu 名字 授权中心 里面的openid 多个账号用&分割
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const {
|
||||
Env
|
||||
} = require("../tools/env")
|
||||
const $ = new Env("谷雨小程序");
|
||||
const WeChatServer = require("./wcs.js");
|
||||
let ckName = `guyu`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
let wechat = new WeChatServer({
|
||||
url: process.env.wx_server_url || 'https://xxx',
|
||||
appid: 'wxda948f3be0afc375',
|
||||
auth: process.env.wx_auth || "",
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = null
|
||||
this.wcsid = this.user[0]
|
||||
this.isSign = false
|
||||
}
|
||||
|
||||
async run() {
|
||||
//随机延迟5-30s 模拟人工操作
|
||||
await $.wait(Math.floor(Math.random() * 20 + 5) * 1000);
|
||||
let { data: codeRes } = await wechat.getCode(this.wcsid)
|
||||
if (codeRes.status) {
|
||||
await this.getUserToken(codeRes.data.code)
|
||||
}
|
||||
if (!this.token) {
|
||||
$.log(`账号[${this.index}] 获取用户Token失败❌`)
|
||||
return
|
||||
}
|
||||
await this.signIn()
|
||||
await this.getUserPoints()
|
||||
}
|
||||
async getUserToken(code) {
|
||||
let data = JSON.stringify({
|
||||
"code": "" + code,
|
||||
"appid": "wxda948f3be0afc375",
|
||||
"shopId": null,
|
||||
"envVersion": "release",
|
||||
"isEnterpriseWx": false,
|
||||
"scene": 1168,
|
||||
"referrerInfo": {
|
||||
"appId": "wxda948f3be0afc375"
|
||||
}
|
||||
});
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: 'https://mall-mobile-v6.vecrp.com/mobile/wxAppLogin',
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'xweb_xhr': '1',
|
||||
'appid': 'wxda948f3be0afc375',
|
||||
'token': '',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://servicewechat.com/wxda948f3be0afc375/65/page-frame.html',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9'
|
||||
},
|
||||
data: data
|
||||
};
|
||||
|
||||
let {
|
||||
data: result
|
||||
} = await axios.request(options);
|
||||
console.log(result);
|
||||
|
||||
if (result?.success) {
|
||||
this.token = result.result.mobileToken
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`)
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.message}❌`)
|
||||
}
|
||||
}
|
||||
sha1(str) {
|
||||
return require("crypto").createHash("sha1").update(str).digest("hex");
|
||||
}
|
||||
request(options) {
|
||||
|
||||
var sign,
|
||||
n = void 0
|
||||
, d = {},
|
||||
l = "R6WbJ830wNsEdjH9GumwKYiYxHz0K9QD",
|
||||
n = (new Date).getTime(),
|
||||
d = "post" === options.method || "POST" === options.method ? {
|
||||
body: JSON.stringify(options.data),
|
||||
secretKey: l,
|
||||
ts: n
|
||||
} : Object.assign({}, options.params, {
|
||||
secretKey: l,
|
||||
ts: n
|
||||
}),
|
||||
sign = this.sha1(function (e) {
|
||||
var t, a = [];
|
||||
for (t in e) {
|
||||
var r = t + e[t];
|
||||
a.push(r)
|
||||
}
|
||||
a.sort();
|
||||
var u = "";
|
||||
return a.map((function (e) {
|
||||
"" === u ? u = e : u += e
|
||||
}
|
||||
)),
|
||||
u
|
||||
}(d))
|
||||
let baseHeaders = {
|
||||
host: "mall-mobile-v6.vecrp.com",
|
||||
"accept": "*/*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"appid": "wxda948f3be0afc375",
|
||||
"content-type": "application/json;charset=UTF-8",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "cross-site",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027",
|
||||
"sign": "" + sign,
|
||||
"starttime": "" + n,
|
||||
"token": "" + this.token,
|
||||
"ts": "" + n,
|
||||
"x-tracedid": "" + $.uuid(),
|
||||
"xweb_xhr": "1",
|
||||
"Referer": "https://servicewechat.com/wxda948f3be0afc375/65/page-frame.html",
|
||||
}
|
||||
options.headers = Object.assign(options.headers, baseHeaders)
|
||||
|
||||
return axios.request(options)
|
||||
}
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://mall-mobile-v6.vecrp.com/mobile/activity/sign/sign`,
|
||||
|
||||
headers: {},
|
||||
data: {
|
||||
activityId: 'cdd30467-abb8-4944-8941-2879aa950a86',
|
||||
shopId: '100186753',
|
||||
signDate: $.time(`yyyy-M-dd`),
|
||||
}
|
||||
|
||||
};
|
||||
let {
|
||||
data: result
|
||||
} = await this.request(options);
|
||||
if (result?.success) {
|
||||
//打印签到结果
|
||||
$.log(`🌸账号[${this.index}]` + `签到成功`);
|
||||
} else {
|
||||
$.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async getUserPoints() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://mall-mobile-v6.vecrp.com/mobile/customer/getMyAllPoint`,
|
||||
params: {
|
||||
shopId: '100186753'
|
||||
},
|
||||
headers: {},
|
||||
|
||||
}
|
||||
let {
|
||||
data: result
|
||||
} = await this.request(options);
|
||||
if (result?.success) {
|
||||
$.log(`账号[${this.index}]` + `积分:${result.result[0].score}`);
|
||||
} else {
|
||||
$.log(`账号[${this.index}] 获取积分-失败:${result.msg}❌`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
if (process.env['wx_server_url'] && process.env['wx_auth']) {
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
} else {
|
||||
|
||||
$.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`)
|
||||
return
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout: 3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) { }
|
||||
|
||||
}
|
||||
1486
脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js
Normal file
1486
脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js
Normal file
File diff suppressed because it is too large
Load Diff
84
脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py
Normal file
84
脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 达美乐.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: ac7dcacb101c1cc677a6b9c418de1ed3a63c43349c93191d0519d6375d79b3de
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
'''
|
||||
达美乐,开一把游戏抓取openid的值。
|
||||
一定要在我的奖品那绑定好手机号!
|
||||
变量名1:dmlck,多账号用@隔开。备注信息用#隔开 如openid的值#大帅比
|
||||
变量名2:pzid 填活动id这次是volcano(活动ID自己抓)
|
||||
|
||||
|
||||
TL库:https://github.com/3288588344/toulu.git
|
||||
tg频道:https://t.me/TLtoulu
|
||||
QQ频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
|
||||
'''
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
import json
|
||||
import notify
|
||||
message = ''
|
||||
# from dotenv import load_dotenv
|
||||
# load_dotenv()
|
||||
accounts = os.getenv('dmlck')
|
||||
pzid = os.getenv('pzid')
|
||||
if accounts is None:
|
||||
print('你没有填入ck,咋运行?')
|
||||
else:
|
||||
accounts_list = os.environ.get('dmlck').split('@')
|
||||
|
||||
num_of_accounts = len(accounts_list)
|
||||
|
||||
print(f"获取到 {num_of_accounts} 个账号")
|
||||
|
||||
for i, account in enumerate(accounts_list, start=1):
|
||||
|
||||
values = account.split('#')
|
||||
Cookie = values[0]
|
||||
account_no = values[1] if len(values) > 1 else ""
|
||||
print(f"\n=======开始执行账号{i} {account_no}=======")
|
||||
url = f"https://game.dominos.com.cn/{pzid}/game/gameDone"
|
||||
payload = f"openid={Cookie}&score=t5%2Bhzvt2h6jpwH7D%2BJkNWvT%2Fb6J2mWDStIgcC4ZSrhkqPEqXtcDrCC9LVFvQLRtGkeVQ7z0W6RYqcXxmeXi9596r4HZ1Pt0E5PpRLYWZZL%2BXQXEpyc0WX8c4ewMqQymjBgGMcSRFp3aaLTDNaRLvLcnnh2t5PpL70pW%2B7LcM8tnhtP1J2rLaTe0Dno7%2B9Qf32LuHUS%2BUXCgQ6YbCJwj%2BWrmhP1zbFvGthkH6HB9lkI9mS%2F%2BY9582WQeFREMF9OflJpRVjgPd1%2FPWFRWKWrl%2F7VGztrHpQLZvLQ9HRINK99cN4FBBvPVkkHxyACadINkuFwxgC9ODPYInHXXpn5iElg%3D%3D"
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2 like Mac OS X; sd-PK) AppleWebKit/535.42.7 (KHTML, like Gecko) Version/4.0.5 Mobile/8B111 Safari/6535.42.7",
|
||||
'Accept-Encoding': "gzip,compress,br,deflate",
|
||||
'Content-Type': "application/x-www-form-urlencoded",
|
||||
'charset': "utf-8",
|
||||
'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/63/page-frame.html"
|
||||
}
|
||||
|
||||
while True:
|
||||
shrurl = f"https://game.dominos.com.cn/{pzid}/game/sharingDone"
|
||||
payload2 = f"openid={Cookie}&from=1&target=0"
|
||||
res = requests.post(shrurl, data=payload2, headers=headers).json()
|
||||
if res['errorMessage'] == "今日分享已用完,请明日再来":
|
||||
print(f'账号{i}分享已达上限,开始抽奖')
|
||||
break
|
||||
message +=f"账号{i}"
|
||||
while True:
|
||||
response = requests.post(url, data=payload, headers=headers)
|
||||
response = response.json()
|
||||
if response["statusCode"] == 0:
|
||||
prize = response['content']['name']
|
||||
print(f"\n{prize}")
|
||||
message += f"\n {prize}"
|
||||
time.sleep(1)
|
||||
|
||||
if response["statusCode"] != 0:
|
||||
print(response)
|
||||
err = response['errorMessage']
|
||||
message += f'\n账号{i}\n {err}'
|
||||
break
|
||||
try:
|
||||
notify.send('达美乐',message)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print('推送失败')
|
||||
135
脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py
Normal file
135
脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py
Normal file
@@ -0,0 +1,135 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 达美乐短信认证.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: 435e1f0c67ba8509a91e02100035261e85faa63adfe9d41b27747e380e0a3b21
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
## 此脚本用于达美乐短信认证,只需要手动进一次游戏界面,不用玩!!!!
|
||||
## 替换每期GAME_TYPE参数,游戏类型
|
||||
|
||||
# TL库:https://github.com/3288588344/toulu.git
|
||||
# tg频道:https://t.me/TLtoulu
|
||||
# QQ频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
import requests
|
||||
|
||||
# 固定分数
|
||||
SCORE = "G+oAJ6PkCLjILdZ4ynoxaH4wQGqHQyXKKBe1tD/C6jj/Ew+gBmSGDj60ggw739hvaz0nzfQjha5jA+yBLiBE1smAjOR7xSLt6bR1cCNDiR6VgbfCYF6o19AvuHB64YTgwUQuJcSOP2zODgkjucSo33lwk1NJ82BFmA88v2sjJGLbMisjWWE0mOSeXz6VKNAhoVF8fwfjw79sxeEoUadqHkrpvUOuyswvzHsUJIlFwqD2eRQtffmR0PQNxFKoqttskJWpQTQ73uLYEjJfm9VCUxksVkqhtvzprqib9H4jFunQqQ25zdq09+0ZI6v7fLarKXEkV0/V+WmuEHzHxzHI+Q=="
|
||||
|
||||
# 每期游戏类型
|
||||
GAME_TYPE = "volcano"
|
||||
|
||||
# 统一请求头
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11177",
|
||||
'Content-Type': "application/x-www-form-urlencoded",
|
||||
'xweb_xhr': "1",
|
||||
'Sec-Fetch-Site': "cross-site",
|
||||
'Sec-Fetch-Mode': "cors",
|
||||
'Sec-Fetch-Dest': "empty",
|
||||
'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/66/page-frame.html",
|
||||
'Accept-Language': "zh-CN,zh;q=0.9"
|
||||
}
|
||||
|
||||
def post_request(endpoint, payload):
|
||||
url = f"https://game.dominos.com.cn/{GAME_TYPE}/{endpoint}"
|
||||
try:
|
||||
response = requests.post(url, data=payload, headers=headers)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.RequestException as e:
|
||||
print(f"请求出现异常: {e}")
|
||||
return None
|
||||
|
||||
def get_temp_id(openid, score):
|
||||
payload = {'openid': openid, 'score': score, 'tempId': 'null'}
|
||||
response_data = post_request('game/gameDone', payload)
|
||||
|
||||
if response_data:
|
||||
status_code = response_data.get("statusCode")
|
||||
if status_code == 10:
|
||||
tempId = response_data.get("extra", {}).get("tempId")
|
||||
if tempId:
|
||||
print(f"成功获取 tempId: {tempId}")
|
||||
return tempId
|
||||
else:
|
||||
print("获取 tempId 失败,tempId 为 null")
|
||||
else:
|
||||
error_message = response_data.get("errorMessage", "无错误信息")
|
||||
print(f"获取 tempId 失败,状态码: {status_code}, 信息: {error_message}")
|
||||
return None
|
||||
|
||||
def send_sms(openid, mobile):
|
||||
payload = {'openid': openid, 'mobile': mobile, 'type': 'null'}
|
||||
response_data = post_request('sendSMS', payload)
|
||||
|
||||
if response_data:
|
||||
status_code = response_data.get("statusCode")
|
||||
error_message = response_data.get("errorMessage", "无错误信息")
|
||||
|
||||
if status_code == 10:
|
||||
print(f"手机号码已绑定,错误信息: {error_message},跳过短信验证")
|
||||
return True # 手机号已绑定,返回 True 表示跳过短信验证
|
||||
elif status_code == 0:
|
||||
print("短信发送成功!")
|
||||
return False # 短信发送成功,返回 False 表示需要进行短信验证
|
||||
else:
|
||||
print(f"短信发送失败,状态码: {status_code}")
|
||||
print(f"错误信息: {error_message}")
|
||||
print(f"响应: {response_data}")
|
||||
return False
|
||||
|
||||
def verify_code(openid, mobile, verification_code):
|
||||
payload = {'openid': openid, 'mobile': mobile, 'code': verification_code}
|
||||
response_data = post_request('verification', payload)
|
||||
|
||||
if response_data:
|
||||
status_code = response_data.get("statusCode")
|
||||
error_message = response_data.get("errorMessage", "无错误信息")
|
||||
|
||||
if status_code == 0:
|
||||
print("验证码验证成功!")
|
||||
else:
|
||||
print(f"验证码验证失败,状态码: {status_code}")
|
||||
print(f"错误信息: {error_message}")
|
||||
print(f"响应: {response_data}")
|
||||
|
||||
def post_game_done(openid, score, tempId):
|
||||
payload = {'openid': openid, 'score': score, 'tempId': tempId}
|
||||
response_data = post_request('game/gameDone', payload)
|
||||
|
||||
if response_data:
|
||||
print(f"游戏认证完成: 响应: {response_data}")
|
||||
|
||||
def main():
|
||||
mobile = input("请输入手机号: ")
|
||||
openid = input("请输入openid: ")
|
||||
|
||||
tempId = get_temp_id(openid, SCORE)
|
||||
if tempId:
|
||||
# 如果成功获取到 tempId,执行 send_sms
|
||||
if send_sms(openid, mobile):
|
||||
# 如果手机号已绑定,直接执行后续任务
|
||||
print("手机号已绑定")
|
||||
post_game_done(openid, SCORE, tempId)
|
||||
else:
|
||||
# 如果短信发送成功,要求输入验证码进行验证
|
||||
verification_code = input("请输入验证码: ")
|
||||
verify_code(openid, mobile, verification_code)
|
||||
post_game_done(openid, SCORE, tempId)
|
||||
else:
|
||||
# 如果未获取到 tempId,直接获取短信验证码
|
||||
if send_sms(openid, mobile):
|
||||
# 如果手机号已绑定,直接执行后续任务
|
||||
print("手机号已绑定")
|
||||
post_game_done(openid, SCORE, 'null') # tempId 为 null,因为未获取到 tempId
|
||||
else:
|
||||
verification_code = input("请输入验证码: ")
|
||||
verify_code(openid, mobile, verification_code)
|
||||
post_game_done(openid, SCORE, 'null') # tempId 为 null,因为未获取到 tempId
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
263
脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js
Normal file
263
脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js
Normal file
@@ -0,0 +1,263 @@
|
||||
// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js
|
||||
// # Repo: jdqlscript/toulu
|
||||
// # Path: 逑美And薇诺娜专柜小程序.js
|
||||
// # UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
// # SHA256: 5e1421f703c649d97b345bae34bcb0dc104d9f509911575d3cd2a1aff7de206e
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: SMALLFAWN
|
||||
@Date: 2024.06.10 13:34
|
||||
@Description: 逑美小程序&薇诺娜专柜商城(薇诺娜旗下小程序)
|
||||
------------------------------------------
|
||||
变量名qiumei_weinuona
|
||||
变量值 逑美小程序https://api.qiumeiapp.com/common-activity 域名下POST请求体 Body中appUserToken的值
|
||||
薇诺娜专柜商城小程序https://api.qiumeiapp.com/zg-activity/ 域名下POST请求体 Body中appUserToken的值
|
||||
两个值用#连接 多账号&或换行或新建同名变量
|
||||
|
||||
[Script]
|
||||
http-response
|
||||
|
||||
[MITM]
|
||||
hostname =
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const $ = new Env("逑美/薇诺娜专柜小程序");
|
||||
let ckName = `qiumei_weinuona`;
|
||||
let userCookie = checkEnv(
|
||||
($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
|
||||
);
|
||||
const notify = $.isNode() ? require("./sendNotify") : "";
|
||||
|
||||
!(async () => {
|
||||
console.log(
|
||||
`==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
|
||||
new Date().getTime() +
|
||||
new Date().getTimezoneOffset() * 60 * 1000 +
|
||||
8 * 60 * 60 * 1000
|
||||
).toLocaleString()} \n==================================================`
|
||||
);
|
||||
//console.log(userCookie)
|
||||
if (!userCookie?.length) return console.log(`没有找到CK哦`);
|
||||
let index = 1;
|
||||
let strSplitor = "#";
|
||||
|
||||
for (let user of userCookie) {
|
||||
$.log(`\n🚀 user:【${index}】 start work\n`);
|
||||
index++
|
||||
$.token = user.split(strSplitor)[0]
|
||||
$.token1 = user.split(strSplitor)[1]
|
||||
$.ckStatus = false;
|
||||
$.batchCode = null
|
||||
await getWmcMemberInfo()
|
||||
|
||||
if ($.ckStatus) {
|
||||
await getSigninBatch()
|
||||
if ($.batchCode) {
|
||||
await getUserSigninInfo()
|
||||
|
||||
}
|
||||
}
|
||||
if($.token1){
|
||||
await userSignin1()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
await $.sendMsg($.logs.join("\n"));
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function userSignin() {
|
||||
|
||||
let config = {
|
||||
url: "https://api.qiumeiapp.com/common-activity/signin/userSignin",
|
||||
method: "POST",
|
||||
headers: {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html',
|
||||
'Referrer-Policy': 'unsafe-url'
|
||||
},
|
||||
data: JSON.stringify({
|
||||
appUserToken: $.token,
|
||||
batchCode: $.batchCode
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`签到成功[${result.data.prizeName}]`)
|
||||
} else {
|
||||
$.log(`签到失败[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
async function userSignin1() {
|
||||
|
||||
let config = {
|
||||
url: "https://api.qiumeiapp.com/zg-activity/zg-daily/zgSigninNew",
|
||||
method: "POST",
|
||||
headers: {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
'Referer': 'https://servicewechat.com/wx250394ab3f680bfa/554/page-frame.html',
|
||||
'Referrer-Policy': 'unsafe-url'
|
||||
},
|
||||
data: JSON.stringify({
|
||||
appUserToken: $.token1,
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`薇诺娜专柜/ 签到成功`)
|
||||
} else {
|
||||
$.log(`薇诺娜专柜/ 签到失败[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
async function getUserSigninInfo() {
|
||||
|
||||
let config = {
|
||||
url: "https://api.qiumeiapp.com/common-activity/signin/getUserSigninInfo",
|
||||
method: "POST",
|
||||
headers: {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html',
|
||||
'Referrer-Policy': 'unsafe-url'
|
||||
},
|
||||
data: JSON.stringify({
|
||||
appUserToken: $.token,
|
||||
batchCode: $.batchCode
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
if (result.data.runningDays !== 1) {
|
||||
$.log(`未签到 ===> 签到ing`)
|
||||
await userSignin()
|
||||
} else {
|
||||
$.log(`已签到 ===> 跳过签到`)
|
||||
}
|
||||
} else {
|
||||
$.log(`获取签到信息失败[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
async function getWmcMemberInfo() {
|
||||
let config = {
|
||||
url: "https://api.qiumeiapp.com/qmxcx/10001/getWmcMemberInfo",
|
||||
method: "POST",
|
||||
headers: {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html',
|
||||
'Referrer-Policy': 'unsafe-url'
|
||||
},
|
||||
data: JSON.stringify({
|
||||
appUserToken: $.token,
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`[${result.data.mobile}] 积分[${result.data.winonaPoint}}]`)
|
||||
$.ckStatus = true
|
||||
} else {
|
||||
$.log(`获取用户信息失败[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
async function getSigninBatch() {
|
||||
|
||||
let config = {
|
||||
url: "https://api.qiumeiapp.com/common-activity/signin/getSigninBatch",
|
||||
method: "POST",
|
||||
headers: {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'content-type': 'application/json',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'xweb_xhr': '1',
|
||||
'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html',
|
||||
'Referrer-Policy': 'unsafe-url'
|
||||
},
|
||||
data: JSON.stringify({
|
||||
appId: "wmcenter-1b60-11e8-98b9-7cd30ae08066"
|
||||
})
|
||||
}
|
||||
let { data: result } = await Request(config)
|
||||
if (result?.code == 200) {
|
||||
$.log(`本次签到batchCode为[${result.data.signinBatchCode}]`)
|
||||
$.batchCode = result.data.signinBatchCode
|
||||
} else {
|
||||
$.log(`获取签到batchCode失败[${result.msg}]`)
|
||||
}
|
||||
}
|
||||
|
||||
function checkEnv(userCookie) {
|
||||
const envSplitor = ["&", "\n"];
|
||||
//console.log(userCookie);
|
||||
let userList = userCookie
|
||||
.split(envSplitor.find((o) => userCookie.includes(o)) || "&")
|
||||
.filter((n) => n);
|
||||
console.log(`共找到${userList.length}个账号`);
|
||||
return userList;
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
|
||||
|
||||
async function Request(options) {
|
||||
if ($.isNode()) {
|
||||
const axios = require("axios");
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await axios.request(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ($.isQuanX()) {
|
||||
Request = async (options) => {
|
||||
try {
|
||||
return await $task.fetch(options);
|
||||
} catch (error) {
|
||||
return error && error.error ? error.error : "请求失败";
|
||||
}
|
||||
};
|
||||
}
|
||||
return await Request(options);
|
||||
}
|
||||
421
脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js
Normal file
421
脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js
Normal file
File diff suppressed because one or more lines are too long
281
脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js
Normal file
281
脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js
Normal file
File diff suppressed because one or more lines are too long
144
脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js
Normal file
144
脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js
Normal file
@@ -0,0 +1,144 @@
|
||||
// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/fsdlb.js
|
||||
// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/fsdlb.js
|
||||
// # Repo: smallfawn/QLScriptPublic
|
||||
// # Path: daily/fsdlb.js
|
||||
// # UploadedAt: 2026-05-14T17:47:57+08:00
|
||||
// # SHA256: c9dc848cba4a86dddf42506acc314a0f9fdcf1babc95f32fb05e0eaeaf7e8d68
|
||||
// # Category: 微信小程序/抓包版
|
||||
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
//
|
||||
|
||||
/*
|
||||
------------------------------------------
|
||||
@Author: sm
|
||||
@Date: 2024.06.07 19:15
|
||||
@Description: fsdlb 微信小程序逢三得利吧 签到积分
|
||||
cron: 30 9 * * *
|
||||
------------------------------------------
|
||||
#Notice:
|
||||
https://xiaodian.miyatech.com 小程序逢三得利吧签到积分,使用前请先获取token,方法如下:
|
||||
打开微信,进入逢三得利吧小程序,点击右下角“我的”,
|
||||
打开抓包软件抓取https://xiaodian.miyatech.com 请求头的Authorization
|
||||
抓取到的Authorization值即为token,去掉前面的"bearer ",将剩余部分作为token使用。
|
||||
|
||||
⚠️【免责声明】
|
||||
------------------------------------------
|
||||
1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
|
||||
2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
|
||||
3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
|
||||
4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
|
||||
5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
|
||||
6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
|
||||
7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
|
||||
*/
|
||||
|
||||
const { Env } = require("../tools/env")
|
||||
const $ = new Env("逢三得利吧小程序");
|
||||
let ckName = `fsdlb`;
|
||||
const strSplitor = "#";
|
||||
const axios = require("axios");
|
||||
const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram"
|
||||
|
||||
|
||||
class Task {
|
||||
constructor(env) {
|
||||
this.index = $.userIdx++
|
||||
this.user = env.split(strSplitor);
|
||||
this.token = "bearer " + this.user[0];
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.info()
|
||||
await this.signIn()
|
||||
}
|
||||
|
||||
async signIn() {
|
||||
let options = {
|
||||
method: 'POST',
|
||||
url: `https://xiaodian.miyatech.com/api/coupon/auth/signIn`,
|
||||
headers: {
|
||||
"X-VERSION": "2.1.3",
|
||||
"Authorization": `${this.token}`,
|
||||
"HH-VERSION": "0.2.8",
|
||||
"HH-FROM": "20230130307725",
|
||||
"HH-APP": "wxb33ed03c6c715482",
|
||||
"HH-CI": "saas-wechat-app",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
|
||||
},
|
||||
data: {
|
||||
"miniappId": 159
|
||||
}
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.code == 200) {
|
||||
//打印签到结果
|
||||
$.log(`🕊账号[${this.index}] 签到成功:[${result.data.integralToastText}]🎉`);
|
||||
} else {
|
||||
$.log(`🕊账号[${this.index}] 签到失败:${result.msg}🚫`)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
async info() {
|
||||
let options = {
|
||||
method: 'GET',
|
||||
url: `https://xiaodian.miyatech.com/api/user/auth/member/integral/union/flow/list?pageNo=1&pageSize=10&dataType=SCORE`,
|
||||
headers: {
|
||||
"X-VERSION": "2.1.3",
|
||||
"Authorization": `${this.token}`,
|
||||
"HH-VERSION": "0.2.8",
|
||||
"HH-FROM": "20230130307725",
|
||||
"HH-APP": "wxb33ed03c6c715482",
|
||||
"HH-CI": "saas-wechat-app",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
|
||||
},
|
||||
|
||||
}
|
||||
let { data: result } = await axios.request(options)
|
||||
if (result?.code == 200) {
|
||||
$.log(`🕊账号[${this.index}] 查询成功:总积分[${result.data.totalScore}]🎉`);
|
||||
|
||||
} else {
|
||||
$.log(`🕊账号[${this.index}] 查询失败:${result.msg}🚫`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await getNotice()
|
||||
$.checkEnv(ckName);
|
||||
|
||||
for (let user of $.userList) {
|
||||
await new Task(user).run();
|
||||
}
|
||||
})()
|
||||
.catch((e) => console.log(e))
|
||||
.finally(() => $.done());
|
||||
|
||||
async function getNotice() {
|
||||
try {
|
||||
let options = {
|
||||
url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`,
|
||||
headers: {
|
||||
"User-Agent": defaultUserAgent,
|
||||
},
|
||||
timeout:3000
|
||||
}
|
||||
let {
|
||||
data: res
|
||||
} = await axios.request(options);
|
||||
$.log(res)
|
||||
return res
|
||||
} catch (e) {}
|
||||
|
||||
}
|
||||
115
脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py
Normal file
115
脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py
Normal file
@@ -0,0 +1,115 @@
|
||||
# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%85%B7%E7%93%9C.py
|
||||
# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%85%B7%E7%93%9C.py
|
||||
# Repo: jdqlscript/toulu
|
||||
# Path: 酷瓜.py
|
||||
# UploadedAt: 2025-06-28T11:18:42+08:00
|
||||
# SHA256: f2c605f703d051b8fd8f1cdb429524d6e15f8dc3de3a5cc336a70ed031b4ebf0
|
||||
# Category: 微信小程序/抓包版
|
||||
# Evidence: appid/openid/session_key/encryptedData等小程序字段
|
||||
|
||||
"""
|
||||
酷瓜
|
||||
每天0.1毛抓refreshToken,openid,appid就可以了(首次登陆才有这个包没抓到重新进入去抓)
|
||||
分隔符#多账户换行
|
||||
|
||||
|
||||
|
||||
有问题联系3288588344
|
||||
频道:https://pd.qq.com/s/672fku8ge
|
||||
|
||||
|
||||
"""
|
||||
import os
|
||||
import requests
|
||||
import time
|
||||
import random
|
||||
response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt")
|
||||
response.encoding = 'utf-8'
|
||||
txt = response.text
|
||||
print(txt)
|
||||
|
||||
def refresh_token(refreshToken):
|
||||
url = "https://www.kugua.com/wxapp/refreshToken"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
data = {
|
||||
"refresh_token": refreshToken
|
||||
}
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
json_response = response.json()
|
||||
if json_response.get('status') == "0000":
|
||||
token = json_response["data"]["token"]
|
||||
codemsg = json_response["codemsg"]
|
||||
print(f"token刷新结果{codemsg},开始执行提现任务")
|
||||
return token
|
||||
else:
|
||||
print("刷新失败检查refresh_token是否过期")
|
||||
return None
|
||||
|
||||
def sign(token, appid, openid):
|
||||
url = "https://www.kugua.com/wxapp/inflatedv3/popUpRedEnvelopes"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
data = {
|
||||
"token": token,
|
||||
"type": 1,
|
||||
"invite_id": "",
|
||||
"code_ticket": "",
|
||||
"count": "",
|
||||
"appid": appid,
|
||||
"openid": openid
|
||||
}
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
json_response = response.json()
|
||||
if json_response.get('status') == "0000":
|
||||
codemsg = json_response["codemsg"]
|
||||
print(f"签到结果{codemsg}")
|
||||
else:
|
||||
codemsg = json_response["codemsg"]
|
||||
print(f"签到失败{codemsg}")
|
||||
|
||||
def tx(token, openid, appid):
|
||||
url = "https://www.kugua.com/wxapp/withdrawal/withdrawal"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
data = {
|
||||
"token": token,
|
||||
"withdrawalId": 8,
|
||||
"appid": appid,
|
||||
"openid": openid
|
||||
}
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
json_response = response.json()
|
||||
if json_response.get('status') == "0000":
|
||||
amount = json_response["data"]["amount"]
|
||||
codemsg = json_response["codemsg"]
|
||||
print(f"提现结果{codemsg},提现后余额还剩{amount}")
|
||||
else:
|
||||
codemsg = json_response["codemsg"]
|
||||
print(f"提现失败{codemsg}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
mkkg = os.environ.get('mkkg')
|
||||
if not mkkg:
|
||||
print("请设置环境变量mkkg")
|
||||
else:
|
||||
kghw_list = mkkg.split('\n')
|
||||
for num, kghw_item in enumerate(kghw_list, start=1):
|
||||
appid, openid, refreshToken = kghw_item.split('#')
|
||||
print(f"=====开始执行第{num}个账号任务=====")
|
||||
print("---------开始执行账号刷新---------")
|
||||
refreshed_token = refresh_token(refreshToken)
|
||||
if refreshed_token:
|
||||
print("---------开始执行账号签到---------")
|
||||
sign(refreshed_token, appid, openid)
|
||||
time.sleep(random.randint(10, 30))
|
||||
print("---------开始执行账号提现---------")
|
||||
tx(refreshed_token, openid, appid)
|
||||
time.sleep(random.randint(10, 30))
|
||||
print("---------账号任务执行完毕---------")
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user