├── .gitignore ├── 75water.js ├── CHERWIN_TOOLS.py ├── Q必达.js ├── aebs.js ├── aima.js ├── bagua.js ├── baixiang.js ├── bnmdhg_wx.js ├── bsd.js ├── bwcj.js ├── cbly.js ├── chinaUnicom.js ├── chinaUnicomYpcj.js ├── chml.py ├── dch.js ├── dq点单.js ├── dydd.py ├── fs.js ├── ftyj.js ├── gjgj.js ├── gjjj.py ├── gljj.js ├── gmjk.js ├── gobing_checkin.py ├── hdl.py ├── hqcsh-get.js ├── hqcsh.js ├── hqcsh.py ├── htmwg.js ├── huanlejia.js ├── hxrk.py ├── hz.js ├── hzh.js ├── jdc.py ├── jjjhyzx.py ├── jryj.js ├── jyj.py ├── kg.py ├── kgzj.py ├── lbdq.py ├── ljgy.js ├── lqkx.py ├── lsxds.py ├── ltyd.py ├── lxapp.js ├── mmx.js ├── mpcbh.js ├── ms.js ├── mswefls.js ├── mxbc.py ├── notify.py ├── nwy.js ├── nx.py ├── pinzan.js ├── pzxq.js ├── qchyjlb.js ├── qjez.js ├── rainyun.py ├── rfwsc.py ├── rqtyg.js ├── sandeli.js ├── sendNotify.js ├── sfsy.py ├── syns.js ├── tbhyzx.py ├── this.js ├── tyklxq.py ├── utils.js ├── wangchao.js ├── wdzhsy.js ├── wyshyj.js ├── xdf.py ├── xhgj.js ├── xhxy.py ├── xpnc.js ├── xsy.js ├── ybs.js ├── ydyp.py ├── yht.js ├── yl.py ├── yybpc.js ├── zippo.js └── zwxq.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Editor directories and files 2 | .idea 3 | 4 | # Package Manager 5 | node_modules 6 | .pnpm-debug.log* 7 | package.json 8 | 9 | # System 10 | .DS_Store 11 | 12 | # Bundle 13 | dist 14 | coverage 15 | 16 | # local env files 17 | *.local 18 | .eslintcache 19 | cypress/screenshots/* 20 | cypress/videos/* 21 | tmp 22 | -------------------------------------------------------------------------------- /75water.js: -------------------------------------------------------------------------------- 1 | // cron: 35 7,18 * * * 2 | // 抓data中sid YZxxx 和 url中的access_token 用&拼起来 多账号换行 3 | // export water75="YZxxx&770f5xxxx 4 | // 770f5xxxx" 5 | const { 6 | getCurrDay,checkTime,Env,random 7 | } = require('./utils.js') 8 | const {sendNotify} = require('./sendNotify.js') 9 | const $ = new Env("7.5水签到"); 10 | const axios = require('axios') 11 | const userInfoList = $.getEnvKey('water75').split('\n') 12 | if(!userInfoList.length||userInfoList[0]===''){ 13 | throw new Error('未找到ck') 14 | } 15 | console.log(`获取到${userInfoList.length}个ck`); 16 | 17 | const baseUrl = 'https://h5.youzan.com' 18 | const headers = { 19 | 'Host': 'h5.youzan.com', 20 | 'Connection': 'keep-alive', 21 | 'xweb_xhr': 1, 22 | 'Extra-Data': '', 23 | '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(0x63090a13) XWEB/9129', 24 | 'Content-Type': 'application/json', 25 | 'Accept': '*/*', 26 | 'Sec-Fetch-Site': 'cross-site', 27 | 'Sec-Fetch-Mode': 'cors', 28 | 'Sec-Fetch-Dest': 'empty', 29 | 'Referer': 'https://servicewechat.com/wx5508c9ab0d2118ff/62/page-frame.html', 30 | 'Accept-Encoding': 'gzip, deflate, br', 31 | 'Accept-Language': 'zh-CN,zh;q=0.9', 32 | 33 | } 34 | const url = { 35 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=3997371&app_id=wx5508c9ab0d2118ff&kdt_id=105036832&access_token=', 36 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=3997371&app_id=wx5508c9ab0d2118ff&kdt_id=105036832&access_token=', 37 | 'userInfo':'/wscaccount/api/authorize/data.json?app_id=wxf739eb6ad6a644da&kdt_id=146384563&appId=wxf739eb6ad6a644da&access_token=' 38 | } 39 | const api = { 40 | checkin: ({data,token}) => { 41 | return axios({ 42 | url: baseUrl+url.checkin+token, 43 | method: 'get', 44 | headers:{ 45 | ...headers, 46 | "Extra-Data":JSON.stringify(data) 47 | }, 48 | }) 49 | }, 50 | userInfo: ({data,token}) => { 51 | return axios({ 52 | url: baseUrl+url.userInfo+token, 53 | method: 'get', 54 | headers:{ 55 | ...headers, 56 | "Extra-Data":JSON.stringify(data) 57 | }, 58 | }) 59 | }, 60 | getCountDay: ({data,token}) => { 61 | return axios({ 62 | url: baseUrl+url.getCountDay+token, 63 | method: 'get', 64 | headers:{ 65 | ...headers, 66 | "Extra-Data":JSON.stringify(data) 67 | }, 68 | }) 69 | }, 70 | } 71 | const processTokens = async () => { 72 | let index = 0 73 | const randomTime = random(1, 300) 74 | console.log('随机延迟:',randomTime + '秒'); 75 | await $.wait(randomTime*1000) 76 | for (const token of userInfoList) { 77 | try { 78 | $.log('') 79 | index++ 80 | const userData = token.split('&') 81 | const headerData = {"is_weapp":1,"sid":userData[0],"version":"2.175.7","client":"weapp","bizEnv":"wsc","uuid":"dPN7c9aDRQbsqcZ1717150035269","ftime":new Date().getTime()} 82 | const headerParams = { 83 | data:headerData, 84 | token:userData[1] 85 | } 86 | const data = await api.userInfo(headerParams) 87 | const {mobile} = data?.data?.data?.userInfo 88 | if(!mobile){ 89 | $.log(`账号【${index}】登录失效`) 90 | $.log('') 91 | continue; 92 | } 93 | $.log(`账号【${index}】 当前用户:${mobile}`); 94 | await $.wait(2000) 95 | const {data:{msg}} = await api.checkin(headerParams) 96 | $.log(`账号【${index}】 签到信息:${msg}`); 97 | await $.wait(2000) 98 | const {data:{data:{continuesDay}}} = await api.getCountDay(headerParams) 99 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`); 100 | await $.wait(3500) 101 | } catch (error) { 102 | $.logErr(error.toString()); 103 | } 104 | } 105 | $.log('') 106 | await sendNotify('7.5水签到', $.logs.join('
')) 107 | $.done() 108 | }; 109 | 110 | processTokens() -------------------------------------------------------------------------------- /aebs.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.11 12:44 5 | @Description: 瑷尔博士官方云商城小程序 6 | ------------------------------------------ 7 | 变量名airboshi 8 | 变量值 https://xapi.weimob.com/api3/ 域名下的Headers请求头的X-WX-Token 多账号&或换行或新增同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("瑷尔博士官方云商城"); 27 | let ckName = `airboshi`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 1; 44 | let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index}】 start work\n`); 48 | index++ 49 | $.token = user 50 | $.ckStatus = true; 51 | await signIn() 52 | } 53 | 54 | await $.sendMsg($.logs.join("\n")); 55 | })() 56 | .catch((e) => console.log(e)) 57 | .finally(() => $.done()); 58 | async function signIn() { 59 | const config = { 60 | method: 'post', 61 | url: 'https://xapi.weimob.com/api3/onecrm/mactivity/sign/misc/sign/activity/c/signMainInfo', 62 | headers: { 63 | "Accept": "*/*", 64 | "Accept-Encoding": "gzip, deflate, br", 65 | "Accept-Language": "zh-CN,zh;q=0.9", 66 | "Connection": "keep-alive", 67 | "Content-Type": "application/json", 68 | "Host": "xapi.weimob.com", 69 | "Referer": "https://servicewechat.com/wx0399cf391f15b422/46/page-frame.html", 70 | "Sec-Fetch-Dest": "empty", 71 | "Sec-Fetch-Mode": "cors", 72 | "Sec-Fetch-Site": "cross-site", 73 | "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", 74 | "X-WX-Token": $.token, 75 | "xweb_xhr": "1" 76 | }, 77 | data: JSON.stringify({ 78 | "appid": "wx0399cf391f15b422", 79 | "basicInfo": { 80 | "vid": 6015569623153, 81 | "vidType": 2, 82 | "bosId": 4021407433153, 83 | "productId": 146, 84 | "productInstanceId": 6351100153, 85 | "productVersionId": "14026", 86 | "merchantId": 2000150059153, 87 | "tcode": "weimob", 88 | "cid": 376411153 89 | }, 90 | "extendInfo": { 91 | "wxTemplateId": 7579, 92 | "analysis": [], 93 | "bosTemplateId": 1000001485, 94 | "childTemplateIds": [ 95 | { 96 | "customId": 90004, 97 | "version": "crm@0.1.17" 98 | }, 99 | { 100 | "customId": 90002, 101 | "version": "ec@43.9" 102 | }, 103 | { 104 | "customId": 90006, 105 | "version": "hudong@0.0.205" 106 | }, 107 | { 108 | "customId": 90008, 109 | "version": "cms@0.0.429" 110 | } 111 | ], 112 | "quickdeliver": { 113 | "enable": false 114 | }, 115 | "youshu": { 116 | "enable": false 117 | }, 118 | "source": 1, 119 | "channelsource": 5, 120 | "refer": "onecrm-signgift", 121 | //"mpScene": 1256 122 | }, 123 | "queryParameter": null, 124 | "i18n": { 125 | "language": "zh", 126 | "timezone": "8" 127 | }, 128 | "pid": "", 129 | "storeId": "", 130 | "customInfo": { 131 | "source": 0, 132 | //"wid": 11167663828 133 | } 134 | }) 135 | }; 136 | let { data: result } = await Request(config) 137 | if (result?.errcode == "0") { 138 | $.log(`签到成功`); 139 | } else { 140 | $.log(`签到失败`) 141 | $.log(JSON.stringify(result)) 142 | } 143 | 144 | } 145 | 146 | 147 | function checkEnv(userCookie) { 148 | const envSplitor = ["&", "\n"]; 149 | //console.log(userCookie); 150 | let userList = userCookie 151 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 152 | .filter((n) => n); 153 | console.log(`共找到${userList.length}个账号`); 154 | return userList; 155 | } 156 | // prettier-ignore 157 | 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) } 158 | 159 | async function Request(options) { 160 | if ($.isNode()) { 161 | const axios = require("axios"); 162 | Request = async (options) => { 163 | try { 164 | return await axios.request(options); 165 | } catch (error) { 166 | return error && error.error ? error.error : "请求失败"; 167 | } 168 | }; 169 | } 170 | if ($.isQuanX()) { 171 | Request = async (options) => { 172 | try { 173 | return await $task.fetch(options); 174 | } catch (error) { 175 | return error && error.error ? error.error : "请求失败"; 176 | } 177 | }; 178 | } 179 | return await Request(options); 180 | } -------------------------------------------------------------------------------- /bagua.js: -------------------------------------------------------------------------------- 1 | // cron: 40 8,17 * * * 2 | // 抓header中的token 多账号换行 3 | // export bagua="1ef1e1c6-xxe" 4 | const { 5 | getCurrDay,checkTime,Env,random 6 | } = require('./utils.js') 7 | const {sendNotify} = require('./sendNotify.js') 8 | const $ = new Env("叭卦商城优选签到"); 9 | const axios = require('axios') 10 | const userInfoList = $.getEnvKey('bagua').split('\n') 11 | if(!userInfoList.length||userInfoList[0]===''){ 12 | throw new Error('未找到ck') 13 | } 14 | console.log(`获取到${userInfoList.length}个ck`); 15 | 16 | const baseUrl = 'https://shop.bg19.cn/api/wanlshop' 17 | const headers = { 18 | 'Host': 'shop.bg19.cn', 19 | 'Connection': 'keep-alive', 20 | 'xweb_xhr': 1, 21 | 'Accept-Language': 'zh-CN,zh;q=0.9', 22 | 'App-Client': 'mp-wanlshop', 23 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c11)XWEB/13283', 24 | 'token': '1ef1e1c6-ece0-4abe-a625-64eab88cfebe', 25 | 'Content-Type': 'pplication/json;charset=UTF-8', 26 | 'Accept': '*/*', 27 | 'Sec-Fetch-Site': 'cross-site', 28 | 'Sec-Fetch-Mode': 'cors', 29 | 'Sec-Fetch-Dest': 'empty', 30 | 'Referer': 'https://servicewechat.com/wxce969b8fdc6de2aa/266/page-frame.html', 31 | 'Accept-Encoding':' gzip, deflate, br', 32 | } 33 | const url = { 34 | 'signIn':'/Punch/click', 35 | 'userInfo':'/user/refresh ', 36 | } 37 | const api = { 38 | signIn: (token) => { 39 | headers.token = token 40 | return axios({ 41 | url: baseUrl+url.signIn, 42 | method: 'get', 43 | headers, 44 | }) 45 | }, 46 | userInfo: (token) => { 47 | headers.token = token 48 | return axios({ 49 | url: baseUrl+url.userInfo, 50 | method: 'post', 51 | headers 52 | }) 53 | }, 54 | } 55 | const processTokens = async () => { 56 | let index = 0 //用来给账号标记序号, 从1开始 57 | const randomTime = random(1, 300) 58 | console.log('随机延迟:',randomTime + '秒'); 59 | await $.wait(randomTime*1000) 60 | for (const token of userInfoList) { 61 | try { 62 | $.log('') 63 | index++ 64 | const data = await api.userInfo(token) 65 | const mobile = data?.data?.data?.userinfo?.mobile 66 | if(!mobile){ 67 | $.log(`账号【${index}】登录失效`) 68 | $.log('') 69 | continue; 70 | } 71 | $.log(`账号【${index}】 当前用户:${mobile}`); 72 | await $.wait(2000) 73 | const {data:{data:{msg}}} = await api.signIn(token) 74 | $.log(`账号【${index}】 签到信息:${msg}`); 75 | await $.wait(2000) 76 | const infoData = await api.userInfo(token) 77 | const currentScore = infoData?.data?.data?.userinfo?.score 78 | $.log(`账号【${index}】 当前积分:${currentScore}`); 79 | await $.wait(3500) 80 | } catch (error) { 81 | $.logErr(error.toString()); 82 | } 83 | } 84 | $.log('') 85 | $.logs = $.logs.join('
') 86 | }; 87 | 88 | processTokens().finally(async() => { 89 | await sendNotify('叭卦商城优选签到',$.logs) 90 | $.done() 91 | }); -------------------------------------------------------------------------------- /baixiang.js: -------------------------------------------------------------------------------- 1 | // cron: 40 7,18 * * * 2 | // 抓header中Authorization 多账号换行 3 | const { 4 | getCurrDay,checkTime,Env,random 5 | } = require('./utils.js') 6 | const {sendNotify} = require('./sendNotify.js') 7 | const $ = new Env("白象签到"); 8 | const axios = require('axios') 9 | let index = 0 10 | const userInfoList = $.getEnvKey('baixiang').split('\n') 11 | if(!userInfoList.length||userInfoList[0]===''){ 12 | // throw new Error('未找到ck') 13 | } 14 | console.log(`获取到${userInfoList.length}个ck`); 15 | 16 | const headers = { 17 | "Host": "dy.baixiangfood.com", 18 | "Connection": "keep-alive", 19 | // "Content-Length": "16", 20 | "xweb_xhr": "1", 21 | "Authorization": "x", 22 | "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(0x63090c11)XWEB/11275", 23 | "Content-Type": "application/json", 24 | "Accept": "*/*", 25 | "Sec-Fetch-Site": "cross-site", 26 | "Sec-Fetch-Mode": "cors", 27 | "Sec-Fetch-Dest": "empty", 28 | "Referer": "https://servicewechat.com/wxeaf5d66c48160b2d/18/page-frame.html", 29 | "Accept-Encoding": "gzip, deflate, br", 30 | "Accept-Language": "zh-CN,zh;q=0.9" 31 | 32 | } 33 | const api = { 34 | sign: ({token,userId}) => { 35 | return axios({ 36 | url: 'https://dy.baixiangfood.com/api/app/signLog/sign', 37 | method: 'post', 38 | headers:{ 39 | ...headers, 40 | "Authorization": token, 41 | }, 42 | data:{userId} 43 | }) 44 | }, 45 | getSignStatus: ({token,userId}) => { 46 | return axios({ 47 | url:'https://dy.baixiangfood.com/api/app/signLog/getSignStatus ', 48 | method: 'post', 49 | headers:{ 50 | ...headers, 51 | "Authorization": token, 52 | }, 53 | data:{userId} 54 | }) 55 | }, 56 | getSignList: ({token,userId}) => { 57 | return axios({ 58 | url: 'https://dy.baixiangfood.com/api/app/signLog/getSignlist ', 59 | method: 'post', 60 | headers:{ 61 | ...headers, 62 | "Authorization": token, 63 | }, 64 | data:{userId} 65 | }) 66 | }, 67 | getUserInfo: (token) => { 68 | return axios({ 69 | url: 'https://dy.baixiangfood.com/api/app/user/getUserInfo ', 70 | method: 'get', 71 | headers:{ 72 | ...headers, 73 | "Authorization": token, 74 | }, 75 | }) 76 | } 77 | } 78 | 79 | const getUserInfo = async (params) => { 80 | const {data:{data:{id,phone,integral}}} = await api.getUserInfo(params) 81 | if(!id){ 82 | $.log(`账号【${index}】登录失效`) 83 | $.log('') 84 | return null 85 | } 86 | $.log(`账号【${index}】 当前用户:【${phone}】`); 87 | $.log(`账号【${index}】 当前积分:【${integral}】`); 88 | return id 89 | } 90 | const getSignStatus = async (params) => { 91 | const {data:{data:{signStatus},count}} = await api.getSignStatus(params) 92 | !signStatus&&$.log(`账号【${index}】 今日已签到`); 93 | $.log(`账号【${index}】 已连续签到:【${count}】天`); 94 | return signStatus 95 | } 96 | const userSign = async (params) => { 97 | const {data:{msg,count,code}} = await api.sign(params) 98 | if(code===200){ 99 | $.log(`账号【${index}】 签到信息:${msg}!,获得${count}积分`); 100 | }else{ 101 | $.log(`账号【${index}】 签到信息:${msg}`); 102 | } 103 | } 104 | 105 | const processTokens = async () => { 106 | const randomTime = random(1, 300) 107 | console.log('随机延迟:',randomTime + '秒'); 108 | await $.wait(randomTime*1000) 109 | for (const token of userInfoList) { 110 | try { 111 | $.log('') 112 | index++ 113 | const id = await getUserInfo(token) 114 | await $.wait(3500) 115 | if(!id){ 116 | continue; 117 | } 118 | //检查签到状态 119 | const signStatus = await getSignStatus({token,userId:id}) 120 | await $.wait(3500) 121 | if(signStatus){ 122 | //签到 123 | await userSign({token,userId:id}) 124 | } 125 | await $.wait(3500) 126 | } catch (error) { 127 | $.logErr(error.toString()); 128 | } 129 | } 130 | $.log('') 131 | await sendNotify('白象签到', $.logs.join('
')) 132 | $.done() 133 | }; 134 | 135 | processTokens() -------------------------------------------------------------------------------- /bsd.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.09 10.04 5 | @Description: 波司登小程序 每日签到 6 | ------------------------------------------ 7 | 变量名bosideng 8 | 变量值 抓https://gwuop.bsdits.cn/points-mall/ 请求头Headers中x-access-token的值和 9 | https://gbpapihost.bsdits.cn/v3/projects/bfe7825ce8dd5cec/collect POST请求中请求体的gioId或deviceId或userId 10 | 11 | 两个值拼接# 例如89f...........#o15uuuuu_mf-SSS 12 | 多账号&或换行或新建同名变量 13 | 如果找不到第二个值 那么请进入签到页面找到https://gwuop.bsdits.cn/points-mall/front/member/ 开头的 /activities/1/records结尾的 中间的就是第二个值 14 | [Script] 15 | http-response 16 | 17 | [MITM] 18 | hostname = 19 | 20 | ⚠️【免责声明】 21 | ------------------------------------------ 22 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 23 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 24 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 25 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 26 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 27 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 28 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 29 | */ 30 | 31 | const $ = new Env("波司登小程序"); 32 | let ckName = `bosideng`; 33 | let userCookie = checkEnv( 34 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 35 | ); 36 | const notify = $.isNode() ? require("./sendNotify") : ""; 37 | 38 | !(async () => { 39 | console.log( 40 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 41 | new Date().getTime() + 42 | new Date().getTimezoneOffset() * 60 * 1000 + 43 | 8 * 60 * 60 * 1000 44 | ).toLocaleString()} \n==================================================` 45 | ); 46 | //console.log(userCookie) 47 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 48 | let index = 1; 49 | let strSplitor = "#"; 50 | 51 | for (let user of userCookie) { 52 | $.log(`\n🚀 user:【${index}】 start work\n`); 53 | index++ 54 | $.token = user.split(strSplitor)[0] 55 | $.union_id = user.split(strSplitor)[1] 56 | $.ckStatus = true; 57 | await records() 58 | } 59 | 60 | await $.sendMsg($.logs.join("\n")); 61 | })() 62 | .catch((e) => console.log(e)) 63 | .finally(() => $.done()); 64 | function getTime() { 65 | // 创建Date对象 66 | const now = new Date(); 67 | // 获取年、月、日、时、分、秒,并格式化为两位数 68 | const year = now.getFullYear(); 69 | const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth返回的是0-11,所以需要+1 70 | const day = String(now.getDate()).padStart(2, '0'); 71 | const hours = String(now.getHours()).padStart(2, '0'); 72 | const minutes = String(now.getMinutes()).padStart(2, '0'); 73 | const seconds = String(now.getSeconds()).padStart(2, '0'); 74 | const timestampStr = `${year}${month}${day}${hours}${minutes}${seconds}`; 75 | return timestampStr 76 | // 调用函数并打印结果 77 | } 78 | function MD5(data) { 79 | let crypto = require('crypto') 80 | return crypto.createHash('md5').update(data).digest('hex') 81 | } 82 | async function records() { 83 | let time = getTime() 84 | let nonce = $.uuid() 85 | let text = `${$.union_id}${$.token}${time}${nonce}` 86 | let config = { 87 | method: 'GET', 88 | url: `https://gwuop.bsdits.cn/points-mall/front/member/${$.union_id}/activities/1/records`, 89 | headers: { 90 | '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', 91 | 'Accept-Encoding': 'gzip,compress,br,deflate', 92 | 'charset': 'utf-8', 93 | 'x-nonce': nonce, 94 | 'x-datadog-sampling-priority': '1', 95 | 'x-timestamp': time, 96 | 'x-datadog-origin': 'rum', 97 | 'bgno': 'BOSIDENG', 98 | 'x-signature': MD5(text).toUpperCase(), 99 | 'content-type': 'application/json', 100 | 'x-login-type': 'MiniProgram', 101 | 'x-access-token': $.token, 102 | 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html' 103 | } 104 | }; 105 | 106 | let { data: result } = await Request(config) 107 | if (result.code == 200) { 108 | if (result.result.isSigned !== 1) { 109 | $.log(`未签到 ===> 签到ing`) 110 | await signIn() 111 | } else { 112 | $.log(`已签到 ===> 什么都不做`) 113 | } 114 | $.log(`🎉 签到信息查询成功,当前签到${result.result.signedDay}天 本次签到获得积分[${result.result.records[0].rewardPoints}]`) 115 | } else { 116 | $.log(`❌ 签到信息查询失败,原因:${result.message}`) 117 | } 118 | } 119 | async function signIn() { 120 | let data = JSON.stringify({}); 121 | let time = getTime() 122 | let nonce = $.uuid() 123 | let text = `${$.union_id}${$.token}${time}${nonce}` 124 | let config = { 125 | method: 'POST', 126 | url: 'https://gwuop.bsdits.cn/points-mall/front/points/', 127 | headers: { 128 | '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', 129 | 'Accept-Encoding': 'gzip,compress,br,deflate', 130 | 'charset': 'utf-8', 131 | 'x-nonce': nonce, 132 | 'x-datadog-sampling-priority': '1', 133 | 'x-timestamp': time, 134 | 'x-datadog-origin': 'rum', 135 | 'bgno': 'BOSIDENG', 136 | 'x-signature': MD5(text).toUpperCase(), 137 | 'content-type': 'application/json', 138 | 'x-login-type': 'MiniProgram', 139 | 'x-access-token': $.token, 140 | 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html' 141 | }, 142 | data: data 143 | }; 144 | let { data: result } = await Request(config) 145 | if (result.code == 200) { 146 | $.log(result) 147 | $.log(`🎉 签到成功`) 148 | } else { 149 | $.log(`❌ 签到失败,原因:${result.message}`) 150 | } 151 | } 152 | 153 | 154 | function checkEnv(userCookie) { 155 | const envSplitor = ["&", "\n"]; 156 | console.log(userCookie); 157 | let userList = userCookie 158 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 159 | .filter((n) => n); 160 | console.log(`共找到${userList.length}个账号`); 161 | return userList; 162 | } 163 | // prettier-ignore 164 | 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) } 165 | 166 | async function Request(options) { 167 | if ($.isNode()) { 168 | const axios = require("axios"); 169 | Request = async (options) => { 170 | try { 171 | return await axios.request(options); 172 | } catch (error) { 173 | return error && error.error ? error.error : "请求失败"; 174 | } 175 | }; 176 | } 177 | if ($.isQuanX()) { 178 | Request = async (options) => { 179 | try { 180 | return await $task.fetch(options); 181 | } catch (error) { 182 | return error && error.error ? error.error : "请求失败"; 183 | } 184 | }; 185 | } 186 | return await Request(options); 187 | } -------------------------------------------------------------------------------- /cbly.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.09 12.51 5 | @Description: 臭宝乐园小程序 签到换螺蛳粉 6 | ------------------------------------------ 7 | 变量名choubao 8 | 变量值 https://cbxcx.weinian.com.cn/wnuser 请求头Headers中authorization的值 多账号&或换行或新建同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("臭宝乐园"); 27 | let ckName = `choubao`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 1; 44 | let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index}】 start work\n`); 48 | index++ 49 | $.token = user 50 | $.ckFlag = true; 51 | await getUserInfo() 52 | if ($.ckFlag) { 53 | await signInCheck() 54 | await $.wait(3000) 55 | } 56 | 57 | } 58 | 59 | await $.sendMsg($.logs.join("\n")); 60 | })() 61 | .catch((e) => console.log(e)) 62 | .finally(() => $.done()); 63 | 64 | async function signInCheck() { 65 | let config = { 66 | method: 'POST', 67 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/checkSignNum', 68 | headers: { 69 | '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', 70 | 'Accept-Encoding': 'gzip,compress,br,deflate', 71 | 'authorization': $.token, 72 | 'charset': 'utf-8', 73 | 'content-type': 'application/json', 74 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' 75 | } 76 | }; 77 | let { data: result } = await Request(config) 78 | if (result?.status == 200) { 79 | await signIn() 80 | }else{ 81 | $.log(`获取签到状态[${result.msg}]`) 82 | } 83 | } 84 | async function signIn() { 85 | let config = { 86 | method: 'POST', 87 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/daySign', 88 | headers: { 89 | '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', 90 | 'Accept-Encoding': 'gzip,compress,br,deflate', 91 | 'authorization': $.token, 92 | 'charset': 'utf-8', 93 | 'content-type': 'application/json', 94 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' 95 | } 96 | }; 97 | let { data: result } = await Request(config) 98 | if (result?.status == 200) { 99 | $.log(`签到成功`) 100 | } else { 101 | $.log(`签到失败【${result.msg}】`) 102 | } 103 | } 104 | async function getUserInfo() { 105 | let config = { 106 | method: 'POST', 107 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/getMemberUser', 108 | headers: { 109 | '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', 110 | 'Accept-Encoding': 'gzip,compress,br,deflate', 111 | 'authorization': $.token, 112 | 'charset': 'utf-8', 113 | 'content-type': 'application/json', 114 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' 115 | } 116 | }; 117 | let { data: result } = await Request(config) 118 | if (result?.status == 200) { 119 | $.log(`[${result.data.nickName}] 嗦粉币[${result.data.points}]`) 120 | } else { 121 | $.log(`获取用户信息失败【${result.msg}】`) 122 | $.ckFlag = false 123 | } 124 | } 125 | 126 | function checkEnv(userCookie) { 127 | const envSplitor = ["&", "\n"]; 128 | //console.log(userCookie); 129 | let userList = userCookie 130 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 131 | .filter((n) => n); 132 | console.log(`共找到${userList.length}个账号`); 133 | return userList; 134 | } 135 | // prettier-ignore 136 | 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) } 137 | 138 | async function Request(options) { 139 | if ($.isNode()) { 140 | const axios = require("axios"); 141 | Request = async (options) => { 142 | try { 143 | return await axios.request(options); 144 | } catch (error) { 145 | return error && error.error ? error.error : "请求失败"; 146 | } 147 | }; 148 | } 149 | if ($.isQuanX()) { 150 | Request = async (options) => { 151 | try { 152 | return await $task.fetch(options); 153 | } catch (error) { 154 | return error && error.error ? error.error : "请求失败"; 155 | } 156 | }; 157 | } 158 | return await Request(options); 159 | } -------------------------------------------------------------------------------- /chml.py: -------------------------------------------------------------------------------- 1 | #环境变量 chmlck 取url请求头中的token 2 | #变量格式 token#备注,多账号换行 3 | #搜微信小程序长虹美菱 4 | #有问题联系3288588344 5 | #频道:https://pd.qq.com/s/672fku8ge 6 | 7 | # cron: 0 7,21 * * * 8 | # const $ = new Env("长虹美菱"); 9 | 10 | 11 | 12 | 13 | 14 | 15 | import os 16 | import requests 17 | 18 | 19 | accounts = os.getenv("chmlck", "").splitlines() 20 | print("☞☞☞ 长虹美菱每日签到 ☜☜☜\n") 21 | 22 | if not accounts: 23 | print("未找到任何账号信息。") 24 | else: 25 | for account in accounts: 26 | if not account.strip(): 27 | continue 28 | try: 29 | token, note = account.split("#") 30 | except ValueError: 31 | print(f"格式错误: {account}") 32 | continue 33 | 34 | url = "https://hongke.changhong.com/gw/applet/aggr/signin" 35 | params = {'aggrId': "608"} 36 | headers = { 37 | 'User-Agent': "Mozilla/5.0 (Linux; Android 10; Mobile Safari/537.36)", 38 | 'Accept-Encoding': "gzip, deflate", 39 | 'Content-Type': "application/json", 40 | 'Token': token.strip() 41 | } 42 | 43 | try: 44 | response = requests.post(url, params=params, headers=headers) 45 | if response.status_code == 200: 46 | print(f"{note.strip()}:签到成功") 47 | elif response.status_code == 400: 48 | print(f"{note.strip()}:请勿重复签到") 49 | else: 50 | print(f"{note.strip()}:响应状态码 {response.status_code} - {response.text}") 51 | except requests.RequestException as e: 52 | print(f"{note.strip()}:请求失败 - {e}") -------------------------------------------------------------------------------- /dq点单.js: -------------------------------------------------------------------------------- 1 | /* 2 | 微信小程序DQ点单安卓版 3 | 抓包wechat.dairyqueen.com.cn域名下的cookie 4 | 变量名=dqdd 5 | 多账号用&分开或者添加多个变量名 6 | 有问题联系3288588344 7 | 频道:https://pd.qq.com/s/672fku8ge 8 | 9 | 长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 10 | 11 | */ 12 | 13 | 14 | const axios = require('axios'); 15 | const dqdd = process.env.dqdd.split('\n'); 16 | 17 | const url = 'https://wechat.dairyqueen.com.cn/memSignIn/signIn'; 18 | 19 | async function fetchSignInfo(cookie, accountIndex) { 20 | const headers = { 21 | 'Host': 'wechat.dairyqueen.com.cn', 22 | 'Connection': 'keep-alive', 23 | 'Content-Length': '0', 24 | 'charset': 'utf-8', 25 | 'cookie': cookie, 26 | 'channel': '202', 27 | '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', 28 | 'content-type': 'application/json', 29 | 'Accept-Encoding': 'gzip,compress,br,deflate', 30 | 'tenant': '1', 31 | 'Referer': 'https://servicewechat.com/wx22e5ce7c766b4b78/149/page-frame.html' 32 | }; 33 | 34 | try { 35 | const response = await axios.post(url, {}, { headers: headers }); 36 | if (response.data.code === 200 && response.data.message === 'success') { 37 | console.log(`账号${accountIndex}签到成功`); 38 | return { success: true, message: `账号${accountIndex}签到成功` }; 39 | } else { 40 | console.log(`账号${accountIndex}签到失败`); 41 | return { success: false, message: `账号${accountIndex},${response.data.message}` }; 42 | } 43 | } catch (error) { 44 | console.error(error); 45 | return { success: false, message: error.message }; 46 | } 47 | } 48 | 49 | dqdd.forEach((dqdd, index) => { 50 | fetchSignInfo(dqdd, index + 1).then(result => { 51 | console.log(result); 52 | }); 53 | }); -------------------------------------------------------------------------------- /dydd.py: -------------------------------------------------------------------------------- 1 | #环境变量 dydd 2 | #有问题联系3288588344 3 | #频道:https://pd.qq.com/s/672fku8ge 4 | import os 5 | import requests 6 | import time 7 | import hashlib 8 | # cron: 15 8,17 * * * 9 | # const $ = new Env("第一电动"); 10 | # 获取青龙面板环境变量 dydd 11 | dydd = os.environ.get('dydd', '') 12 | 13 | # 按换行符分割账号,并过滤空行 14 | accounts = [line.strip() for line in dydd.strip().split('\n') if line.strip()] 15 | 16 | url = "https://app2.d1ev.com/api/user/add-integral" 17 | 18 | # 公共参数 19 | params_base = { 20 | 'app_id': "d1ev_app", 21 | 'appName': "第一电动", 22 | 'os': "android", 23 | 'osVer': "9", 24 | 'vName': "2.5.6", 25 | 'vCode': "20506" 26 | } 27 | 28 | headers = { 29 | 'User-Agent': "Dalvik/2.1.0 (Linux; U; Android 9; PCRT00 Build/PQ3A.190605.06201646)", 30 | 'Connection': "Keep-Alive", 31 | 'Accept-Encoding': "gzip", 32 | 'TE': "gzip, deflate; q=0.5" 33 | } 34 | 35 | # 定义任务列表,每个任务包括任务类型和执行次数 36 | tasks = [ 37 | {'type': 11, 'name': '签到', 'count': 1}, 38 | {'type': 3, 'name': '分享', 'count': 3}, 39 | {'type': 5, 'name': '点赞', 'count': 5}, 40 | {'type': 2, 'name': '阅读', 'count': 1} 41 | ] 42 | 43 | for account in accounts: 44 | # 分割账号为 uid 和 token 45 | parts = account.split('#') 46 | if len(parts) != 2: 47 | print(f"跳过无效格式账号: {account}") 48 | continue 49 | 50 | uid, token = parts 51 | 52 | # 生成当前时间戳 53 | current_timestamp = str(int(time.time())) 54 | 55 | for task in tasks: 56 | task_type = task['type'] 57 | task_name = task['name'] 58 | task_count = task['count'] 59 | 60 | for _ in range(task_count): 61 | # 构造签名字符串 62 | sign_str = f"OMKCy2UxZwn8e4Ak{params_base['appName']}{params_base['app_id']}{params_base['os']}{params_base['osVer']}{current_timestamp}{token}{task_type}{uid}{params_base['vCode']}{params_base['vName']}" 63 | 64 | # 计算 MD5 签名 65 | sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest() 66 | 67 | # 定义带有动态值的参数 68 | params = { 69 | 'timestamp': current_timestamp, 70 | 'token': token, 71 | 'uid': uid, 72 | 'type': task_type, 73 | 'sign': sign.upper(), 74 | **params_base 75 | } 76 | 77 | try: 78 | # 发送 GET 请求 79 | response = requests.get(url, params=params, headers=headers) 80 | response.raise_for_status() # 如果请求失败,则抛出异常 81 | 82 | # 打印任务执行结果 83 | print(f"账号: {uid}, 任务: {task_name}, 响应: {response.text}") 84 | except requests.exceptions.RequestException as e: 85 | print(f"账号: {uid}, 任务: {task_name}, 请求失败: {e}") 86 | 87 | # 任务间隔5秒 88 | time.sleep(5) 89 | 90 | # 任务类型间隔10秒 91 | time.sleep(10) 92 | -------------------------------------------------------------------------------- /gjgj.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.09 12.40 5 | @Description: 古井贡酒会员中心小程序 6 | ------------------------------------------ 7 | 变量名 gujing 8 | 值 https://scrm.gujing.com/gujing_scrm/ 请求头Headers中的Access-Token的值 多账号&或换行或新建同名变量 9 | 10 | [Script] 11 | http-response 12 | 13 | [MITM] 14 | hostname = 15 | 16 | ⚠️【免责声明】 17 | ------------------------------------------ 18 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 19 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 20 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 21 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 22 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 23 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 24 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 25 | */ 26 | 27 | const $ = new Env("古井贡酒会员中心小程序"); 28 | let ckName = `gujing`; 29 | let userCookie = checkEnv( 30 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 31 | ); 32 | const notify = $.isNode() ? require("./sendNotify") : ""; 33 | 34 | !(async () => { 35 | console.log( 36 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 37 | new Date().getTime() + 38 | new Date().getTimezoneOffset() * 60 * 1000 + 39 | 8 * 60 * 60 * 1000 40 | ).toLocaleString()} \n==================================================` 41 | ); 42 | //console.log(userCookie) 43 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 44 | let index = 1; 45 | let strSplitor = "#"; 46 | 47 | for (let user of userCookie) { 48 | $.log(`\n🚀 user:【${index}】 start work\n`); 49 | index++ 50 | $.token = user 51 | $.ckStatus = true; 52 | await search() 53 | } 54 | 55 | await $.sendMsg($.logs.join("\n")); 56 | })() 57 | .catch((e) => console.log(e)) 58 | .finally(() => $.done()); 59 | async function search() { 60 | let data = JSON.stringify({ 61 | "activityId": "110001000", 62 | "preview": false 63 | }); 64 | 65 | let config = { 66 | method: 'POST', 67 | url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search', 68 | headers: { 69 | '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', 70 | 'Accept': 'application/json, text/plain, */*', 71 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', 72 | 'Content-Type': 'application/json;charset=UTF-8', 73 | 'sec-ch-ua-mobile': '?1', 74 | 'Access-Token': $.token, 75 | 'sec-ch-ua-platform': '"Android"', 76 | 'Origin': 'https://scrm.gujing.com', 77 | 'X-Requested-With': 'com.tencent.mm', 78 | 'Sec-Fetch-Site': 'same-origin', 79 | 'Sec-Fetch-Mode': 'cors', 80 | 'Sec-Fetch-Dest': 'empty', 81 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', 82 | 83 | }, 84 | data: data 85 | }; 86 | let { data: result } = await Request(config) 87 | if (result?.code == 200) { 88 | if (result.content.signed !== 1) { 89 | $.log(`未签到 ===> 签到ing`) 90 | await signIn() 91 | } else { 92 | $.log(`已签到 ===> 什么都不做`) 93 | } 94 | } else { 95 | $.log(`签到查询失败 [${JSON.stringify(result)}]`) 96 | } 97 | } 98 | async function signIn() { 99 | let data = JSON.stringify({ 100 | "activityId": "110001000", 101 | "preview": false 102 | }); 103 | 104 | let config = { 105 | method: 'POST', 106 | url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search', 107 | headers: { 108 | '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', 109 | 'Accept': 'application/json, text/plain, */*', 110 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', 111 | 'Content-Type': 'application/json;charset=UTF-8', 112 | 'sec-ch-ua-mobile': '?1', 113 | 'Access-Token': $.token, 114 | 'sec-ch-ua-platform': '"Android"', 115 | 'Origin': 'https://scrm.gujing.com', 116 | 'X-Requested-With': 'com.tencent.mm', 117 | 'Sec-Fetch-Site': 'same-origin', 118 | 'Sec-Fetch-Mode': 'cors', 119 | 'Sec-Fetch-Dest': 'empty', 120 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', 121 | }, 122 | data: data 123 | }; 124 | let { data: result } = await Request(config) 125 | if (result?.code == 200) { 126 | $.log(`签到成功 获得积分[${result.content.point}]`) 127 | } else { 128 | $.log(`签到失败 [${result.chnDesc}]`) 129 | } 130 | } 131 | 132 | function checkEnv(userCookie) { 133 | const envSplitor = ["&", "\n"]; 134 | //console.log(userCookie); 135 | let userList = userCookie 136 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 137 | .filter((n) => n); 138 | console.log(`共找到${userList.length}个账号`); 139 | return userList; 140 | } 141 | // prettier-ignore 142 | 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) } 143 | 144 | async function Request(options) { 145 | if ($.isNode()) { 146 | const axios = require("axios"); 147 | Request = async (options) => { 148 | try { 149 | return await axios.request(options); 150 | } catch (error) { 151 | return error && error.error ? error.error : "请求失败"; 152 | } 153 | }; 154 | } 155 | if ($.isQuanX()) { 156 | Request = async (options) => { 157 | try { 158 | return await $task.fetch(options); 159 | } catch (error) { 160 | return error && error.error ? error.error : "请求失败"; 161 | } 162 | }; 163 | } 164 | return await Request(options); 165 | } -------------------------------------------------------------------------------- /gobing_checkin.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/env python 2 | # -*-coding:utf-8 -*- 3 | # const $ = new Env("gobing签到"); 4 | # cron: 35 7,18 * * * 5 | import requests 6 | import json 7 | import os 8 | import time 9 | 10 | 11 | ''' 12 | 青龙 定义 13 | gobing_ck = [{ 14 | "account": "账号", 15 | "password": "密码" 16 | },{ 17 | "account": "账号", 18 | "password": "密码" 19 | }] 20 | ''' 21 | 22 | 23 | headers = { 24 | 'Content-Type': 'application/json', 25 | 'Host': 'api.gobing.cn', 26 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2102K1C Build/SKQ1.220306.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.5060.71 Mobile Safari/534.36 SearchCraft/3.9.2 (Baidu; P1 12) XiaoMi/MiuiBrowser/16.58.59 swan-mibrowser', 27 | } 28 | 29 | def get_token(ck): 30 | url = 'https://api.gobing.cn/v1/user/login' 31 | try: 32 | response = requests.post(url, headers=headers, data=json.dumps(ck)) 33 | response_data = response.json() 34 | token = response_data['data']['token'] 35 | if not token: 36 | print("未能获取到有效的 token") 37 | return 38 | headers['token'] = token 39 | sign_in() 40 | time.sleep(1) 41 | set_like_favorite() 42 | time.sleep(1) 43 | get_info() 44 | except Exception as e: 45 | print(f"Error: {e}") 46 | return None 47 | 48 | def sign_in(): 49 | url = 'https://api.gobing.cn/v1/signin/signin' 50 | try: 51 | response = requests.post(url, headers=headers) 52 | response_data = response.json() 53 | print(response_data['msg']) 54 | except Exception as e: 55 | print(f"Error: {e}") 56 | return 57 | 58 | def get_info(): 59 | url= 'https://api.gobing.cn/v1/user/getUserinfo' 60 | try: 61 | response = requests.get(url, headers=headers) 62 | response_data = response.json() 63 | coin = response_data['data']['info']['coin'] 64 | exp = response_data['data']['info']['exp'] 65 | print(f'当前经验:{exp},Go币:{coin}') 66 | except Exception as e: 67 | print(f"Error: {e}") 68 | return 69 | def set_like_favorite(): 70 | print('正在执行喜欢和收藏:') 71 | tasklist=[5, 4, 3, 35, 31, 29, 24, 26, 21, 34, 23, 33, 27, 25, 22, 30, 28, 36, 32, 39] 72 | for num in tasklist: 73 | print(f"正在执行【{num}】喜欢与收藏") 74 | url = f"https://www.gobing.cn/disassemble/detail/{num}" 75 | response = requests.get(url, headers=headers) 76 | url_1 = "https://api.gobing.cn/v1/disassemble/like" 77 | url_2='https://api.gobing.cn/v1/disassemble/favorite' 78 | data = { 79 | "ids":str(num) 80 | } 81 | response = requests.post(url_1, headers=headers, json=data) 82 | response = requests.post(url_2, headers=headers, data=data) 83 | time.sleep(5) 84 | 85 | 86 | ckList = os.getenv("gobing_ck") 87 | ckList = json.loads(ckList) 88 | print(f"共找到{len(ckList)}个账号") 89 | print('*' * 50) 90 | for i in ckList: 91 | print('*' * 30) 92 | print(f'开始执行{i["account"]}') 93 | get_token(i) 94 | time.sleep(10) -------------------------------------------------------------------------------- /hqcsh-get.js: -------------------------------------------------------------------------------- 1 | // cron: 40 59 17 * * * 2 | const axios = require('axios') 3 | const fetch = require('node-fetch'); 4 | const https = require('https'); 5 | const url = require('url'); 6 | const {sendNotify} = require('./sendNotify.js') 7 | const { 8 | sleep,getCurrDay,checkTime,Env 9 | } = require('./utils.js') 10 | const $ = new Env('好奇车抢红包') 11 | const userInfoList = $.getEnvKey('hqcshck').split('\n') 12 | if(!userInfoList.length||userInfoList[0]===''){ 13 | throw new Error('未找到ck') 14 | } 15 | console.log(`获取到${userInfoList.length}个ck`); 16 | let getTaskListStr = '' 17 | const header = { 18 | 'Host': 'channel.cheryfs.cn', 19 | 'Connection': 'keep-alive', 20 | 'geolocation': '', 21 | 'wxappid': '619669369294712832', 22 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; Mi14 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20230701 MMWEBID/8701 MicroMessenger/8.0.40.2420(0x28002858) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx1ddeb67115f30d1a', 23 | 'tenantId': '619669306447261696', 24 | 'activityId': '621950054462152705', 25 | 'requestUrl': 'https://channel.cheryfs.cn/archer/act/619669306447261696/619669369294712832/activity/pointsmall-detail/621950054462152705/npSrn1cIT5AkSaSz?pageId=page1607309582231&num=1&cardId=850530474589614080&anchorId=&anchorAnimateType=', 26 | 'Accept': 'application/json, text/plain, */*', 27 | 'channelCode': '', 28 | 'timestamp': '1733390591069', 29 | 'assemblyName': '%E7%A7%AF%E5%88%86%E5%95%86%E5%9F%8E%E5%85%91%E6%8D%A22', 30 | 'sign': '4a743f750023cfa3a0348368e512ace9', 31 | 'accountId': '', 32 | 'Sec-Fetch-Site': 'same-origin', 33 | 'Sec-Fetch-Mode': 'cors', 34 | 'Sec-Fetch-Dest': 'empty', 35 | 'Referer': 'https://channel.cheryfs.cn/archer/act/619669306447261696/619669369294712832/activity/pointsmall-detail/621950054462152705/npSrn1cIT5AkSaSz?pageId=page1607309582231&num=1&cardId=850530474589614080&anchorId=&anchorAnimateType=', 36 | 'Accept-Encoding': 'gzip, deflate, br', 37 | 'Accept-Language': 'zh-CN,zh;q=0.9', 38 | 'Cookie': 'uid-619669306447261696-619669369294712832=e096cb713417e83295bd965dc4e493feadf9f0cca066368bb53d2b111b1fa8e2' 39 | } 40 | const api = { 41 | 42 | receiveActiveTask: (ck,taskId) => { 43 | return new Promise(async res=>{ 44 | const response = await axios({ 45 | url: `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`, 46 | method: 'get', 47 | headers:{ 48 | ...header, 49 | 'accountId':ck 50 | }, 51 | }) 52 | console.log("") 53 | res(JSON.stringify(response.data)) 54 | }) 55 | }, 56 | receiveActiveTaskFetch: (ck,taskId) => { 57 | return new Promise(async res=>{ 58 | const response = await fetch( 59 | `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`, 60 | { 61 | method: "GET", 62 | headers: { 63 | ...header, 64 | 'accountId':ck 65 | }, 66 | } 67 | ) 68 | const data = await response.json() 69 | console.log('task fetch',JSON.stringify(data)); 70 | console.log("") 71 | res(JSON.stringify(data)) 72 | }) 73 | }, 74 | receiveActiveTaskGot: (ck,taskId) => { 75 | return new Promise(async res=>{ 76 | const gots = (await import('got'))?.default 77 | const response = await gots( 78 | `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`, 79 | { 80 | method: "GET", 81 | headers: { 82 | ...header, 83 | 'accountId':ck 84 | }, 85 | } 86 | ) 87 | console.log('task got',response.body); 88 | console.log("") 89 | res(response.body) 90 | }) 91 | }, 92 | // receiveActiveTaskHttp: (ck,taskId) => { 93 | // // 假设这是你要请求的URL 94 | // const urlString = `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=` 95 | // return httpInstance({ 96 | // parsedUrl:url.parse(urlString), 97 | // headers: { 98 | // ...header, 99 | // 'accountId':ck 100 | // }, 101 | // }) 102 | // } 103 | } 104 | 105 | 106 | const getReceiveActiveTask = async({ck,taskId})=>{ 107 | try{ 108 | 109 | console.log(`请求时间:`,getCurrDay()); 110 | return api.receiveActiveTask(ck,taskId) 111 | // api.receiveActiveTaskGot(ck,taskId) 112 | // return api.receiveActiveTaskFetch(ck,taskId) 113 | // return api.receiveActiveTaskHttp(ck,taskId) 114 | }catch(e){ 115 | console.log('任务领取失败',e.toString()||e); 116 | return getReceiveActiveTask({ck,taskId}) 117 | } 118 | } 119 | 120 | 121 | const q1 = '792556957722198016' // 1800积分 京东E卡18 元① 122 | const q2 = '850529542367801344' // 174积分 奇瑞微信红包1元 123 | const q3 = '850530051048796161' // 522积分 奇瑞微信红包3元 124 | const q4 = '850530474589614080' // 870积分 奇瑞微信红包5元 125 | async function concurrentPromises(promiseFunction,args, count,timeout = 0) { 126 | for (let i = 0; i < count; i++) { 127 | if(timeout){ 128 | await sleep(timeout) 129 | } 130 | promiseFunction(args).then(res=>{ 131 | console.log(res) 132 | getTaskListStr+=('
'+res) 133 | }).catch(e=>{ 134 | console.error('任务并发错误:',e.toString()); 135 | promiseFunction(args).then(res=>{ 136 | getTaskListStr+=('
'+res) 137 | }).catch(e=>{ 138 | console.error('任务二次并发错误:', e.toString()); 139 | }) 140 | }) 141 | } 142 | 143 | } 144 | const processTokens = async () => { 145 | for (const user of userInfoList) { 146 | checkTime({ 147 | seconds:45, 148 | milliseconds:0 149 | }).then(res=>{ 150 | concurrentPromises(getReceiveActiveTask,{ck:user,taskId:q4},170,100) 151 | }) 152 | } 153 | }; 154 | (async()=>{ 155 | await processTokens() 156 | await sleep(1000*60*2) 157 | sendNotify('好奇车领取结果',getTaskListStr) 158 | })() -------------------------------------------------------------------------------- /hqcsh.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | time:2023.4.26 4 | cron: 0 9,18 * * * 5 | new Env('好奇车生活签到'); 6 | 微信小程序-好奇车生活-好物兑换 7 | 抓包域名: https://channel.cheryfs.cn/ 8 | 抓包请求头里面: accountId 的值 9 | 环境变量名称:hqcshck = accountId 的值 10 | 多账号新建变量或者用 换行 分开 11 | 12 | """ 13 | 14 | import time 15 | import requests 16 | from os import environ, path 17 | 18 | def get_environ(key, default="", output=True): 19 | def no_read(): 20 | if output: 21 | print(f"未填写环境变量 {key} 请添加") 22 | exit(0) 23 | return default 24 | 25 | return environ.get(key) if environ.get(key) else no_read() 26 | 27 | 28 | class Hqcsh(): 29 | def __init__(self, ck): 30 | self.msg = '' 31 | self.ck = ck 32 | self.ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/6763' 33 | self.tid = '619669306447261696' 34 | 35 | def sign(self): 36 | time.sleep(0.5) 37 | sign_url = "https://channel.cheryfs.cn/archer/activity-api/signinact/signin" 38 | jf_url = 'https://channel.cheryfs.cn/archer/activity-api/common/accountPointLeft?pointId=620415610219683840' 39 | q_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=' + qiang + '&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=188&exchangeNeedMoney=0&cardGoodsItemIds=' 40 | sign_headers = { 41 | 'User-Agent': self.ua, 42 | 'tenantId': self.tid, 43 | 'activityId': '620810406813786113', 44 | 'accountId': self.ck, 45 | } 46 | 47 | jf_headers = { 48 | 'User-Agent': self.ua, 49 | 'tenantId': self.tid, 50 | 'activityId': '621911913692942337', 51 | 'accountId': self.ck, 52 | } 53 | q_headers = { 54 | 'User-Agent': self.ua, 55 | 'tenantId': self.tid, 56 | 'activityId': '621950054462152705', 57 | 'accountId': self.ck, 58 | } 59 | try: 60 | sign_rsp = requests.get(sign_url, headers=sign_headers) 61 | time.sleep(0.5) 62 | jf_rsp = requests.get(jf_url, headers=jf_headers) 63 | time.sleep(0.5) 64 | q_rsp = requests.get(q_url, headers=q_headers) 65 | 66 | if sign_rsp.json()['success'] == True: 67 | if sign_rsp.json()['result']['success'] == True: 68 | if q_rsp.json()['success'] == False: 69 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:当前不在抢包时间段,请在18-22点运行\n\n" 70 | print(xx) 71 | self.msg += xx 72 | elif q_rsp.json()['result']['success'] == True: 73 | time.sleep(0.5) 74 | qr_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCardResult?resultKey=' + \ 75 | q_rsp.json()['result']['id'] 76 | qr_rsp = requests.get(qr_url, headers=q_headers) 77 | if qr_rsp.json()['result']['errMsg'] == '成功': 78 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']},前往个人中心-我的礼包查看!\n\n" 79 | print(xx) 80 | self.msg += xx 81 | else: 82 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']}\n\n" 83 | print(xx) 84 | self.msg += xx 85 | elif q_rsp.json()['result']['success'] == False: 86 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{q_rsp.json()['result']['errMsg']}\n\n" 87 | print(xx) 88 | self.msg += xx 89 | elif sign_rsp.json()['result']['success'] == False: 90 | if q_rsp.json()['success'] == False: 91 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:当前不在抢包时间段,请在18-22点运行\n\n" 92 | print(xx) 93 | self.msg += xx 94 | elif q_rsp.json()['result']['success'] == True: 95 | time.sleep(0.5) 96 | qr_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCardResult?resultKey=' + \ 97 | q_rsp.json()['result']['id'] 98 | qr_rsp = requests.get(qr_url, headers=q_headers) 99 | if qr_rsp.json()['result']['errMsg'] == '成功': 100 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']},前往个人中心-我的礼包查看!\n\n" 101 | print(xx) 102 | self.msg += xx 103 | else: 104 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']}\n\n" 105 | print(xx) 106 | self.msg += xx 107 | elif q_rsp.json()['result']['success'] == False: 108 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{q_rsp.json()['result']['errMsg']}\n\n" 109 | print(xx) 110 | self.msg += xx 111 | elif sign_rsp.json()['success'] == False: 112 | xx = f"[登录]:账号{a}登录失败,请稍后重试或者ck可能失效,当前ck:{self.ck}\n\n" 113 | print(xx) 114 | self.msg += xx 115 | else: 116 | xx = f"[登录]:账号{a}登录失败,请稍后重试或者ck可能失效,当前ck:{self.ck}\n\n" 117 | print(xx) 118 | self.msg += xx 119 | return self.msg 120 | return self.msg 121 | except Exception as e: 122 | xx = f"[请求异常]:稍后再试\n{e}\n\n" 123 | print(xx) 124 | self.msg += xx 125 | return self.msg 126 | 127 | def get_sign_msg(self): 128 | return self.sign() 129 | 130 | 131 | if __name__ == '__main__': 132 | q1 = '792556957722198016' # 1800积分 京东E卡18 元① 133 | q2 = '850529542367801344' # 174积分 奇瑞微信红包1元 134 | q3 = '850530051048796161' # 522积分 奇瑞微信红包3元 135 | q4 = '850530474589614080' # 870积分 奇瑞微信红包5元 136 | qiang = q4 137 | print('\n默认设置自动抢188积分1.08元的包\n需要设置到脚本底部修改 qiang = xxx\nxxx为q1-q4对应的包\n注:抢包没有做循环,只提交一次可能会失败,可以在18点之后定时重复运行几次\n') 138 | token = get_environ("hqcshck") 139 | msg = '' 140 | cks = token.split("\n") 141 | print("检测到{}个ck记录\n开始Hqcsh签到\n".format(len(cks))) 142 | a = 0 143 | for ck in cks: 144 | a += 1 145 | run = Hqcsh(ck) 146 | msg += run.get_sign_msg() 147 | -------------------------------------------------------------------------------- /huanlejia.js: -------------------------------------------------------------------------------- 1 | // cron: 16 7,18 * * * 2 | // 抓data中sid YZxxx 和 url中的access_token 用&拼起来 多账号换行 3 | // export huanlejia="YZxxx&770f5xxxx 4 | // 770f5xxxx" 5 | const { 6 | getCurrDay,checkTime,Env,random 7 | } = require('./utils.js') 8 | const {sendNotify} = require('./sendNotify.js') 9 | const $ = new Env("欢乐家签到"); 10 | const axios = require('axios') 11 | const userInfoList = $.getEnvKey('huanlejia').split('\n') 12 | if(!userInfoList.length||userInfoList[0]===''){ 13 | throw new Error('未找到ck') 14 | } 15 | console.log(`获取到${userInfoList.length}个ck`); 16 | 17 | const baseUrl = 'https://h5.youzan.com' 18 | const headers = { 19 | 'Host': 'h5.youzan.com', 20 | 'Connection': 'keep-alive', 21 | 'xweb_xhr': 1, 22 | 'Extra-Data': '', 23 | '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(0x63090a13) XWEB/9129', 24 | 'Content-Type': 'application/json', 25 | 'Accept': '*/*', 26 | 'Sec-Fetch-Site': 'cross-site', 27 | 'Sec-Fetch-Mode': 'cors', 28 | 'Sec-Fetch-Dest': 'empty', 29 | 'Referer': 'https://servicewechat.com/wx5508c9ab0d2118ff/62/page-frame.html', 30 | 'Accept-Encoding': 'gzip, deflate, br', 31 | 'Accept-Language': 'zh-CN,zh;q=0.9', 32 | 33 | } 34 | const url = { 35 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=4435617&app_id=wxf739eb6ad6a644da&kdt_id=146384563&access_token=', 36 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=4435617&app_id=wxf739eb6ad6a644da&kdt_id=146384563&access_token=', 37 | 'userInfo':'/wscaccount/api/authorize/data.json?app_id=wxf739eb6ad6a644da&kdt_id=146384563&appId=wxf739eb6ad6a644da&access_token=' 38 | } 39 | const api = { 40 | checkin: ({data,token}) => { 41 | return axios({ 42 | url: baseUrl+url.checkin+token, 43 | method: 'get', 44 | headers:{ 45 | ...headers, 46 | "Extra-Data":JSON.stringify(data) 47 | }, 48 | }) 49 | }, 50 | userInfo: ({data,token}) => { 51 | return axios({ 52 | url: baseUrl+url.userInfo+token, 53 | method: 'get', 54 | headers:{ 55 | ...headers, 56 | "Extra-Data":JSON.stringify(data) 57 | }, 58 | }) 59 | }, 60 | getCountDay: ({data,token}) => { 61 | return axios({ 62 | url: baseUrl+url.getCountDay+token, 63 | method: 'get', 64 | headers:{ 65 | ...headers, 66 | "Extra-Data":JSON.stringify(data) 67 | }, 68 | }) 69 | }, 70 | } 71 | 72 | const processTokens = async () => { 73 | let index = 0 74 | const randomTime = random(1, 300) 75 | console.log('随机延迟:',randomTime + '秒'); 76 | await $.wait(randomTime*1000) 77 | for (const token of userInfoList) { 78 | try { 79 | $.log('') 80 | index++ 81 | const userData = token.split('&') 82 | const headerData = {"sid":userData[0],"version":"2.173.6","clientType":"weapp-miniprogram","client":"weapp","bizEnv":"","uuid":"8yOO5yc0SSVXaG31717484999225","ftime":new Date().getTime()} 83 | const headerParams = { 84 | data:headerData, 85 | token:userData[1] 86 | } 87 | const data = await api.userInfo(headerParams) 88 | const {mobile} = data?.data?.data?.userInfo 89 | if(!mobile){ 90 | $.log(`账号【${index}】登录失效`) 91 | $.log('') 92 | continue; 93 | } 94 | $.log(`账号【${index}】 当前用户:${mobile}`); 95 | await $.wait(2000) 96 | const {data:{msg}} = await api.checkin(headerParams) 97 | $.log(`账号【${index}】 签到信息:${msg}`); 98 | await $.wait(2000) 99 | const {data:{data:{continuesDay}}} = await api.getCountDay(headerParams) 100 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`); 101 | await $.wait(3500) 102 | } catch (error) { 103 | $.logErr(error.toString()); 104 | } 105 | } 106 | $.log('') 107 | await sendNotify('欢乐家签到', $.logs.join('
')) 108 | $.done() 109 | }; 110 | 111 | processTokens() -------------------------------------------------------------------------------- /hxrk.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # cron "25 8,17 * * *" script-path=xxx.py,tag=匹配cron用 5 | # const $ = new Env('鸿星尔克官方会员中心小程序') 6 | 7 | import os 8 | import random 9 | import time 10 | from datetime import datetime, time as times 11 | import requests 12 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 13 | 14 | # import CHERWIN_TOOLS 15 | # 禁用安全请求警告 16 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 17 | # 18 | IS_DEV = False 19 | if os.path.isfile('DEV_ENV.py'): 20 | import DEV_ENV 21 | 22 | IS_DEV = True 23 | if os.path.isfile('notify.py'): 24 | from notify import send 25 | 26 | print("加载通知服务成功!") 27 | else: 28 | print("加载通知服务失败!") 29 | send_msg = '' 30 | one_msg = '' 31 | 32 | 33 | def Log(cont=''): 34 | global send_msg, one_msg 35 | print(cont) 36 | if cont: 37 | one_msg += f'{cont}\n' 38 | send_msg += f'{cont}\n' 39 | 40 | 41 | class RUN: 42 | def __init__(self, info, index): 43 | global one_msg 44 | one_msg = '' 45 | # memberId @ enterpriseId @ unionid @ openid @ wxOpenid 46 | split_info = info.split('@') 47 | len_split_info = len(split_info) 48 | if len_split_info < 2: 49 | print('变量长度不足,请检查变量') 50 | return False 51 | self.memberId = split_info[0] 52 | self.enterpriseId = split_info[1] 53 | # print(self.token) 54 | 55 | last_info = split_info[len_split_info - 1] 56 | self.send_UID = None 57 | if len_split_info > 0 and "UID_" in last_info: 58 | print('检测到设置了UID') 59 | print(last_info) 60 | self.send_UID = last_info 61 | self.index = index + 1 62 | self.s = requests.session() 63 | self.s.verify = False 64 | self.headers = { 65 | 'Host': 'hope.demogic.com', 66 | 'xweb_xhr': '1', 67 | 'channelEntrance': 'wx_app', 68 | '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(0x63090a13) XWEB/9129', 69 | 'sign': self.enterpriseId, 70 | 'Accept': '*/*', 71 | 'Sec-Fetch-Site': 'cross-site', 72 | 'Sec-Fetch-Mode': 'cors', 73 | 'Sec-Fetch-Dest': 'empty', 74 | 'Referer': 'https://servicewechat.com/wxa1f1fa3785a47c7d/55/page-frame.html', 75 | 'Accept-Language': 'zh-CN,zh;q=0.9', 76 | 'Content-Type': 'application/x-www-form-urlencoded', 77 | } 78 | self.appid = 'wxa1f1fa3785a47c7d' 79 | self.defualt_parmas = { 80 | 'memberId': self.memberId, 81 | 'cliqueId': '-1', 82 | 'cliqueMemberId': '-1', 83 | 'useClique': '0', 84 | 'enterpriseId': self.enterpriseId, 85 | 'appid': self.appid, 86 | 'gicWxaVersion': '3.9.16' 87 | } 88 | self.baseUrl = 'https://hope.demogic.com/gic-wx-app/' 89 | self.use_power_max = False 90 | 91 | def make_request(self, url, method='post', headers={}, data={}, params=None): 92 | if headers == {}: 93 | headers = self.headers 94 | try: 95 | if method.lower() == 'get': 96 | response = self.s.get(url, headers=headers, verify=False, params=params) 97 | elif method.lower() == 'post': 98 | response = self.s.post(url, headers=headers, json=data, params=params, verify=False) 99 | else: 100 | raise ValueError("不支持的请求方法❌: " + method) 101 | return response.json() 102 | except requests.exceptions.RequestException as e: 103 | print("请求异常❌:", e) 104 | except ValueError as e: 105 | print("值错误或不支持的请求方法❌:", e) 106 | except Exception as e: 107 | print("发生了未知错误❌:", e) 108 | 109 | def gen_sign(self): 110 | sign, random_int, timestamp = CHERWIN_TOOLS.HXEK_SIGN(self.memberId,self.appid) 111 | self.defualt_parmas['random'] = random_int 112 | self.defualt_parmas['sign'] = sign 113 | self.defualt_parmas['timestamp'] = timestamp 114 | self.defualt_parmas['transId'] = self.appid+timestamp 115 | 116 | def get_member_grade_privileg(self): 117 | act_name = '获取用户信息' 118 | Log(f'\n====== {act_name} ======') 119 | self.gen_sign() 120 | self.defualt_parmas['launchOptions'] = '{"path":"pages/points-mall/member-task/member-task","query":{},"scene":1256,"referrerInfo":{},"apiCategory":"default"}' 121 | 122 | url = f"{self.baseUrl}get_member_grade_privileg.json" 123 | response = self.make_request(url,'post',params=self.defualt_parmas) 124 | if response.get('errcode', -1) == 0: 125 | data = response.get('response', {}) 126 | member = data.get('member', {}) 127 | if member: 128 | phoneNumber = member.get('phoneNumber', '') 129 | phone = phoneNumber[:4]+'***'+phoneNumber[-4:] 130 | wxOpenid = member.get('openId', '') 131 | unionid = member.get('thirdUnionid', '') 132 | self.defualt_parmas['wxOpenid'] = wxOpenid 133 | self.defualt_parmas['unionid'] = unionid 134 | Log(f'{act_name}成功!✅') 135 | Log(f'> 当前用户:【{phone}】') 136 | return True 137 | elif response.get('errcode', -1) == 900001: 138 | Log(f'> 今天已签到✅') 139 | return False 140 | else: 141 | print(f'{act_name}失败❌:{response}') 142 | return False 143 | 144 | def member_sign(self): 145 | act_name = '签到' 146 | Log(f'\n====== {act_name} ======') 147 | self.gen_sign() 148 | self.defualt_parmas['launchOptions'] = '{"path":"pages/points-mall/member-task/member-task","query":{},"scene":1256,"referrerInfo":{},"apiCategory":"default"}' 149 | 150 | url = f"{self.baseUrl}member_sign.json" 151 | response = self.make_request(url,'post',params=self.defualt_parmas) 152 | if response.get('errcode', -1) == 0: 153 | res = response.get('response', {}) 154 | memberSign = res.get('memberSign', {}) 155 | integralCount = memberSign.get('integralCount', '') 156 | continuousCount = memberSign.get('continuousCount', '') 157 | points = res.get('points', '') 158 | Log(f'{act_name}成功!✅') 159 | Log(f'> 当前积分:【{points}】 连续签到:【{continuousCount}】天') 160 | return True 161 | elif response.get('errcode', -1) == 900001: 162 | Log(f'> 今天已签到✅') 163 | return False 164 | else: 165 | print(f'{act_name}失败❌:{response}') 166 | return False 167 | 168 | def main(self): 169 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>") 170 | if self.get_member_grade_privileg(): 171 | # random_delay() 172 | self.member_sign() 173 | self.sendMsg() 174 | return True 175 | else: 176 | self.sendMsg() 177 | return False 178 | 179 | def sendMsg(self): 180 | if self.send_UID: 181 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME) 182 | print(push_res) 183 | 184 | 185 | def random_delay(min_delay=1, max_delay=5): 186 | """ 187 | 在min_delay和max_delay之间产生一个随机的延时时间,然后暂停执行。 188 | 参数: 189 | min_delay (int/float): 最小延时时间(秒) 190 | max_delay (int/float): 最大延时时间(秒) 191 | """ 192 | delay = random.uniform(min_delay, max_delay) 193 | print(f">本次随机延迟: {delay:.2f} 秒.....") 194 | time.sleep(delay) 195 | 196 | 197 | def down_file(filename, file_url): 198 | print(f'开始下载:{filename},下载地址:{file_url}') 199 | try: 200 | response = requests.get(file_url, verify=False, timeout=10) 201 | response.raise_for_status() 202 | with open(filename + '.tmp', 'wb') as f: 203 | f.write(response.content) 204 | print(f'【{filename}】下载完成!') 205 | 206 | # 检查临时文件是否存在 207 | temp_filename = filename + '.tmp' 208 | if os.path.exists(temp_filename): 209 | # 删除原有文件 210 | if os.path.exists(filename): 211 | os.remove(filename) 212 | # 重命名临时文件 213 | os.rename(temp_filename, filename) 214 | print(f'【{filename}】重命名成功!') 215 | return True 216 | else: 217 | print(f'【{filename}】临时文件不存在!') 218 | return False 219 | except Exception as e: 220 | print(f'【{filename}】下载失败:{str(e)}') 221 | return False 222 | 223 | 224 | def import_Tools(): 225 | global CHERWIN_TOOLS, ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode 226 | import CHERWIN_TOOLS 227 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME, 228 | local_version) 229 | 230 | 231 | if __name__ == '__main__': 232 | APP_NAME = '鸿星尔克官方会员中心小程序' 233 | ENV_NAME = 'hxrk' 234 | CK_URL = 'hope.demogic.com请求头' 235 | CK_NAME = 'memberId@enterpriseId' 236 | CK_EX = 'ff80808xxxxxxxx@ff8080817xxxxxxx' 237 | print(f''' 238 | ✨✨✨ {APP_NAME}签到✨✨✨ 239 | ✨ 功能: 240 | 积分签到 241 | ✨ 抓包步骤: 242 | 打开{APP_NAME} 243 | 授权登陆 244 | 打开抓包工具 245 | 找{CK_URL}{CK_NAME} 246 | 参数示例:{CK_EX} 247 | ✨ ✨✨wxpusher一对一推送功能, 248 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送 249 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID 250 | ✨ 设置青龙变量: 251 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割 252 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启 253 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包 254 | ✨ 推荐cron:5 11 * * * 255 | ✨✨✨ @Author CHERWIN✨✨✨ 256 | ''') 257 | local_script_name = os.path.basename(__file__) 258 | local_version = '2024.06.01' 259 | if IS_DEV: 260 | import_Tools() 261 | else: 262 | if os.path.isfile('CHERWIN_TOOLS.py'): 263 | import_Tools() 264 | else: 265 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'): 266 | print('脚本依赖下载完成请重新运行脚本') 267 | import_Tools() 268 | else: 269 | print( 270 | '脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖') 271 | exit() 272 | print(TIPS) 273 | token = '' 274 | token = ENV if ENV else token 275 | if not token: 276 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''") 277 | exit() 278 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token) 279 | # print(tokens) 280 | if len(tokens) > 0: 281 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") 282 | access_token = [] 283 | for index, infos in enumerate(tokens): 284 | run_result = RUN(infos, index).main() 285 | if not run_result: continue 286 | if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML) -------------------------------------------------------------------------------- /hz.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: sm 4 | @Date: 2024.06.08 13.38 5 | @Description: 媓钻 小程序 赛龙舟活动 每天抽奖2-3次 6 | ------------------------------------------ 7 | 变量名huangzuan_WX 8 | 变量值https://api.hzyxhfp.com/api/ 请求头Headers中authorization的值 去掉Bearer 多账号&或换行或新建同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("媓钻小程序"); 27 | let ckName = `huangzuan_WX`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 0; 44 | //let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`); 48 | $.token = user 49 | $.ckStatus = false; 50 | await signIn() 51 | for (let i = 0; i < 2; i++) { 52 | await play() 53 | await $.wait(5000) 54 | 55 | if ($.ckStatus) { 56 | await lottery() 57 | 58 | } 59 | } 60 | 61 | } 62 | 63 | await $.sendMsg($.logs.join("\n")); 64 | })() 65 | .catch((e) => console.log(e)) 66 | .finally(() => $.done()); 67 | //取150-200随机数 68 | function getRandomInt(min, max) { 69 | min = Math.ceil(min); 70 | max = Math.floor(max); 71 | return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值 72 | } 73 | async function signIn() { 74 | 75 | let data = JSON.stringify({}); 76 | 77 | let config = { 78 | method: 'POST', 79 | url: 'https://api.hzyxhfp.com/api/signInLog/addSignIn', 80 | headers: { 81 | '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', 82 | 'Accept-Encoding': 'gzip,compress,br,deflate', 83 | 'app': 'wx3df7476c42cace5d', 84 | 'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5oenl4aGZwLmNvbS9hcGkveWZtR2V0QXV0aFVzZXIiLCJpYXQiOjE3MTc4MjQ4NzMsImV4cCI6MjMxNzgyNDgxMywibmJmIjoxNzE3ODI0ODczLCJqdGkiOiJxdWRGcUlLaHRxWUd3Y0dIIiwic3ViIjozMDIwMTk5LCJwcnYiOiJjNzdlYWJjNmQyOWRiY2UwYjU1ZTk4YmRlYzM5MWI1NDlhNWVmMWYwIn0.0akWVLgE0Bd8_a-EOIQiC8dB_xiiOc2Y40xIVQnBRkU', 85 | 'charset': 'utf-8', 86 | 'content-type': 'application/json;charset=UTF-8', 87 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' 88 | }, 89 | data: data 90 | }; 91 | let { data: result } = await Request(config) 92 | result?.code == 0 ? ($.log(`签到成功 已签到[${result.data.cont_days}]天`)) : ($.log(`签到失败`), console.log(JSON.stringify(result))) 93 | 94 | } 95 | async function play() { 96 | let data = JSON.stringify({ 97 | "id": "1", 98 | "score": getRandomInt(150, 200) 99 | }); 100 | 101 | let config = { 102 | method: 'POST', 103 | url: 'https://api.hzyxhfp.com/api/dragonActivity/addDragonScore', 104 | headers: { 105 | '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', 106 | 'Accept-Encoding': 'gzip,compress,br,deflate', 107 | 'app': 'wx3df7476c42cace5d', 108 | 'authorization': 'Bearer ' + $.token, 109 | 'charset': 'utf-8', 110 | 'content-type': 'application/json;charset=UTF-8', 111 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' 112 | }, 113 | data: data 114 | }; 115 | let { data: result } = await Request(config) 116 | result?.code == 0 ? ($.log(`游戏成功`), $.ckStatus = true) : ($.log(`游戏失败`), console.log(JSON.stringify(result))) 117 | } 118 | async function lottery() { 119 | let data = JSON.stringify({ 120 | "id": "1" 121 | }); 122 | 123 | let config = { 124 | method: 'POST', 125 | url: 'https://api.hzyxhfp.com/api/dragonActivity/getDragonPrizeResult', 126 | headers: { 127 | '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', 128 | 'Accept-Encoding': 'gzip,compress,br,deflate', 129 | 'app': 'wx3df7476c42cace5d', 130 | 'authorization': 'Bearer ' + $.token, 131 | 'charset': 'utf-8', 132 | 'content-type': 'application/json;charset=UTF-8', 133 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' 134 | }, 135 | data: data 136 | }; 137 | let { data: result } = await Request(config) 138 | result?.code == 0 ? $.log(`抽奖[${result.data.title}]`) : ($.log(`抽奖失败`), console.log(JSON.stringify(result))) 139 | } 140 | 141 | function checkEnv(userCookie) { 142 | const envSplitor = ["&", "\n"]; 143 | console.log(userCookie); 144 | let userList = userCookie 145 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 146 | .filter((n) => n); 147 | console.log(`共找到${userList.length}个账号`); 148 | return userList; 149 | } 150 | // prettier-ignore 151 | 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) } 152 | 153 | async function Request(options) { 154 | if ($.isNode()) { 155 | const axios = require("axios"); 156 | Request = async (options) => { 157 | try { 158 | return await axios.request(options); 159 | } catch (error) { 160 | throw error && error.error ? error.error : "请求失败"; 161 | } 162 | }; 163 | } 164 | if ($.isQuanX()) { 165 | Request = async (options) => { 166 | try { 167 | return await $task.fetch(options); 168 | } catch (error) { 169 | throw error && error.error ? error.error : "请求失败"; 170 | } 171 | }; 172 | } 173 | return await Request(options); 174 | } -------------------------------------------------------------------------------- /jdc.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # @Time : 2023/6/30 10:23 4 | # ------------------------------- 5 | # const $ = new Env("京东代挂网签到"); 6 | import json,requests,os,time,copy,random 7 | from datetime import datetime, timedelta 8 | 9 | random_number = random.randint(1, 6*60*60) 10 | # 获取当前时间 11 | current_time = datetime.now() 12 | # 使用 timedelta 对象来增加秒数 13 | new_time = current_time + timedelta(seconds=random_number) 14 | # 格式化新时间 15 | formatted_new_time = new_time.strftime("%Y-%m-%d %H:%M:%S") 16 | 17 | 18 | userList = [ 19 | {"username":"xxx","password":"xxx"} 20 | ] 21 | # 初始化重连次数字典 22 | reconnect_counts = {} 23 | 24 | # 根据用户列表初始化重连次数字典 25 | for user in userList: 26 | username = user["username"] 27 | reconnect_counts[username] = { 28 | "login_count": 0, 29 | "signin_count": 0, 30 | "query_count": 0 31 | } 32 | 33 | reqHeaders = { 34 | "Accept":"*/*", 35 | "Accept-Encoding":"gzip, deflate", 36 | "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8", 37 | "Content-Length":'41', 38 | "Content-Type":"application/json;charset=UTF-8", 39 | "Host":"dl2.jdmk.xyz:1170", 40 | "Origin":"http://dl2.jdmk.xyz:1170", 41 | "Proxy-Connection":"keep-alive", 42 | "Referer":"http://dl2.jdmk.xyz:1170/", 43 | "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", 44 | "X-Requested-With":"XMLHttpRequest" 45 | } 46 | 47 | #签到 48 | def signin(username): 49 | global reqHeaders 50 | session =requests.session () 51 | try: 52 | response =session.get(f'http://dl2.jdmk.xyz:1170/user/signin/{username}',headers = reqHeaders,timeout=3) 53 | if(json.loads(response.text)['code'])==0: 54 | print(f"签到成功 获得 {json.loads(response.text)['data']} 个积分") 55 | query(username) 56 | else: 57 | if(json.loads(response.text)['code'])==-1: 58 | print(json.loads(response.text)['msg']) 59 | else: 60 | print(f"签到失败,响应信息:{response.text}") 61 | except Exception as e: 62 | print(f"签到失败,响应信息:{response.text}") 63 | print('正在重新签到...') 64 | if(reconnect_counts[username]["signin_count"] < 3): 65 | signin(username) 66 | reconnect_counts[username]["signin_count"] += 1 67 | 68 | #查询总积分 69 | def query(username): 70 | global reqHeaders 71 | session =requests.session () 72 | try: 73 | response =session .get (f'http://dl2.jdmk.xyz:1170/user/getUserInfo?username={username}',headers = reqHeaders,timeout=3) 74 | if(json.loads(response.text)['code']==0): 75 | print(f"当前总积分 {json.loads(response.text)['data']['score']}") 76 | else: 77 | print(f"查询积分失败,响应信息:{response.text}") 78 | except Exception as e: 79 | print(f"查询积分失败,响应信息:{response.text}") 80 | print('正在重新查询...') 81 | if(reconnect_counts[username]["query_count"] < 3): 82 | query(username) 83 | reconnect_counts[username]["query_count"] += 1 84 | 85 | def login_sign (item): 86 | global reqHeaders 87 | username = item.get('username') 88 | print(f'{username}: 开始任务:') 89 | session =requests.session () 90 | # 登录 91 | response =session.post ('http://dl2.jdmk.xyz:1170/user/login',headers = reqHeaders,data = json.dumps (item,separators=(',', ':')),timeout=3) 92 | try: 93 | if json.loads(response.text)['code']== 0 : 94 | print ("登录成功") 95 | cookie =response.cookies.get_dict () 96 | reqHeaders.update({'Cookie':'satoken='+cookie['satoken']}) 97 | signin(username) 98 | else : 99 | print (f"登录失败,响应信息:{response.text}") 100 | except Exception as e: 101 | print (f"登录失败,响应信息:{response.text}") 102 | print('正在重新登录...') 103 | if(reconnect_counts[username]["login_count"] < 3): 104 | login_sign(item) 105 | reconnect_counts[username]["login_count"] += 1 106 | if __name__ =='__main__': 107 | print (f"延时{random_number}秒后开始任务,预计{formatted_new_time} 开始") 108 | time.sleep(random_number) 109 | for item in userList: 110 | login_sign (item) 111 | time.sleep(random.randint(60, 60*2)) # 0到59之间的随机秒) -------------------------------------------------------------------------------- /jryj.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.10 21:00 5 | @Description: 每日一句 小程序 一天大概2毛满3提 6 | 有问题联系3288588344 7 | 频道:https://pd.qq.com/s/672fku8ge 8 | ------------------------------------------ 9 | 变量名:juzi 10 | 变量值 https://api.juzi.co/ 接口域名的请求头Headers中token的值 多账号&或换行或新建同名变量 11 | [Script] 12 | http-response 13 | 14 | [MITM] 15 | hostname = 16 | 17 | ⚠️【免责声明】 18 | ------------------------------------------ 19 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 20 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 21 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 22 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 23 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 24 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 25 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 26 | */ 27 | 28 | const $ = new Env("每日一句小程序"); 29 | let ckName = `juzi`; 30 | let userCookie = checkEnv( 31 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 32 | ); 33 | const notify = $.isNode() ? require("./sendNotify") : ""; 34 | 35 | !(async () => { 36 | console.log( 37 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 38 | new Date().getTime() + 39 | new Date().getTimezoneOffset() * 60 * 1000 + 40 | 8 * 60 * 60 * 1000 41 | ).toLocaleString()} \n==================================================` 42 | ); 43 | //console.log(userCookie) 44 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 45 | let index = 1; 46 | let strSplitor = "#"; 47 | 48 | for (let user of userCookie) { 49 | $.log(`\n🚀 user:【${index}】 start work\n`); 50 | index++ 51 | $.token = user 52 | $.ckStatus = true; 53 | $.juzi = null 54 | $.sid = null 55 | await getJuzi(); 56 | if ($.juzi) { 57 | $.log(`🎉 获取成功:${$.juzi}`); 58 | await postJuzi(); 59 | } else { 60 | } 61 | await getNewJuzi() 62 | if ($.sid) { 63 | await likeJuzi() 64 | } else { 65 | } 66 | } 67 | 68 | await $.sendMsg($.logs.join("\n")); 69 | })() 70 | .catch((e) => console.log(e)) 71 | .finally(() => $.done()); 72 | 73 | async function getJuzi() { 74 | let config = { 75 | url: `https://v1.hitokoto.cn`, 76 | method: "GET" 77 | } 78 | let { data: result } = await Request(config); 79 | if (result) { 80 | $.juzi = result.hitokoto + "~~~" + result.from_who; 81 | } 82 | } 83 | async function postJuzi() { 84 | 85 | let config = { 86 | url: `https://api.juzi.co/sentence/execWrite`, 87 | method: "POST", 88 | headers: { 89 | "accept": "*/*", 90 | "accept-language": "zh-CN,zh;q=0.9", 91 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 92 | "sec-fetch-dest": "empty", 93 | "sec-fetch-mode": "cors", 94 | "sec-fetch-site": "cross-site", 95 | "token": $.token, 96 | "xweb_xhr": "1", 97 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html", 98 | "Referrer-Policy": "unsafe-url" 99 | }, 100 | data: qs({ 101 | "juzi": encodeURIComponent($.juzi), 102 | "original": "false", 103 | "writer": "", 104 | "source": "", 105 | "tagsValue": "", 106 | "tagslength": "0", 107 | "tags": "" 108 | }) 109 | 110 | } 111 | 112 | 113 | let { data: result } = await Request(config); 114 | if (result.code = 200) { 115 | $.log(`发布句子成功`) 116 | console.log(result) 117 | } else { 118 | $.log(`发布句子失败 [${result.msg}]`) 119 | } 120 | } 121 | 122 | async function likeJuzi() { 123 | let config = { 124 | url: `https://api.juzi.co/sentence/slike`, 125 | method: "POST", 126 | headers: { 127 | "accept": "*/*", 128 | "accept-language": "zh-CN,zh;q=0.9", 129 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 130 | "sec-fetch-dest": "empty", 131 | "sec-fetch-mode": "cors", 132 | "sec-fetch-site": "cross-site", 133 | "token": $.token, 134 | "xweb_xhr": "1", 135 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html", 136 | "Referrer-Policy": "unsafe-url" 137 | }, 138 | data: qs({ sid: $.sid }) 139 | } 140 | let { data: result } = await Request(config); 141 | if (result.code = 200) { 142 | $.log(`点赞句子成功`) 143 | } else { 144 | $.log(`点赞句子失败 [${result.msg}]`) 145 | } 146 | } 147 | async function getNewJuzi() { 148 | let config = { 149 | url: `https://api.juzi.co/index/tab`, 150 | method: "GET", 151 | headers: { 152 | "accept": "*/*", 153 | "accept-language": "zh-CN,zh;q=0.9", 154 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 155 | "sec-fetch-dest": "empty", 156 | "sec-fetch-mode": "cors", 157 | "sec-fetch-site": "cross-site", 158 | "token": $.token, 159 | "xweb_xhr": "1", 160 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html", 161 | "Referrer-Policy": "unsafe-url" 162 | }, 163 | } 164 | let { data: result } = await Request(config); 165 | if (result.code = 200) { 166 | let num = Math.floor(Math.random() * 9) 167 | $.sid = result.data.recommend[num].id 168 | } else { 169 | $.log(`获取待点赞句子失败 [${result.msg}]`) 170 | } 171 | } 172 | function qs(obj) { 173 | let str = ""; 174 | for (let key in obj) { 175 | str += `${key}=${obj[key]}&` 176 | } 177 | return str.substring(0, str.length - 1) 178 | } 179 | 180 | function checkEnv(userCookie) { 181 | const envSplitor = ["&", "\n"]; 182 | //console.log(userCookie); 183 | let userList = userCookie 184 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 185 | .filter((n) => n); 186 | console.log(`共找到${userList.length}个账号`); 187 | return userList; 188 | } 189 | // prettier-ignore 190 | 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) } 191 | 192 | async function Request(options) { 193 | if ($.isNode()) { 194 | const axios = require("axios"); 195 | Request = async (options) => { 196 | try { 197 | return await axios.request(options); 198 | } catch (error) { 199 | return error && error.error ? error.error : "请求失败"; 200 | } 201 | }; 202 | } 203 | if ($.isQuanX()) { 204 | Request = async (options) => { 205 | try { 206 | return await $task.fetch(options); 207 | } catch (error) { 208 | return error && error.error ? error.error : "请求失败"; 209 | } 210 | }; 211 | } 212 | return await Request(options); 213 | } 214 | 215 | -------------------------------------------------------------------------------- /kg.py: -------------------------------------------------------------------------------- 1 | """ 2 | 酷瓜 3 | 每天0.1毛抓refreshToken,openid,appid就可以了(首次登陆才有这个包没抓到重新进入去抓) 4 | 分隔符#多账户换行 5 | 6 | 7 | # cron: 0 7,21 * * * 8 | # const $ = new Env("酷瓜"); 9 | 有问题联系3288588344 10 | 频道:https://pd.qq.com/s/672fku8ge 11 | 12 | 13 | """ 14 | import os 15 | import requests 16 | import time 17 | import random 18 | response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt") 19 | response.encoding = 'utf-8' 20 | txt = response.text 21 | print(txt) 22 | 23 | def refresh_token(refreshToken): 24 | url = "https://www.kugua.com/wxapp/refreshToken" 25 | headers = { 26 | "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", 27 | "Content-Type": "application/json" 28 | } 29 | data = { 30 | "refresh_token": refreshToken 31 | } 32 | response = requests.post(url, headers=headers, json=data) 33 | json_response = response.json() 34 | if json_response.get('status') == "0000": 35 | token = json_response["data"]["token"] 36 | codemsg = json_response["codemsg"] 37 | print(f"token刷新结果{codemsg},开始执行提现任务") 38 | return token 39 | else: 40 | print("刷新失败检查refresh_token是否过期") 41 | return None 42 | 43 | def sign(token, appid, openid): 44 | url = "https://www.kugua.com/wxapp/inflatedv3/popUpRedEnvelopes" 45 | headers = { 46 | "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", 47 | "Content-Type": "application/json" 48 | } 49 | data = { 50 | "token": token, 51 | "type": 1, 52 | "invite_id": "", 53 | "code_ticket": "", 54 | "count": "", 55 | "appid": appid, 56 | "openid": openid 57 | } 58 | response = requests.post(url, headers=headers, json=data) 59 | json_response = response.json() 60 | if json_response.get('status') == "0000": 61 | codemsg = json_response["codemsg"] 62 | print(f"签到结果{codemsg}") 63 | else: 64 | codemsg = json_response["codemsg"] 65 | print(f"签到失败{codemsg}") 66 | 67 | def tx(token, openid, appid): 68 | url = "https://www.kugua.com/wxapp/withdrawal/withdrawal" 69 | headers = { 70 | "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", 71 | "Content-Type": "application/json" 72 | } 73 | data = { 74 | "token": token, 75 | "withdrawalId": 8, 76 | "appid": appid, 77 | "openid": openid 78 | } 79 | response = requests.post(url, headers=headers, json=data) 80 | json_response = response.json() 81 | if json_response.get('status') == "0000": 82 | amount = json_response["data"]["amount"] 83 | codemsg = json_response["codemsg"] 84 | print(f"提现结果{codemsg},提现后余额还剩{amount}") 85 | else: 86 | codemsg = json_response["codemsg"] 87 | print(f"提现失败{codemsg}") 88 | 89 | if __name__ == "__main__": 90 | mkkg = os.environ.get('mkkg') 91 | if not mkkg: 92 | print("请设置环境变量mkkg") 93 | else: 94 | kghw_list = mkkg.split('\n') 95 | for num, kghw_item in enumerate(kghw_list, start=1): 96 | appid, openid, refreshToken = kghw_item.split('#') 97 | print(f"=====开始执行第{num}个账号任务=====") 98 | print("---------开始执行账号刷新---------") 99 | refreshed_token = refresh_token(refreshToken) 100 | if refreshed_token: 101 | print("---------开始执行账号签到---------") 102 | sign(refreshed_token, appid, openid) 103 | time.sleep(random.randint(10, 30)) 104 | print("---------开始执行账号提现---------") 105 | tx(refreshed_token, openid, appid) 106 | time.sleep(random.randint(10, 30)) 107 | print("---------账号任务执行完毕---------") -------------------------------------------------------------------------------- /ljgy.js: -------------------------------------------------------------------------------- 1 | // cron: 15 8,17 * * * 2 | // const $ = new Env("丽璟国韵"); 3 | // 填写账号&密码 多账号换行 4 | // export ljgy="130xxxxxx&xxxxx 5 | // 130xxxxxx&xxxxx" 6 | const { 7 | getCurrDay,checkTime,Env,random 8 | } = require('./utils.js') 9 | const {sendNotify} = require('./sendNotify.js') 10 | const $ = new Env("丽璟国韵"); 11 | const axios = require('axios') 12 | const userInfoList = $.getEnvKey('ljgy').split('\n') 13 | if(!userInfoList.length||userInfoList[0]===''){ 14 | throw new Error('未找到ck') 15 | } 16 | console.log(`获取到${userInfoList.length}个账号`); 17 | const baseUrl = 'http://wep.qzlcis.com/api' 18 | const headers = { 19 | 'Host': 'wep.qzlcis.com', 20 | 'Connection': 'keep-alive', 21 | 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.48(0x18003030) NetType/4G Language/zh_CN', 22 | 'Content-Type': 'application/json', 23 | 'Accept': 'application/json;charset=utf-8', 24 | 'Sec-Fetch-Site': 'cross-site', 25 | 'Sec-Fetch-Mode': 'cors', 26 | 'Sec-Fetch-Dest': 'empty', 27 | 'Referer': 'http://wep.qzlcis.com/', 28 | 'Accept-Encoding': 'gzip, deflate', 29 | 'Accept-Language': 'zh-CN,zh;q=0.9', 30 | 31 | } 32 | const url = { 33 | 'login':'/index/login', 34 | 'sign':'/user/sign', 35 | 'sign_reward':'/user/sign_reward', 36 | 'clock':'/user/clock', 37 | 'clock_reward':'/user/clock_reward', 38 | 'info':'/user/info', 39 | 40 | } 41 | const api = { 42 | login: (data) => { 43 | return axios({ 44 | url: baseUrl+url.login, 45 | method: 'post', 46 | headers, 47 | data 48 | }) 49 | }, 50 | sign: (data) => { 51 | return axios({ 52 | url: baseUrl+url.sign, 53 | method: 'post', 54 | headers, 55 | data 56 | }) 57 | }, 58 | sign_reward: (data) => { 59 | return axios({ 60 | url: baseUrl+url.sign_reward, 61 | method: 'post', 62 | headers, 63 | data 64 | }) 65 | }, 66 | clock: (data) => { 67 | return axios({ 68 | url: baseUrl+url.clock, 69 | method: 'post', 70 | headers, 71 | data 72 | }) 73 | }, 74 | clock_reward: (data) => { 75 | return axios({ 76 | url: baseUrl+url.clock_reward, 77 | method: 'post', 78 | headers, 79 | data 80 | }) 81 | }, 82 | info: (data) => { 83 | return axios({ 84 | url: baseUrl+url.info, 85 | method: 'post', 86 | headers, 87 | data 88 | }) 89 | }, 90 | } 91 | const processTokens = async () => { 92 | let index = 0 93 | const randomTime = random(1, 300) 94 | console.log('随机延迟:',randomTime + '秒'); 95 | await $.wait(randomTime*1000) 96 | for (const token of userInfoList) { 97 | try { 98 | $.log('') 99 | index++ 100 | const userInfo = token.split('&') 101 | const username = userInfo[0] 102 | const password = userInfo[1] 103 | $.log(`账号【${index}】 当前用户:${username}`); 104 | const {data:{code,info,data:tokenData}} = await api.login({username,password}) 105 | if(code!==1){ 106 | $.log(`账号【${index}】 登录失败:${info}`) 107 | await $.wait(2000) 108 | continue; 109 | } 110 | $.log(`账号【${index}】 登录成功!`) 111 | await $.wait(2000) 112 | const {data:{info:signInfo,data:signData}} = await api.sign(tokenData) 113 | await $.wait(1500) 114 | const {data:{data:{signin_days}}} = await api.sign_reward(tokenData) 115 | await $.wait(2500) 116 | const {data:{data:{money}}} = await api.info(tokenData) 117 | $.log(`账号【${index}】 红包签到信息:${signInfo}`); 118 | $.log(`账号【${index}】 红包签到天数:${signin_days}`); 119 | $.log(`账号【${index}】 红包累计金额:${money}`); 120 | await $.wait(1000*15) 121 | const {data:{info:clockInfo}} = await api.clock(tokenData) 122 | $.log(`账号【${index}】 实物签到信息:${clockInfo}`); 123 | await $.wait(3500) 124 | const {data:{data:clockData}} = await api.clock_reward(tokenData) 125 | $.log(`账号【${index}】 累计打卡天数:${clockData?.clock_day}`); 126 | $.log(`账号【${index}】 下个奖品:${clockData?.next_reward?.name}`); 127 | $.log(`账号【${index}】 下个奖品所需天数:${clockData?.next_reward?.days}`); 128 | $.log(''); 129 | await $.wait(1000*30) 130 | } catch (error) { 131 | $.logErr(error.toString()); 132 | } 133 | } 134 | $.log('') 135 | await sendNotify('丽璟国韵', $.logs.join('
')) 136 | $.done() 137 | }; 138 | 139 | processTokens() -------------------------------------------------------------------------------- /lqkx.py: -------------------------------------------------------------------------------- 1 | # --------------------------------注释区-------------------------------- 2 | # 入口:微信扫码:https://gitee.com/HuaJiB/yuanshen34/raw/master/lqpf.jpg 3 | # 变量:yuanshen_lqpf 4 | # 多号分割方式 [ @ 或 换行 或 新建同名变量 ] 5 | # 抓取shop.linqishop.com下任意请求头的token的值填入 6 | # corn: 每日21点运行即可 7 | # cron: 0 7,21 * * * 8 | # const $ = new Env("临期快消"); 9 | # 一日出三单 一天3r 1r起提现 无自动提现 10 | # --------------------------------一般不动区-------------------------------- 11 | # _ooOoo_ 12 | # o8888888o 13 | # 88" . "88 14 | # (| -_- |) 15 | # O\ = /O 16 | # ____/`---'\____ 17 | # . ' \\| |// `. 18 | # / \\||| : |||// \ 19 | # / _||||| -:- |||||- \ 20 | # | | \\\ - /// | | 21 | # | \_| ''\---/'' | | 22 | # \ .-\__ `-` ___/-. / 23 | # ___`. .' /--.--\ `. . __ 24 | # ."" '< `.___\_<|>_/___.' >'"". 25 | # | | : `- \`.;`\ _ /`;.`/ - ` : | | 26 | # \ \ `-. \_ __\ /__ _/ .-` / / 27 | # ======`-.____`-.___\_____/___.-`____.-'====== 28 | # `=---=' 29 | # 30 | # ............................................. 31 | # 佛祖保佑 永无BUG 32 | # 佛祖镇楼 BUG辟邪 33 | #佛曰: 34 | # 写字楼里写字间,写字间里程序员; 35 | # 程序人员写程序,又拿程序换酒钱。 36 | # 酒醒只在网上坐,酒醉还来网下眠; 37 | # 酒醉酒醒日复日,网上网下年复年。 38 | # 但愿老死电脑间,不愿鞠躬老板前; 39 | # 奔驰宝马贵者趣,公交自行程序员。 40 | # 别人笑我忒疯癫,我笑自己命太贱; 41 | # 不见满街漂亮妹,哪个归得程序员? 42 | # 43 | # --------------------------------代码区-------------------------------- 44 | import bz2, base64 45 | exec(bz2.decompress(base64.b64decode('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'))) -------------------------------------------------------------------------------- /mmx.js: -------------------------------------------------------------------------------- 1 | // cron: 15 8,17 * * * 2 | // 抓 header中的Extra-Data中的sid 多账号换行 3 | // export mmx="YZxxxx 4 | // YZxxxx" 5 | const { 6 | getCurrDay,checkTime,Env,random 7 | } = require('./utils.js') 8 | const {sendNotify} = require('./sendNotify.js') 9 | const $ = new Env("猛犸象签到"); 10 | const axios = require('axios') 11 | const userInfoList = $.getEnvKey('mmx').split('\n') 12 | if(!userInfoList.length||userInfoList[0]===''){ 13 | throw new Error('未找到ck') 14 | } 15 | console.log(`获取到${userInfoList.length}个ck`); 16 | 17 | 18 | const baseUrl = 'https://h5.youzan.com' 19 | const headers = { 20 | 'Host': 'h5.youzan.com', 21 | 'Connection': 'keep-alive', 22 | '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(0x63090a13) XWEB/9129', 23 | 'Content-Type': 'application/json', 24 | 'Accept': '*/*', 25 | 'x-yz-action-id': 'wsc-h5-shop-0a37294e-1719804171907-683589', 26 | 'Sec-Fetch-Site': 'cross-site', 27 | 'Sec-Fetch-Mode': 'cors', 28 | 'Sec-Fetch-Dest': 'empty', 29 | 'Accept-Encoding': 'gzip, deflate, br', 30 | 'Accept-Language': 'zh-CN,zh;q=0.9', 31 | 32 | } 33 | const url = { 34 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=4296415&kdt_id=146288343', 35 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=4296415&kdt_id=146288343', 36 | 'userInfo':'/wscaccount/api/authorize/data.json?kdt_id=146288343 ', 37 | 'point':'/wscuser/membercenter/stats.json?kdt_id=146288343' 38 | } 39 | const api = { 40 | checkin: ({data,token}) => { 41 | return axios({ 42 | url: baseUrl+url.checkin, 43 | method: 'get', 44 | headers:{ 45 | ...headers, 46 | "Cookie":`KDTWEAPPSESSIONID=${token}` 47 | }, 48 | }) 49 | }, 50 | userInfo: ({data,token}) => { 51 | return axios({ 52 | url: baseUrl+url.userInfo, 53 | method: 'get', 54 | headers:{ 55 | ...headers, 56 | "Cookie":`KDTWEAPPSESSIONID=${token}` 57 | }, 58 | }) 59 | }, 60 | getCountDay: ({data,token}) => { 61 | return axios({ 62 | url: baseUrl+url.getCountDay, 63 | method: 'get', 64 | headers:{ 65 | ...headers, 66 | "Cookie":`KDTWEAPPSESSIONID=${token}` 67 | }, 68 | }) 69 | }, 70 | point: ({data,token}) => { 71 | return axios({ 72 | url: baseUrl+url.point, 73 | method: 'get', 74 | headers:{ 75 | ...headers, 76 | "Cookie":`KDTWEAPPSESSIONID=${token}` 77 | }, 78 | }) 79 | }, 80 | } 81 | const processTokens = async () => { 82 | let index = 0 83 | const randomTime = random(1, 300) 84 | console.log('随机延迟:',randomTime); 85 | await $.wait(randomTime*1000) 86 | for (const token of userInfoList) { 87 | try { 88 | $.log('') 89 | index++ 90 | const data = await api.userInfo({token}) 91 | const {mobile} = data?.data?.data?.userInfo 92 | if(!mobile){ 93 | $.log(`账号【${index}】 登录失效`) 94 | $.log('') 95 | continue; 96 | } 97 | $.log(`账号【${index}】 当前用户:${mobile}`,); 98 | try{ 99 | const {data:{msg}} = await api.checkin({token}) 100 | $.log(`账号【${index}】 签到信息:${msg}`,); 101 | }catch(e){ 102 | $.logErr(`账号【${index}】 签到失败:${e.toString()}`,) 103 | } 104 | await $.wait(2000) 105 | try{ 106 | const {data:{data:{continuesDay}}} = await api.getCountDay({token}) 107 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`,); 108 | }catch(e){ 109 | $.logErr(`账号【${index}】 获取签到天数失败:${e.toString()}`,) 110 | } 111 | await $.wait(2000) 112 | const dataPoint = await api.point({token}) 113 | const points = dataPoint?.data?.data?.stats?.points||`未获取到积分` 114 | $.log(`账号【${index}】 当前积分:${points}`,); 115 | await $.wait(3500) 116 | $.log(''); 117 | } catch (error) { 118 | $.logErr(error.toString()); 119 | } 120 | } 121 | $.log('') 122 | await sendNotify('猛犸象签到', $.logs.join('
')) 123 | $.done() 124 | }; 125 | 126 | processTokens() -------------------------------------------------------------------------------- /pinzan.js: -------------------------------------------------------------------------------- 1 | /* 2 | name:品赞领免费ip 3 | author:食翔狂魔 4 | version:1.0 5 | date:2024-11-12 6 | cron: 0 10 ? * MON 7 | pzhttp: 账户#密码 多账号换行 8 | */ 9 | const fs = require('fs'); 10 | const file = '.pinzan_count'; 11 | let count = fs.existsSync(file) ? parseInt(fs.readFileSync(file, 'utf8')) || 0 : 0; 12 | fs.writeFileSync(file, String(count + 1)); 13 | 14 | const pzhttp = process.env['pinzan'] || ""; 15 | const axios = require("axios") 16 | let d = { 17 | table: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"], 18 | UTF16ToUTF8: function(e) { 19 | for (var t = [], n = e.length, i = 0; i < n; i++) { 20 | var r, o, s = e.charCodeAt(i); 21 | 0 < s && s <= 127 ? t.push(e.charAt(i)) : 128 <= s && s <= 2047 ? (r = 192 | s >> 6 & 31, 22 | o = 128 | 63 & s, 23 | t.push(String.fromCharCode(r), String.fromCharCode(o))) : 2048 <= s && s <= 65535 && (r = 224 | s >> 12 & 15, 24 | o = 128 | s >> 6 & 63, 25 | s = 128 | 63 & s, 26 | t.push(String.fromCharCode(r), String.fromCharCode(o), String.fromCharCode(s))) 27 | } 28 | return t.join("") 29 | }, 30 | UTF8ToUTF16: function(e) { 31 | for (var t = [], n = e.length, i = 0, i = 0; i < n; i++) { 32 | var r, o, s = e.charCodeAt(i); 33 | 0 == (s >> 7 & 255) ? t.push(e.charAt(i)) : 6 == (s >> 5 & 255) ? (o = (31 & s) << 6 | 63 & (r = e.charCodeAt(++i)), 34 | t.push(Sting.fromCharCode(o))) : 14 == (s >> 4 & 255) && (o = (255 & (s << 4 | (r = e.charCodeAt(++i)) >> 2 & 15)) << 8 | ((3 & r) << 6 | 63 & e.charCodeAt(++i)), 35 | t.push(String.fromCharCode(o))) 36 | } 37 | return t.join("") 38 | }, 39 | encode: function(e) { 40 | if (!e) 41 | return ""; 42 | for (var t = this.UTF16ToUTF8(e), n = 0, i = t.length, r = []; n < i; ) { 43 | var o = 255 & t.charCodeAt(n++); 44 | if (r.push(this.table[o >> 2]), 45 | n == i) { 46 | r.push(this.table[(3 & o) << 4]), 47 | r.push("=="); 48 | break 49 | } 50 | var s = t.charCodeAt(n++); 51 | if (n == i) { 52 | r.push(this.table[(3 & o) << 4 | s >> 4 & 15]), 53 | r.push(this.table[(15 & s) << 2]), 54 | r.push("="); 55 | break 56 | } 57 | var a = t.charCodeAt(n++); 58 | r.push(this.table[(3 & o) << 4 | s >> 4 & 15]), 59 | r.push(this.table[(15 & s) << 2 | (192 & a) >> 6]), 60 | r.push(this.table[63 & a]) 61 | } 62 | return r.join("") 63 | }, 64 | decode: function(e) { 65 | if (!e) 66 | return ""; 67 | for (var t = e.length, n = 0, i = []; n < t; ) 68 | code1 = this.table.indexOf(e.charAt(n++)), 69 | code2 = this.table.indexOf(e.charAt(n++)), 70 | code3 = this.table.indexOf(e.charAt(n++)), 71 | code4 = this.table.indexOf(e.charAt(n++)), 72 | c1 = code1 << 2 | code2 >> 4, 73 | i.push(String.fromCharCode(c1)), 74 | -1 != code3 && (c2 = (15 & code2) << 4 | code3 >> 2, 75 | i.push(String.fromCharCode(c2))), 76 | -1 != code4 && (c3 = (3 & code3) << 6 | code4, 77 | i.push(String.fromCharCode(c3))); 78 | return this.UTF8ToUTF16(i.join("")) 79 | } 80 | }; 81 | 82 | async function login(pzUser){ 83 | let arr = pzUser.split("#"); 84 | try{ 85 | for (var e = d.encode("".concat(arr[0], "QWERIPZAN1290QWER").concat(arr[1])), t = "", o = 0; o < 80; o++){ 86 | t += Math.random().toString(16).slice(2); 87 | } 88 | 89 | e = "".concat(t.slice(0, 100)).concat(e.slice(0, 8)).concat(t.slice(100, 200)).concat(e.slice(8, 20)).concat(t.slice(200, 300)).concat(e.slice(20)).concat(t.slice(300, 400)); 90 | let res = await axios({ 91 | url: "https://service.ipzan.com/users-login", 92 | method: "POST", 93 | headers: { 94 | "Content-Type": "application/json" 95 | }, 96 | data: { 97 | account: e, 98 | source:"ipzan-home-one" 99 | }, 100 | }); 101 | return res.data.data.token; 102 | }catch(e){ 103 | console.log(e); 104 | } 105 | } 106 | 107 | async function sign(token){ 108 | try{ 109 | let res = await axios({ 110 | url: "https://service.ipzan.com/home/userWallet-receive", 111 | method: "GET", 112 | headers: { 113 | "Content-Type": "application/json", 114 | "authorization": `Bearer ${token}` 115 | } 116 | }); 117 | console.log(res.data); 118 | 119 | }catch(e){ 120 | console.log(e); 121 | } 122 | } 123 | 124 | async function main(pzUser){ 125 | let token = await login(pzUser); 126 | if(token){ 127 | await sign(token); 128 | } 129 | await new Promise(resolve => setTimeout(resolve, 10*1000)); 130 | } 131 | 132 | 133 | !(async function(){ 134 | console.log(`第${count+1}次执行,延时:${count*5}分钟`) 135 | await new Promise(r => setTimeout(r, count * 300000)); 136 | if(!pzhttp){ 137 | console.log("pzhttp未设置"); 138 | return; 139 | } 140 | const pzArr = pzhttp.split("\n"); 141 | for(let i = 0; i < pzArr.length; i++){ 142 | await main(pzArr[i]); 143 | } 144 | })() -------------------------------------------------------------------------------- /pzxq.js: -------------------------------------------------------------------------------- 1 | // cron: 16 7,18 * * * 2 | // const $ = new Env("瓶子星球签到"); 3 | // 抓header 中的Authorization 多账号换行 4 | // export pzxq="Authorization 5 | // Authorization" 6 | const { 7 | getCurrDay,checkTime,Env,random 8 | } = require('./utils.js') 9 | const {sendNotify} = require('./sendNotify.js') 10 | const $ = new Env("瓶子星球签到"); 11 | const axios = require('axios') 12 | const userInfoList = $.getEnvKey('pzxq').split('\n') 13 | if(!userInfoList.length||userInfoList[0]===''){ 14 | throw new Error('未找到ck') 15 | } 16 | console.log(`获取到${userInfoList.length}个ck`); 17 | 18 | 19 | const baseUrl = 'https://exapi.jxbscbd.com' 20 | const url = { 21 | userCheckIn:'/gateway/pointsMall/task/userCheckIn', 22 | getUserPoints:'/gateway/pointsMall/user/getUserPoints?userNumber=6645c779a794800029436ab8', 23 | getUserInfo:'/gateway/pointsMall/user/getUserForQuestionnaire' 24 | } 25 | const headers = { 26 | 'Content-Type': 'application/json', 27 | 'Authorization': '', 28 | 'Host': 'exapi.jxbscbd.com', 29 | 'Referer': 'https://servicewechat.com/wx5d8100503eb3ecc3/776/page-frame.html', 30 | '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(0x63090a13) XWEB/9115' 31 | } 32 | const api = { 33 | userCheckIn: (token,data) => { 34 | return axios({ 35 | url: baseUrl+url.userCheckIn, 36 | method: 'post', 37 | headers: {...headers, 'Authorization': token}, 38 | data: data, 39 | }) 40 | 41 | }, 42 | getUserPoints: (token) => { 43 | return axios({ 44 | url: baseUrl+url.getUserPoints, 45 | method: 'get', 46 | headers: {...headers, 'Authorization': token} 47 | }) 48 | }, 49 | getUserInfo: (token) => { 50 | return axios({ 51 | url: baseUrl+url.getUserInfo, 52 | method: 'get', 53 | headers: {...headers, 'Authorization': token} 54 | }) 55 | }, 56 | } 57 | 58 | const processTokens = async () => { 59 | let index = 0 60 | const randomTime = random(1, 300) 61 | console.log('随机延迟:',randomTime + '秒'); 62 | await $.wait(randomTime*1000) 63 | for (const token of userInfoList) { 64 | try { 65 | $.log('') 66 | index++ 67 | const {data: {data: {id, userNumber, telephoneNumber}}} = await api.getUserInfo(token); 68 | const checkInParams = { 69 | userId: id, 70 | userNumber, 71 | telephoneNumber 72 | }; 73 | $.log(`账号【${index}】 查询信息成功:${telephoneNumber}`, ); 74 | 75 | await $.wait(1500); 76 | 77 | const {data: {msg}} = await api.userCheckIn(token, checkInParams); 78 | $.log(`账号【${index}】 签到信息:${msg}`, ); 79 | 80 | await $.wait(1500); 81 | 82 | const {data: {data: {accumulatePoints, availablePoints}}} = await api.getUserPoints(token); 83 | $.log(`账号【${index}】 累计积分:${accumulatePoints}`, ); 84 | $.log(`账号【${index}】 可用积分:${availablePoints}`, ); 85 | $.log(''); 86 | 87 | await $.wait(3500); 88 | } catch (error) { 89 | $.logErr(error.toString()); 90 | } 91 | } 92 | $.log('') 93 | await sendNotify('瓶子星球签到', $.logs.join('
')) 94 | $.done() 95 | }; 96 | processTokens() -------------------------------------------------------------------------------- /qjez.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: sm 4 | @Date: 2024.06.07 19:15 5 | @Description: 微信小程序虔金E站 每日签到 6 | ------------------------------------------ 7 | 变量名qianjin 8 | 变量值https://www.xrservice.cn/请求头Headers中Homing-Auth的值 去掉Bearer 多账号&或换行 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("微信小程序虔金E站"); 27 | let ckName = `qianjin`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 0; 44 | //let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`); 48 | $.ck = user 49 | //$.ckStatus = false; 50 | await signIn() 51 | } 52 | 53 | await $.sendMsg($.logs.join("\n")); 54 | })() 55 | .catch((e) => console.log(e)) 56 | .finally(() => $.done()); 57 | async function signIn() { 58 | let config = { 59 | method: 'POST', 60 | url: 'https://www.xrservice.cn/rayo-gz-fes-back/blade-signin/signin-user/submit', 61 | headers: { 62 | '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', 63 | 'Accept': 'application/json, text/plain, */*', 64 | 'Content-Type': 'application/json', 65 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', 66 | 'Homing-Auth': 'Bearer '+$.ck, 67 | 'sec-ch-ua-mobile': '?1', 68 | //'Authorization': 'Basic aG9taW5nLXd4bHA6UEhPU2J6SEVoRWhkRW4xYWlDSmhnYmJadVQ=', 69 | 'sec-ch-ua-platform': '"Android"', 70 | 'Origin': 'https://www.xrservice.cn', 71 | 'X-Requested-With': 'com.tencent.mm', 72 | 'Sec-Fetch-Site': 'same-origin', 73 | 'Sec-Fetch-Mode': 'cors', 74 | 'Sec-Fetch-Dest': 'empty', 75 | 'Referer': 'https://www.xrservice.cn/rayo-gz-fes-h5/', 76 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 77 | }, 78 | data: JSON.stringify({}) 79 | }; 80 | let { data: result } = await Request(config); 81 | result?.code == 200 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result)); 82 | } 83 | 84 | 85 | function checkEnv(userCookie) { 86 | const envSplitor = ["&", "\n"]; 87 | //console.log(userCookie); 88 | let userList = userCookie 89 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 90 | .filter((n) => n); 91 | console.log(`共找到${userList.length}个账号`); 92 | return userList; 93 | } 94 | // prettier-ignore 95 | 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) } 96 | 97 | async function Request(options) { 98 | if ($.isNode()) { 99 | const axios = require("axios"); 100 | Request = async (options) => { 101 | try { 102 | return await axios.request(options); 103 | } catch (error) { 104 | throw error && error.error ? error.error : "请求失败"; 105 | } 106 | }; 107 | } 108 | if ($.isQuanX()) { 109 | Request = async (options) => { 110 | try { 111 | return await $task.fetch(options); 112 | } catch (error) { 113 | throw error && error.error ? error.error : "请求失败"; 114 | } 115 | }; 116 | } 117 | return await Request(options); 118 | } -------------------------------------------------------------------------------- /rainyun.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | 雨云自动签到脚本V2.0 6 | 注册地址:https://www.rainyun.com 7 | 用途:自动签到赚积分,积分可提现,也可在商城购买虚拟主机或云服务等 8 | 环境变量:共有两个环境变量 9 | 10 | yyqd 账户与密码用&隔开,多账户用#隔开 11 | VERIFY_TOKEN 写滑块的token 12 | 定时:建议每天执行一次 13 | """ 14 | 15 | import requests 16 | import json 17 | import os 18 | from typing import Tuple, Optional, Dict 19 | from dataclasses import dataclass 20 | 21 | try: 22 | from notify import send 23 | except ImportError: 24 | print("通知服务加载失败,请检查notify.py是否存在") 25 | exit(1) 26 | 27 | 28 | @dataclass 29 | class UserInfo: 30 | name: str 31 | email: str 32 | points: int 33 | last_ip: str 34 | last_login_area: str 35 | 36 | 37 | class RainyunAPI: 38 | BASE_URL = "https://api.v2.rainyun.com" 39 | VERIFY_URL = "http://119.96.239.11:8888/api/getcode" 40 | 41 | def __init__(self): 42 | self.session = requests.Session() 43 | self.csrf_token = None 44 | 45 | def get_slide_verify(self) -> Tuple[str, str]: 46 | verify_token = os.getenv("VERIFY_TOKEN") 47 | if not verify_token: 48 | print("错误:未设置VERIFY_TOKEN环境变量") 49 | return "", "" 50 | 51 | headers = {"Content-Type": "application/json"} 52 | data = { 53 | "timeout": "60", 54 | "type": "tencent-turing", 55 | "appid": "2039519451", 56 | "token": verify_token, 57 | "developeraccount": "qqaoxin", 58 | "referer": "https://dl.reg.163.com/" 59 | } 60 | 61 | try: 62 | response = self.session.post(self.VERIFY_URL, headers=headers, json=data) 63 | response.raise_for_status() 64 | result = response.json() 65 | 66 | if result.get("status") == 200 and result.get("success"): 67 | verify_data = json.loads(result["data"]["code"]) 68 | return verify_data.get("ticket", ""), verify_data.get("randstr", "") 69 | 70 | print(f"验证码服务返回错误: {result.get('msg')}") 71 | return "", "" 72 | 73 | except Exception as e: 74 | print(f"验证码请求异常: {str(e)}") 75 | return "", "" 76 | 77 | def login(self, username: str, password: str) -> bool: 78 | login_data = json.dumps({ 79 | "field": username, 80 | "password": password 81 | }) 82 | headers = {"Content-Type": "application/json"} 83 | 84 | try: 85 | response = self.session.post( 86 | f"{self.BASE_URL}/user/login", 87 | headers=headers, 88 | data=login_data 89 | ) 90 | response.raise_for_status() 91 | 92 | self.csrf_token = response.cookies.get_dict().get('X-CSRF-Token') 93 | return bool(self.csrf_token) 94 | 95 | except Exception as e: 96 | print(f"登录失败: {str(e)}") 97 | return False 98 | 99 | def get_user_info(self) -> Optional[UserInfo]: 100 | if not self.csrf_token: 101 | return None 102 | 103 | headers = { 104 | "Content-Type": "application/json", 105 | 'x-csrf-token': self.csrf_token 106 | } 107 | 108 | try: 109 | response = self.session.get( 110 | f"{self.BASE_URL}/user/?no_cache=false", 111 | headers=headers 112 | ) 113 | response.raise_for_status() 114 | 115 | data = response.json()['data'] 116 | return UserInfo( 117 | name=data['Name'], 118 | email=data['Email'], 119 | points=data['Points'], 120 | last_ip=data['LastIP'], 121 | last_login_area=data['LastLoginArea'] 122 | ) 123 | 124 | except Exception as e: 125 | print(f"获取用户信息失败: {str(e)}") 126 | return None 127 | 128 | def sign_in(self, ticket: str, randstr: str) -> Tuple[bool, str]: 129 | if not self.csrf_token: 130 | return False, "签到失败:未获取到csrf_token" 131 | 132 | signin_data = json.dumps({ 133 | "task_name": "每日签到", 134 | "verifyCode": "", 135 | "vticket": ticket, 136 | "vrandstr": randstr 137 | }) 138 | headers = { 139 | 'x-csrf-token': self.csrf_token 140 | } 141 | 142 | try: 143 | response = self.session.post( 144 | f"{self.BASE_URL}/user/reward/tasks", 145 | headers=headers, 146 | data=signin_data 147 | ) 148 | 149 | try: 150 | result = response.json() 151 | except: 152 | return False, f"签到失败:HTTP {response.status_code}, 响应内容: {response.text}" 153 | 154 | if result.get("code") == 200: 155 | return True, "签到成功" 156 | else: 157 | return False, f"签到失败:{result.get('message', '未知错误')} (code: {result.get('code')})" 158 | 159 | except Exception as e: 160 | return False, f"签到异常:{str(e)}" 161 | 162 | 163 | def process_account(credentials: str) -> str: 164 | try: 165 | username, password = credentials.split('&') 166 | except ValueError: 167 | return "\n账户格式错误,请使用&分隔用户名和密码" 168 | 169 | api = RainyunAPI() 170 | 171 | if not api.login(username, password): 172 | return f'\n【用户名】{username}\n【签到状态】登录失败' 173 | 174 | ticket, randstr = api.get_slide_verify() 175 | if not ticket or not randstr: 176 | return f'\n【用户名】{username}\n【签到状态】滑块验证失败' 177 | 178 | user_info = api.get_user_info() 179 | if not user_info: 180 | return f'\n【用户名】{username}\n【签到状态】获取用户信息失败' 181 | 182 | success, sign_message = api.sign_in(ticket, randstr) 183 | 184 | return (f'\n【用户名】{username}\n' 185 | f'【电子邮件】{user_info.email}\n' 186 | f'【签到状态】{sign_message}\n' 187 | f'【剩余积分】{user_info.points}\n' 188 | f'【最后登录ip】{user_info.last_ip}\n' 189 | f'【最后登录地址】{user_info.last_login_area}') 190 | 191 | 192 | def main(): 193 | credentials = os.getenv("yyqd") 194 | if not credentials: 195 | print("错误:未设置yyqd环境变量") 196 | return 197 | 198 | verify_token = os.getenv("VERIFY_TOKEN") 199 | if not verify_token: 200 | print("错误:未设置VERIFY_TOKEN环境变量") 201 | return 202 | 203 | results = [] 204 | for account in credentials.split('#'): 205 | result = process_account(account) 206 | results.append(result) 207 | 208 | combined_message = "-"*45 + "\n".join(results) 209 | print("###雨云签到###\n\n", combined_message) 210 | 211 | send("雨云签到", combined_message) 212 | 213 | 214 | if __name__ == '__main__': 215 | main() -------------------------------------------------------------------------------- /sandeli.js: -------------------------------------------------------------------------------- 1 | // cron: 40 8,17 * * * 2 | // 商品id列表 1-大麦茶 2-桂花乌龙 3-茉莉乌龙 3 | // 抓header中的Authorization 去掉bearer 多账号换行 如需抢购 追加 &商品id&addressId addressId是添加地址接口会返回 例如大麦茶就是 &1&addressId 4 | // export sandeli="8e09bfc0xxx 5 | // 770f5xxxx" 6 | const { 7 | getCurrDay,checkTime,Env,random 8 | } = require('./utils.js') 9 | const {sendNotify} = require('./sendNotify.js') 10 | const $ = new Env("三得利签到"); 11 | const axios = require('axios') 12 | const userInfoList = $.getEnvKey('sandeli').split('\n') 13 | const isGetGoods = process.env['sandeli_get'] || false 14 | const requestCount = 125 15 | const getGoodsSuccessList = ['抢券成功账号列表'] 16 | const goodsList = [ 17 | { 18 | id:1, 19 | name:'三得利 大麦茶15瓶', 20 | activeId:'516', 21 | goodsId:'7305855462092832768', 22 | 23 | }, 24 | { 25 | id:2, 26 | name:'三得利 植物茶黑豆茶15瓶', 27 | goodsId:'7316120183365910528', 28 | activeId:'522', 29 | }, 30 | { 31 | id:3, 32 | name:'三得利 茉莉乌龙15瓶(新包装)', 33 | activeId:'456', 34 | goodsId:'7272962282673364992', 35 | } 36 | ] 37 | if(!userInfoList.length||userInfoList[0]===''){ 38 | throw new Error('未找到ck') 39 | } 40 | console.log(`获取到${userInfoList.length}个ck`); 41 | 42 | const baseUrl = 'https://xiaodian.miyatech.com/api' 43 | const headers = { 44 | 'Host': 'xiaodian.miyatech.com', 45 | 'Connection': 'keep-alive', 46 | 'X-VERSION': '2.1.3', 47 | 'Authorization': '', 48 | 'HH-VERSION': '0.2.8', 49 | 'componentSend': 1, 50 | 'HH-FROM': '20230130307725', 51 | 'HH-APP': 'wxb33ed03c6c715482', 52 | 'appPublishType': 1, 53 | '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/11065', 54 | 'Content-Type': 'application/json;charset=UTF-8', 55 | 'xweb_xhr': 1, 56 | 'HH-CI': 'saas-wechat-app', 57 | 'Accept': '*/*', 58 | 'Sec-Fetch-Site': 'cross-site', 59 | 'Sec-Fetch-Mode': 'cors', 60 | 'Sec-Fetch-Dest': 'empty', 61 | 'Referer': 'https://servicewechat.com/wxb33ed03c6c715482/28/page-frame.html', 62 | 'Accept-Encoding': 'gzip, deflate, br', 63 | 'Accept-Language': 'zh-CN,zh;q=0.9' 64 | } 65 | const url = { 66 | 'signIn':'/coupon/auth/signIn', 67 | 'userInfo':'/user/member/info ', 68 | 'goods':'/order/center/order/submit' 69 | } 70 | const api = { 71 | signIn: (token) => { 72 | headers.Authorization = 'bearer '+token 73 | return axios({ 74 | url: baseUrl+url.signIn, 75 | method: 'post', 76 | headers, 77 | data:{"miniappId":159} 78 | }) 79 | }, 80 | userInfo: (token) => { 81 | headers.Authorization = 'bearer '+token 82 | return axios({ 83 | url: baseUrl+url.userInfo, 84 | method: 'post', 85 | headers, 86 | data:{} 87 | }) 88 | }, 89 | getGoods: (cks) => { 90 | const token = cks.split('&')[0] 91 | const id = cks.split('&')[1] 92 | const activeId = goodsList.find(goods=>goods.id==id).activeId 93 | const goodsId = goodsList.find(goods=>goods.id==id).goodsId 94 | const addressId = cks.split('&')[2] 95 | headers.Authorization = 'bearer '+token 96 | return axios({ 97 | url: baseUrl+url.goods, 98 | method: 'post', 99 | headers, 100 | data:{"businessType":"POINTS_MALL","pointMallSubmitRequest":{"exchangeActivityId":activeId,"productBizNo":goodsId,"discountType":"GOODS","addressId":Number(addressId)}} 101 | }) 102 | }, 103 | } 104 | const getGoods = async (cks) => { 105 | try { 106 | const id = cks.split('&')[1] 107 | const mobile = cks.split('&')[3] 108 | const goodsName = goodsList.find(goods=>goods.id==id).name 109 | $.log(`🕊账号[${mobile}] 开始抢券-${getCurrDay()}...`); 110 | 111 | let { data: result} = await api.getGoods(cks) 112 | if (result?.code == 200) { 113 | $.log(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券成功!返回参数[${JSON.stringify(result.data)}]🎉`); 114 | getGoodsSuccessList.push(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券成功!`) 115 | }else { 116 | $.log(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券失败:${result.msg}🚫`) 117 | } 118 | 119 | } catch (e) { 120 | console.log(e); 121 | } 122 | } 123 | const processTokens = async () => { 124 | let index = 0 //用来给账号标记序号, 从1开始 125 | const date = new Date() 126 | const hour = date.getHours() 127 | if(isGetGoods&&hour===9){ 128 | $.log(`当前为抢券时段,开始执行抢券任务`); 129 | //前期准备工作 130 | for (let i = userInfoList.length - 1; i >= 0; i--) { 131 | const token = userInfoList[i].split('&')[0] 132 | const goodsId = userInfoList[i].split('&')[1] 133 | const addressId = userInfoList[i].split('&')[2] 134 | if(!goodsId||!addressId){ 135 | $.log(`账号【${i}】没有设置抢购参数,跳过当前账号`); 136 | userInfoList.splice(i, 1); 137 | continue; 138 | } 139 | //查询用户信息 140 | const infoData = await api.userInfo(token) 141 | const currentScore = infoData?.data?.data?.currentScore||0 142 | const mobile = infoData?.data?.data?.phone 143 | if(!mobile){ 144 | $.log(`账号【${i}】登录失效,跳过当前账号`) 145 | userInfoList.splice(i, 1); 146 | continue; 147 | } 148 | if(Number(currentScore)<1800){ 149 | $.log(`账号【${mobile}】当前积分${currentScore}小于1800,跳过当前账号`); 150 | userInfoList.splice(i, 1); 151 | continue; 152 | } 153 | 154 | userInfoList[i]+=`&${mobile}` 155 | await $.wait(2500) 156 | } 157 | if(!userInfoList.length){ 158 | $.log('没有符合条件的账号,结束抢购任务'); 159 | return 160 | } 161 | $.log(`筛选出${userInfoList.length}个账号:`); 162 | $.log(userInfoList.map(user=>user.split('&')[3]).join('\n')); 163 | const count = Math.floor(requestCount/userInfoList.length) 164 | $.log(`抢购循环次数为${count}`) 165 | //当前模式为抢购模式 166 | await checkTime({ 167 | hours:9, 168 | minutes:59, 169 | seconds:59, 170 | milliseconds:0 171 | }) 172 | 173 | for(let i=0;i') 184 | console.log(getGoodsSuccessList.join('\n')) 185 | return 186 | } 187 | const randomTime = random(1, 300) 188 | console.log('随机延迟:',randomTime + '秒'); 189 | await $.wait(randomTime*1000) 190 | for (const tokens of userInfoList) { 191 | try { 192 | const token = tokens.split('&')[0] 193 | $.log('') 194 | index++ 195 | const data = await api.userInfo(token) 196 | const mobile = data?.data?.data?.phone 197 | if(!mobile){ 198 | $.log(`账号【${index}】登录失效`) 199 | $.log('') 200 | continue; 201 | } 202 | $.log(`账号【${index}】 当前用户:${mobile}`); 203 | await $.wait(2000) 204 | const {data:{msg}} = await api.signIn(token) 205 | $.log(`账号【${index}】 签到信息:${msg}`); 206 | await $.wait(2000) 207 | const infoData = await api.userInfo(token) 208 | const currentScore = infoData?.data?.data?.currentScore 209 | $.log(`账号【${index}】 当前积分:${currentScore}`); 210 | await $.wait(3500) 211 | } catch (error) { 212 | $.logErr(error.toString()); 213 | } 214 | } 215 | $.log('') 216 | $.logs = $.logs.join('
') 217 | }; 218 | 219 | processTokens().finally(async() => { 220 | await sendNotify('三得利任务',$.logs) 221 | $.done() 222 | }); -------------------------------------------------------------------------------- /syns.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 860562056 4 | @Date: 2024.06.10 14.14 5 | @Description: 所有女生小程序 6 | ------------------------------------------ 7 | 变量名wawo 8 | 变量值 https://7.wawo.cc/api/ 域名Headers请求头里面的authorization 去掉bearer 多账号&或换行或新建同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("所有女生会员中心"); 27 | let ckName = `wawo`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 1; 44 | let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index}】 start work\n`); 48 | index++ 49 | $.token = user 50 | $.ckStatus = true; 51 | await getPoints() 52 | await signInInfo() 53 | } 54 | 55 | await $.sendMsg($.logs.join("\n")); 56 | })() 57 | .catch((e) => console.log(e)) 58 | .finally(() => $.done()); 59 | async function getPoints() { 60 | const config = 61 | { 62 | url: 'https://7.wawo.cc/api/score/wx/score/queryAmount', 63 | headers: { 64 | "content-type": "application/json", 65 | 'accept': '*/*', 66 | 'accept-language': 'zh-CN,zh;q=0.9', 67 | 'authorization': 'bearer ' + $.token, 68 | 'content-type': 'application/json', 69 | 'sec-fetch-dest': 'empty', 70 | 'sec-fetch-mode': 'cors', 71 | 'sec-fetch-site': 'cross-site', 72 | 'xweb_xhr': '1', 73 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, 74 | "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` 75 | 76 | } 77 | } 78 | let { data: result } = await Request(config) 79 | 80 | if (result?.code == "000") { 81 | $.log(`账号当前积分[${result.data}]`) 82 | } else { 83 | $.log(`账号积分查询失败[${result.message}]`) 84 | } 85 | } 86 | async function signInInfo() { 87 | const config = 88 | { 89 | url: 'https://7.wawo.cc/api/activity/wx/task/sign/signMsg', 90 | method: "POST", 91 | headers: { 92 | "content-type": "application/json", 93 | 'accept': '*/*', 94 | 'accept-language': 'zh-CN,zh;q=0.9', 95 | 'authorization': 'bearer ' + $.token, 96 | 'content-type': 'application/json', 97 | 'sec-fetch-dest': 'empty', 98 | 'sec-fetch-mode': 'cors', 99 | 'sec-fetch-site': 'cross-site', 100 | 'xweb_xhr': '1', 101 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, 102 | "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` 103 | 104 | }, 105 | data: JSON.stringify({ 106 | "cardNo": "411886986591633408" 107 | }) 108 | } 109 | let { data: result } = await Request(config) 110 | 111 | if (result?.code == "000") { 112 | if (result.data.signed !== 1) { 113 | $.log(`未签到 ===> 签到ing`) 114 | await signIn() 115 | } else { 116 | $.log(`已签到 ===> 跳过签到`) 117 | } 118 | } else { 119 | $.log(`获取签到信息失败[${result.message}]`) 120 | } 121 | } 122 | async function signIn() { 123 | const config = 124 | { 125 | url: 'https://7.wawo.cc/api/activity/wx/task/sign/signIn', 126 | method: "POST", 127 | headers: { 128 | "content-type": "application/json", 129 | 'accept': '*/*', 130 | 'accept-language': 'zh-CN,zh;q=0.9', 131 | 'authorization': 'bearer ' + $.token, 132 | 'content-type': 'application/json', 133 | 'sec-fetch-dest': 'empty', 134 | 'sec-fetch-mode': 'cors', 135 | 'sec-fetch-site': 'cross-site', 136 | 'xweb_xhr': '1', 137 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, 138 | "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` 139 | 140 | }, 141 | data: JSON.stringify({}) 142 | } 143 | let { data: result } = await Request(config) 144 | 145 | if (result?.code == "000") { 146 | $.log(`签到成功`) 147 | } else { 148 | $.log(`签到失败[${result.message}]`) 149 | } 150 | } 151 | 152 | async function done(taskId) { 153 | const config = 154 | { 155 | url: 'https://7.wawo.cc/api/operate/wx/rewards/task/done?taskId=' + taskId, 156 | method: "POST", 157 | 158 | headers: { 159 | "content-type": "application/json", 160 | 'accept': '*/*', 161 | 'accept-language': 'zh-CN,zh;q=0.9', 162 | 'authorization': 'bearer ' + $.token, 163 | 'content-type': 'application/json', 164 | 'sec-fetch-dest': 'empty', 165 | 'sec-fetch-mode': 'cors', 166 | 'sec-fetch-site': 'cross-site', 167 | 'xweb_xhr': '1', 168 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, 169 | "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` 170 | 171 | }, 172 | data: JSON.stringify({ "taskId": taskId }) 173 | } 174 | let { data: result } = await Request(config) 175 | 176 | if (result?.code == "000") { 177 | $.log(`任务成功`) 178 | } else { 179 | $.log(`任务失败[${result.message}]`) 180 | } 181 | } 182 | 183 | 184 | function checkEnv(userCookie) { 185 | const envSplitor = ["&", "\n"]; 186 | //console.log(userCookie); 187 | let userList = userCookie 188 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 189 | .filter((n) => n); 190 | console.log(`共找到${userList.length}个账号`); 191 | return userList; 192 | } 193 | // prettier-ignore 194 | 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) } 195 | 196 | async function Request(options) { 197 | if ($.isNode()) { 198 | const axios = require("axios"); 199 | Request = async (options) => { 200 | try { 201 | return await axios.request(options); 202 | } catch (error) { 203 | return error && error.error ? error.error : "请求失败"; 204 | } 205 | }; 206 | } 207 | if ($.isQuanX()) { 208 | Request = async (options) => { 209 | try { 210 | return await $task.fetch(options); 211 | } catch (error) { 212 | return error && error.error ? error.error : "请求失败"; 213 | } 214 | }; 215 | } 216 | return await Request(options); 217 | } -------------------------------------------------------------------------------- /tbhyzx.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # ✨ 推荐cron:23 8,17 * * * 5 | # ✨✨✨ @Author CHERWIN✨✨✨ 6 | # ------------------------------- 7 | # cron "23 8,17 * * *" script-path=xxx.py,tag=匹配cron用 8 | # const $ = new Env('特步会员中心小程序签到') 9 | import json 10 | import os 11 | from datetime import datetime, date 12 | import requests 13 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 14 | # import CHERWIN_TOOLS 15 | # 禁用安全请求警告 16 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 17 | # 18 | IS_DEV = False 19 | if os.path.isfile('DEV_ENV.py'): 20 | import DEV_ENV 21 | IS_DEV = True 22 | if os.path.isfile('notify.py'): 23 | from notify import send 24 | print("加载通知服务成功!") 25 | else: 26 | print("加载通知服务失败!") 27 | send_msg = '' 28 | one_msg='' 29 | def Log(cont=''): 30 | global send_msg,one_msg 31 | print(cont) 32 | if cont: 33 | one_msg += f'{cont}\n' 34 | send_msg += f'{cont}\n' 35 | 36 | class RUN: 37 | def __init__(self,info,index): 38 | global one_msg 39 | one_msg = '' 40 | split_info = info.split('@') 41 | self.token = json.loads(split_info[0]) 42 | # print(self.token) 43 | len_split_info = len(split_info) 44 | last_info = split_info[len_split_info - 1] 45 | self.send_UID = None 46 | if len_split_info > 0 and "UID_" in last_info: 47 | print('检测到设置了UID') 48 | print(last_info) 49 | self.send_UID = last_info 50 | self.index = index + 1 51 | 52 | self.headers = { 53 | "Host": "wxa-tp.ezrpro.com", 54 | "ezr-source": "weapp", 55 | "limittype": "0", 56 | "ezr-sp": "2", 57 | "uber-trace-id": "9e04a05a0c7e5df3:9e04a05a0c7e5df3:0:1", 58 | "ezr-brand-id": "254", 59 | "needloading": "[object Boolean]", 60 | "ezr-client-name": "EZR.FE.MultiMall.Mini", 61 | "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(0x63090a13) XWEB/8555", 62 | "content-type": "application/json", 63 | "xweb_xhr": "1", 64 | "accept": "*/*", 65 | "sec-fetch-site": "cross-site", 66 | "sec-fetch-mode": "cors", 67 | "sec-fetch-dest": "empty", 68 | "referer": "https://servicewechat.com/wx12e1cb3b09a0e6f0/121/page-frame.html", 69 | "accept-language": "zh-CN,zh;q=0.9" 70 | } 71 | # 72 | # print(self.headers) 73 | for key, value in self.token.items(): 74 | self.headers[key] = value 75 | self.baseUrl = 'https://wxa-tp.ezrpro.com/myvip/' 76 | 77 | 78 | def GetVipCardInfoByVipId(self): 79 | Log('>>>>>>用户信息') 80 | url = "https://wxa-tp.ezrpro.com/myvip/FamilyCard/GetVipCardInfoByVipId" 81 | 82 | response = s.get(url, headers=self.headers) 83 | response = response.json() 84 | # print(response.text) 85 | if response.get('Success',False): 86 | data = response.get('Result', {}) 87 | VipInfo=data.get('VipInfo', {}) 88 | # 手机号 89 | MobileNo=VipInfo.get('MobileNo','') 90 | NickName=VipInfo.get('NickName','') 91 | BonusTotal=VipInfo.get('BonusTotal','') 92 | mobile=MobileNo[:3] + "*" * 4 + MobileNo[7:] 93 | Log(f'>>当前用户:【{NickName}】 手机号:【{mobile}】') 94 | Log(f'>>当前积分:【{BonusTotal}】') 95 | return True 96 | else: 97 | Log('可能token失效了') 98 | return False 99 | 100 | 101 | def GetSignInDtlInfo(self): 102 | Log('>>>>>>获取签到信息') 103 | url = "https://wxa-tp.ezrpro.com/myvip/Vip/SignIn/GetSignInDtlInfo" 104 | response = s.get(url, headers=self.headers) 105 | response = response.json() 106 | # print(response.text) 107 | if response.get('Success',False): 108 | data = response.get('Result', {}) 109 | VipSignInDtl=data.get('VipSignInDtl', {}) 110 | SignedDays=VipSignInDtl.get('SignedDays', '') 111 | IsSigInToday=VipSignInDtl.get('IsSigInToday', False) 112 | SignInCfg = data.get('SignInCfg', {}) 113 | ActId = SignInCfg.get('ActId', '') 114 | if IsSigInToday: 115 | Log(f'>>今日已签到,累计签到:【{SignedDays}】天') 116 | else: 117 | Log('开始签到') 118 | self.SignIn(ActId) 119 | return True 120 | else: 121 | Log('可能token失效了') 122 | return False 123 | 124 | def SignIn(self, ActId): 125 | Log('====== 开始签到 ======') 126 | url = f"{self.baseUrl}Vip/SignIn/SignIn" 127 | data = { 128 | "ActId": ActId, 129 | "ActRemindStatus": True 130 | } 131 | response = s.post(url, headers=self.headers,json=data) 132 | response = response.json() 133 | # print(response) 134 | if response.get('Success', False): 135 | data = response.get('Result', {}) 136 | BonusValue = data.get('BonusValue', '') 137 | Log(f'签到成功,获得:【{BonusValue}】积分') 138 | return True 139 | else: 140 | ErrMsg = response.get('ErrMsg', '') 141 | Log(f'签到失败:{ErrMsg}') 142 | return False 143 | 144 | 145 | def BonusClassify(self): 146 | Log('>>>>>>获取积分信息') 147 | url = "https://wxa-tp.ezrpro.com/myvip/Vip/Bonus/GetMyBonusLogs?pageSize=10&pageIndex=1&BonusClassify=0" 148 | response = s.get(url, headers=self.headers) 149 | response = response.json() 150 | # print(response) 151 | if response.get('Success',False): 152 | data = response.get('Result', {}) 153 | BonusTotal=data.get('BonusTotal', '') 154 | Log(f'当前积分:【{BonusTotal}】') 155 | return True 156 | else: 157 | Log('可能token失效了') 158 | return False 159 | 160 | def main(self): 161 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>") 162 | # if self.WxAppOnLoginNew(): 163 | if self.GetVipCardInfoByVipId(): 164 | # self.GetVipCardInfoByVipId() 165 | self.GetSignInDtlInfo() 166 | self.BonusClassify() 167 | self.sendMsg() 168 | return True 169 | else: 170 | self.sendMsg() 171 | return False 172 | 173 | def sendMsg(self): 174 | if self.send_UID: 175 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME) 176 | print(push_res) 177 | 178 | 179 | def down_file(filename, file_url): 180 | print(f'开始下载:{filename},下载地址:{file_url}') 181 | try: 182 | response = requests.get(file_url, verify=False, timeout=10) 183 | response.raise_for_status() 184 | with open(filename + '.tmp', 'wb') as f: 185 | f.write(response.content) 186 | print(f'【{filename}】下载完成!') 187 | 188 | # 检查临时文件是否存在 189 | temp_filename = filename + '.tmp' 190 | if os.path.exists(temp_filename): 191 | # 删除原有文件 192 | if os.path.exists(filename): 193 | os.remove(filename) 194 | # 重命名临时文件 195 | os.rename(temp_filename, filename) 196 | print(f'【{filename}】重命名成功!') 197 | return True 198 | else: 199 | print(f'【{filename}】临时文件不存在!') 200 | return False 201 | except Exception as e: 202 | print(f'【{filename}】下载失败:{str(e)}') 203 | return False 204 | 205 | def import_Tools(): 206 | global CHERWIN_TOOLS,ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode 207 | import CHERWIN_TOOLS 208 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version) 209 | 210 | if __name__ == '__main__': 211 | APP_NAME = '特步会员中心小程序' 212 | ENV_NAME = 'tbhyzx' 213 | CK_URL = 'https://wxa-tp.ezrpro.com/myvip/Base/User/WxAppOnLoginNew' 214 | CK_NAME = '响应body里的Fields全部内容' 215 | CK_EX = '{"ezr-cop-id":"888","ezr-vuid":"888888","ezr-userid":"aaaaaaa","ezr-sv":"1","ezr-st":"8888","ezr-ss":"bbbbb"}' 216 | print(f''' 217 | ✨✨✨ {APP_NAME}签到✨✨✨ 218 | ✨ 功能: 219 | 积分签到 220 | ✨ 抓包步骤: 221 | 打开{APP_NAME} 222 | 授权登陆 223 | 打开抓包工具 224 | 找{CK_URL}{CK_NAME} 225 | 参数示例:{CK_EX} 226 | ✨ ✨✨wxpusher一对一推送功能, 227 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送 228 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID 229 | ✨ 设置青龙变量: 230 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割 231 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启 232 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包 233 | ✨ 推荐cron:0 6 * * * 234 | ✨✨✨ @Author CHERWIN✨✨✨ 235 | ''') 236 | local_script_name = os.path.basename(__file__) 237 | local_version = '2024.06.02' 238 | if IS_DEV: 239 | import_Tools() 240 | else: 241 | if os.path.isfile('CHERWIN_TOOLS.py'): 242 | import_Tools() 243 | else: 244 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'): 245 | print('脚本依赖下载完成请重新运行脚本') 246 | import_Tools() 247 | else: 248 | print('脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖') 249 | exit() 250 | print(TIPS) 251 | token = '' 252 | token = ENV if ENV else token 253 | if not token: 254 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''") 255 | exit() 256 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token) 257 | # print(tokens) 258 | if len(tokens) > 0: 259 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") 260 | access_token = [] 261 | for index, infos in enumerate(tokens): 262 | s = requests.session() 263 | s.verify = False 264 | run_result = RUN(infos, index).main() 265 | if not run_result: continue 266 | if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML) -------------------------------------------------------------------------------- /this.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 860562056 4 | @Date: 2024.06.09 13.27 5 | @Description: this官方商城小程序 签到 6 | ------------------------------------------ 7 | 变量名this 8 | 变量值https://xcx.this.cn/api/ 域名下请求头Headers中authori-zation的值 去掉Bearer 多账号&或换行或新建同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("this官方商城"); 27 | let ckName = `this`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 1; 44 | let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index}】 start work\n`); 48 | index++ 49 | $.token = user 50 | $.ckStatus = true; 51 | await info() 52 | } 53 | 54 | await $.sendMsg($.logs.join("\n")); 55 | })() 56 | .catch((e) => console.log(e)) 57 | .finally(() => $.done()); 58 | async function info() { 59 | let data = JSON.stringify({ 60 | "sign": 1 61 | }); 62 | 63 | let config = { 64 | method: 'POST', 65 | url: 'https://xcx.this.cn/api/sign/user', 66 | headers: { 67 | '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', 68 | 'Accept-Encoding': 'gzip,compress,br,deflate', 69 | 'Content-Type': 'application/json', 70 | 'charset': 'utf-8', 71 | 'form-type': 'routine', 72 | 'authori-zation': 'Bearer ' + $.token, 73 | 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html' 74 | }, 75 | data: data 76 | }; 77 | let { data: result } = await Request(config) 78 | if (result?.status == 200) { 79 | $.log(`${result.data.nickname} 累计签到[${result.data.sign_num}]天 当前积分[${result.data.integral}]分`) 80 | if (result.data.is_day_sgin !== true) { 81 | $.log(`未签到 ===> 签到ing`) 82 | await signIn() 83 | } else { 84 | $.log(`已签到 ===> 跳过签到`) 85 | } 86 | } else { 87 | $.log(result.msg) 88 | } 89 | } 90 | async function signIn() { 91 | let data = JSON.stringify({}); 92 | 93 | let config = { 94 | method: 'POST', 95 | url: 'https://xcx.this.cn/api/sign/integral', 96 | headers: { 97 | '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', 98 | 'Accept-Encoding': 'gzip,compress,br,deflate', 99 | 'Content-Type': 'application/json', 100 | 'charset': 'utf-8', 101 | 'form-type': 'routine', 102 | 'authori-zation': 'Bearer ' + $.token, 103 | 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html' 104 | }, 105 | data: data 106 | }; 107 | let { data: result } = await Request(config) 108 | if (result?.status == 200) { 109 | $.log(`签到成功:[${result.msg}]`) 110 | } else { 111 | $.log(result.msg) 112 | } 113 | } 114 | 115 | 116 | function checkEnv(userCookie) { 117 | const envSplitor = ["&", "\n"]; 118 | //console.log(userCookie); 119 | let userList = userCookie 120 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 121 | .filter((n) => n); 122 | console.log(`共找到${userList.length}个账号`); 123 | return userList; 124 | } 125 | // prettier-ignore 126 | 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) } 127 | 128 | async function Request(options) { 129 | if ($.isNode()) { 130 | const axios = require("axios"); 131 | Request = async (options) => { 132 | try { 133 | return await axios.request(options); 134 | } catch (error) { 135 | return error && error.error ? error.error : "请求失败"; 136 | } 137 | }; 138 | } 139 | if ($.isQuanX()) { 140 | Request = async (options) => { 141 | try { 142 | return await $task.fetch(options); 143 | } catch (error) { 144 | return error && error.error ? error.error : "请求失败"; 145 | } 146 | }; 147 | } 148 | return await Request(options); 149 | } -------------------------------------------------------------------------------- /xdf.py: -------------------------------------------------------------------------------- 1 | # cron: 16 7 * * * 2 | # const $ = new Env("新东方任务查询"); 3 | import requests 4 | import time 5 | import random 6 | result = [] 7 | def send_request(activity_id): 8 | url = f"https://omc.koolearn.com/api/free-group/detail?_t=1700295545901&activityId={activity_id}" 9 | response = requests.get(url) 10 | if response.status_code == 200: 11 | data = response.json() 12 | dataInfo = data.get("data") 13 | if dataInfo != None: 14 | activity_id = data.get("data",{}).get("activityId") 15 | activity_name = data.get("data",{}).get("activityName") 16 | result.append({'activityId':activity_id,'activityName':activity_name}) 17 | if data.get("code") == 0: 18 | with open("results.txt", "a") as file: 19 | file.write(f"activityId: {activity_id}, activityName: {activity_name}\n") 20 | print(f"Processed activityId: {activity_id}, activityName: {activity_name}") 21 | else: 22 | print(f"Request failed for activityId: {activity_id}, code: {data.get('msg')}") 23 | start = 1500 24 | end = 2500 25 | total_requests = end - start 26 | completed_requests = 0 27 | 28 | for activity_id in range(start, end): 29 | send_request(activity_id) 30 | completed_requests += 1 31 | progress = (completed_requests / total_requests) * 100 32 | print(f"Progress: {progress:.2f}%") 33 | # 生成一个3到5秒之间的随机浮点数 34 | random_time = random.uniform(1, 3) 35 | time.sleep(random_time) # 间隔2秒 36 | print('') 37 | print('统计列表:') 38 | # 打印结果 39 | for data in result: 40 | activity_id = data.get("activityId") 41 | activity_name = data.get("activityName") 42 | print(f'activityId: {activity_id}, activityName: {activity_name}') 43 | print("") 44 | print("获取结束!") 45 | -------------------------------------------------------------------------------- /xhgj.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------ 3 | @Author: smallfawn 4 | @Date: 2024.06.08 13.21 5 | @Description: 小猴工具小程序 6 | ------------------------------------------ 7 | 自己先签到一次 抓请求包https://h5.youzan.com/wscump/checkin/checkinV2.json 后面Url的checkinId和请求头Headers中extra-data里面sid的值 8 | #拼接 多账号&或换行或新建同名变量 9 | [Script] 10 | http-response 11 | 12 | [MITM] 13 | hostname = 14 | 15 | ⚠️【免责声明】 16 | ------------------------------------------ 17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 24 | */ 25 | 26 | const $ = new Env("小猴工具小程序"); 27 | let ckName = `Monkey_WX`; 28 | let userCookie = checkEnv( 29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" 30 | ); 31 | const notify = $.isNode() ? require("./sendNotify") : ""; 32 | 33 | !(async () => { 34 | console.log( 35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( 36 | new Date().getTime() + 37 | new Date().getTimezoneOffset() * 60 * 1000 + 38 | 8 * 60 * 60 * 1000 39 | ).toLocaleString()} \n==================================================` 40 | ); 41 | //console.log(userCookie) 42 | if (!userCookie?.length) return console.log(`没有找到CK哦`); 43 | let index = 0; 44 | let strSplitor = "#"; 45 | 46 | for (let user of userCookie) { 47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`); 48 | $.checkInId = user.split(strSplitor)[0]; 49 | $.sid = user.split(strSplitor)[1]; 50 | await signIn(); 51 | } 52 | 53 | await $.sendMsg($.logs.join("\n")); 54 | })() 55 | .catch((e) => console.log(e)) 56 | .finally(() => $.done()); 57 | async function signIn() { 58 | 59 | let config = { 60 | method: 'GET', 61 | url: 'https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=' + $.checkInId + '&app_id=&kdt_id=&access_token=', 62 | headers: { 63 | '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', 64 | 'Accept-Encoding': 'gzip,compress,br,deflate', 65 | 'charset': 'utf-8', 66 | 'content-type': 'application/json', 67 | 'extra-data': '{"is_weapp":1,"sid":"' + $.sid + '","version":"2.154.3.101","client":"weapp","bizEnv":"wsc","uuid":"","ftime":""}', 68 | 'referer': 'https://servicewechat.com/wx0451bbda59c220a8/95/page-frame.html' 69 | } 70 | }; 71 | let { data: result } = await Request(config) 72 | result?.code == 0 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result)); 73 | 74 | } 75 | 76 | 77 | function checkEnv(userCookie) { 78 | const envSplitor = ["&", "\n"]; 79 | //console.log(userCookie); 80 | let userList = userCookie 81 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&") 82 | .filter((n) => n); 83 | console.log(`共找到${userList.length}个账号`); 84 | return userList; 85 | } 86 | // prettier-ignore 87 | 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) } 88 | 89 | async function Request(options) { 90 | if ($.isNode()) { 91 | const axios = require("axios"); 92 | Request = async (options) => { 93 | try { 94 | return await axios.request(options); 95 | } catch (error) { 96 | throw error && error.error ? error.error : "请求失败"; 97 | } 98 | }; 99 | } 100 | if ($.isQuanX()) { 101 | Request = async (options) => { 102 | try { 103 | return await $task.fetch(options); 104 | } catch (error) { 105 | throw error && error.error ? error.error : "请求失败"; 106 | } 107 | }; 108 | } 109 | return await Request(options); 110 | } -------------------------------------------------------------------------------- /xhxy.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 复制微信打开:https://mx.qrurl.net/s/24211Mky3iJ 3 | 一天一次 4 | 每日任务/签到/学习时长增加 5 | 积分兑换实物卡券 6 | 变量名:xhxy 7 | 填入token,多账号换行或& 8 | 自行抓包token 9 | 自动抓包软群文件有 10 | # cron: 0 7,21 * * * 11 | # const $ = new Env("星火学院"); 12 | ''' 13 | project = 'fireAcademy' 14 | import lzma, base64 15 | exec(lzma.decompress(base64.b64decode('/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4APbASldADSbSme4Ujxz98E0ClwvVjo94gxrJSFdUXCaQNLKTdOsYdLothMkppmNAscozSJk4tdIc96jCFo3keWoy3EcDTbT1ZSwlKaqPKcVyS4no4oaysCKPQ79xk32HCrwl40UCbK6RnfKil4L4YOYIEUuIcpQoUlOvw1+PX1qdn4C/HrQiwXK31ZFmFqXZAFi3R/ZzruxVdnXMRAHX+2zWVgBxbUL5haj4QC0K/kptlSQDkhXGaUH3e/N6KO+QpKWAhOVw9gDR0jAR0c338RXd2AO4D9scmiI5JV9eQi5/NMhtfW5GlluRWqpsJ71rlMDBjggQVFGtkaJvy9jjfa214dkFEkfU4qdKs8ONZKMTdreCOmVHwIV+XydAmlEfhA0yH5kx/50x5hc2wtXUAAAAABCT7Iye8/dnwABxQLcBwAAHhh9kbHEZ/sCAAAAAARZWg=='))) -------------------------------------------------------------------------------- /yl.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # (包含:甄稀冰淇淋,金典SATINE、活力伊利) 4 | # cron "5 9,17 * * *" script-path=xxx.py,tag=匹配cron用 5 | # const $ = new Env('伊利系列小程序') 6 | import json 7 | import os 8 | import random 9 | import time 10 | from datetime import datetime, time as times 11 | import requests 12 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 13 | # 禁用安全请求警告 14 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 15 | 16 | IS_DEV = False 17 | if os.path.isfile('DEV_ENV.py'): 18 | import DEV_ENV 19 | 20 | IS_DEV = True 21 | if os.path.isfile('notify.py'): 22 | from notify import send 23 | 24 | print("加载通知服务成功!") 25 | else: 26 | print("加载通知服务失败!") 27 | send_msg = '' 28 | one_msg = '' 29 | 30 | 31 | def Log(cont=''): 32 | global send_msg, one_msg 33 | print(cont) 34 | if cont: 35 | one_msg += f'{cont}\n' 36 | send_msg += f'{cont}\n' 37 | 38 | 39 | class RUN: 40 | def __init__(self, info, index): 41 | global one_msg 42 | one_msg = '' 43 | split_info = info.split('@') 44 | self.access_token = split_info[0] 45 | len_split_info = len(split_info) 46 | last_info = split_info[len_split_info - 1] 47 | self.send_UID = None 48 | if len_split_info > 0 and "UID_" in last_info: 49 | print('检测到设置了UID') 50 | print(last_info) 51 | self.send_UID = last_info 52 | self.index = index + 1 53 | # print(self.access_token) 54 | self.UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309080f) XWEB/8555' 55 | # if ENV_NAME == 'YL_ZXBQL': 56 | # appid = "wx06af0ef532292cd3" 57 | # scene = "1037" 58 | # scene = "1037" 59 | self.headers = { 60 | "Host": "msmarket.msx.digitalyili.com", 61 | "register-source": "", 62 | "access-token": self.access_token, 63 | "forward-appid": "wx06af0ef532292cd3", 64 | "source-type": "", 65 | "Content-Type": "application/json", 66 | "atv-page": "", 67 | "scene": "1037", 68 | "xweb_xhr": "1", 69 | "User-Agent": self.UA, 70 | "Accept": "*/*", 71 | "tenant-id": "1718857849685876737", 72 | "Sec-Fetch-Site": "cross-site", 73 | "Sec-Fetch-Mode": "cors", 74 | "Sec-Fetch-Dest": "empty", 75 | "Referer": "https://servicewechat.com/wxf32616183fb4511e/564/page-frame.html", 76 | "Accept-Language": "zh-CN,zh;q=0.9" 77 | } 78 | self.s = requests.session() 79 | self.s.verify = False 80 | self.baseUrl = 'https://msmarket.msx.digitalyili.com/gateway/api/member/' 81 | 82 | 83 | def make_request(self, url, method='post', headers={}, data={}, params=None): 84 | if headers == {}: 85 | headers = self.headers 86 | try: 87 | if method.lower() == 'get': 88 | response = self.s.get(url, headers=headers, verify=False, params=params) 89 | elif method.lower() == 'post': 90 | response = self.s.post(url, headers=headers, json=data, params=params, verify=False) 91 | else: 92 | raise ValueError("不支持的请求方法❌: " + method) 93 | return response.json() 94 | except requests.exceptions.RequestException as e: 95 | print("请求异常❌:", e) 96 | except ValueError as e: 97 | print("值错误或不支持的请求方法❌:", e) 98 | except Exception as e: 99 | print("发生了未知错误❌:", e) 100 | 101 | def get_user_info(self): 102 | act_name = '获取用户信息' 103 | Log(f'\n====== {act_name} ======') 104 | url = f"https://msmarket.msx.digitalyili.com/gateway/api/auth/account/user/info" 105 | response = self.make_request(url,method='get') 106 | if response.get('status', False): 107 | print(f'{act_name}成功!✅') 108 | site = {'1520': "活力伊利", '1577': "活力伊利", '1160': '金典SATINE', '1068': '甄稀冰淇淋','1130': '金典有机生活+'} 109 | registerSource = response.get('data', {}).get('registerSource', None) 110 | Log(f'当前Source:【{registerSource}】') 111 | siteName = site.get(registerSource,False) 112 | if not siteName: 113 | Log(f'当前小程序名称识别失败') 114 | Log(f'当前token所属小程序:【{siteName}】') 115 | nickName = response.get('data')['nickName'] 116 | mobile = response.get('data')['mobile'] 117 | mobile = mobile[:3] + "*" * 4 + mobile[7:] 118 | Log(f">用户名:{nickName}\n>手机号:{mobile}") 119 | return True 120 | elif not response: 121 | print(f">账号 {self.index}: ck过期 请重新抓取 access-token") 122 | return False 123 | else: 124 | print(response) 125 | return False 126 | 127 | def get_Point(self,END=False): 128 | act_name = '获取积分信息' 129 | if not END:Log(f'\n====== {act_name} ======') 130 | url = f"{self.baseUrl}point" 131 | response = self.make_request(url,method='get') 132 | if response.get('status', False): 133 | point = response.get('data') 134 | print(f'{act_name}成功!✅') 135 | if END: 136 | Log(f'执行后积分:【{point}】') 137 | else: 138 | Log(f'当前积分:【{point}】') 139 | return True 140 | else: 141 | print(response) 142 | return False 143 | 144 | def daily_sign(self): 145 | act_name = '签到' 146 | Log(f'\n====== {act_name} ======') 147 | url = f"{self.baseUrl}daily/sign" 148 | response = self.make_request(url) 149 | if response.get('status', False): 150 | data = response.get('data',{}) 151 | dailySign = data.get('dailySign', None) 152 | if dailySign != None: 153 | point = dailySign.get('bonusPoint', '') 154 | print(f'{act_name}成功!✅') 155 | Log(f'获得积分:【{point}】') 156 | return True 157 | else: 158 | print(response) 159 | return False 160 | 161 | def get_sign_status(self): 162 | act_name = '获取签到信息' 163 | Log(f'\n====== {act_name} ======') 164 | url = f"{self.baseUrl}sign/status" 165 | response = self.make_request(url,method='get') 166 | if response.get('status', False): 167 | data = response.get('data',{}) 168 | signed = data.get('signed','') 169 | signedDays = data.get('signedDays','') 170 | monthSignDays = data.get('monthSignDays','') 171 | monthDays = data.get('monthDays','') 172 | weekSignDays = data.get('weekSignDays','') 173 | print(f'{act_name}成功!✅') 174 | Log(f'今日:【{"已签到" if signed else "未签到"}】') 175 | print(f'累计签到:【{signedDays}】天') 176 | print(f'周签:【{weekSignDays}】天') 177 | print(f'月签:【{monthSignDays}/{monthDays}】天') 178 | if not signed: 179 | self.daily_sign() 180 | return True 181 | else: 182 | print(response) 183 | return False 184 | 185 | 186 | def main(self): 187 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>") 188 | 189 | if self.get_user_info(): 190 | random_delay() 191 | self.get_Point() 192 | random_delay() 193 | self.get_sign_status() 194 | random_delay() 195 | self.get_Point(True) 196 | 197 | 198 | self.sendMsg() 199 | return True 200 | else: 201 | self.sendMsg() 202 | return False 203 | 204 | def sendMsg(self): 205 | if self.send_UID: 206 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME) 207 | print(push_res) 208 | 209 | 210 | def random_delay(min_delay=1, max_delay=5): 211 | """ 212 | 在min_delay和max_delay之间产生一个随机的延时时间,然后暂停执行。 213 | 参数: 214 | min_delay (int/float): 最小延时时间(秒) 215 | max_delay (int/float): 最大延时时间(秒) 216 | """ 217 | delay = random.uniform(min_delay, max_delay) 218 | print(f">本次随机延迟:【{delay:.2f}】 秒.....") 219 | time.sleep(delay) 220 | 221 | 222 | def down_file(filename, file_url): 223 | print(f'开始下载:{filename},下载地址:{file_url}') 224 | try: 225 | response = requests.get(file_url, verify=False, timeout=10) 226 | response.raise_for_status() 227 | with open(filename + '.tmp', 'wb') as f: 228 | f.write(response.content) 229 | print(f'【{filename}】下载完成!') 230 | 231 | # 检查临时文件是否存在 232 | temp_filename = filename + '.tmp' 233 | if os.path.exists(temp_filename): 234 | # 删除原有文件 235 | if os.path.exists(filename): 236 | os.remove(filename) 237 | # 重命名临时文件 238 | os.rename(temp_filename, filename) 239 | print(f'【{filename}】重命名成功!') 240 | return True 241 | else: 242 | print(f'【{filename}】临时文件不存在!') 243 | return False 244 | except Exception as e: 245 | print(f'【{filename}】下载失败:{str(e)}') 246 | return False 247 | 248 | 249 | def import_Tools(): 250 | global CHERWIN_TOOLS, ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode 251 | import CHERWIN_TOOLS 252 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version) 253 | 254 | 255 | if __name__ == '__main__': 256 | APP_NAME = '伊利系列小程序' 257 | ENV_NAME = 'yl' 258 | CK_URL = 'msmarket.msx.digitalyili.com请求头' 259 | CK_NAME = 'access-token' 260 | CK_EX = 'wTUhu5IlL9uQDRelKgMRbao2bxii+O8+4FffOnxxxxxxx' 261 | print(f''' 262 | ✨✨✨ {APP_NAME}脚本✨✨✨ 263 | ✨ (包含:甄稀冰淇淋,金典SATINE、活力伊利) 264 | ✨ 功能: 265 | 积分签到 266 | ✨ 抓包步骤: 267 | 打开{APP_NAME} 268 | 授权登陆 269 | 打开抓包工具 270 | 找{CK_URL}{CK_NAME} 271 | 参数示例:{CK_EX} 272 | ✨ ✨✨wxpusher一对一推送功能, 273 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送 274 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID 275 | ✨ 设置青龙变量: 276 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割 277 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启 278 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包 279 | ✨ 推荐cron:5 9 * * * 280 | ✨✨✨ @Author CHERWIN✨✨✨ 281 | ''') 282 | local_script_name = os.path.basename(__file__) 283 | local_version = '2024.06.05' 284 | if IS_DEV: 285 | import_Tools() 286 | else: 287 | if os.path.isfile('CHERWIN_TOOLS.py'): 288 | import_Tools() 289 | else: 290 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'): 291 | print('脚本依赖下载完成请重新运行脚本') 292 | import_Tools() 293 | else: 294 | print( 295 | '脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖') 296 | exit() 297 | print(TIPS) 298 | token = '' 299 | token = ENV if ENV else token 300 | if not token: 301 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''") 302 | exit() 303 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token) 304 | # print(tokens) 305 | if len(tokens) > 0: 306 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") 307 | access_token = [] 308 | for index, infos in enumerate(tokens): 309 | run_result = RUN(infos, index).main() 310 | if not run_result: continue 311 | if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML) --------------------------------------------------------------------------------