特别声明 这是学习资料,您必须在下载后的24小时内从计算机或手机中完全删除以上内容。
文档中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
禁止任何公众号、自媒体进行任何形式的转载、发布提及所有的资源文件。
不对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。
间接使用脚本的任何用户,包括但不限于建立 VPS 或在某些行为违反国家/地区法律或相关法规的情况下进行传播,因此引起的任何隐私泄漏或其他后果概不负责。
请勿将本项目的任何内容用于商业或非法目的,否则后果自负。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本。
食用方法 移动端首页,F12 进入审查元素,模拟手机端,于 Emulated Device 设置下 width 与 height 随意,本文设置 400x700,键入 User agent string 同时设置 Mobile 类型
1 jdapp;android;8.5 .12 ;9 ;network/wifi;model/GM1910 ;addressid/1302541636 ;aid/ac31e03386ddbec6;oaid/;osVer/28 ;appBuild/73078 ;adk/;ads/;pap/JA2015 _311210|8.5 .12 |ANDROID 9 ;osv/9 ;pv/117.24 ;jdv/0 |kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552 |1589905794 ;ref/com.jingdong .app .mall .WebActivity ;partner/oppo;apprpd/Home _Main;Mozilla /5.0 (Linux ; Android 9 ; GM1910 Build /PKQ1 .190110 .001 ; wv) AppleWebKit /537.36 (KHTML , like Gecko ) Version /4.0 Chrome /66.0 .3359 .126 MQQBrowser /6.2 TBS /044942 Mobile Safari /537.36
获取 pt_key pt_pin wskey 后续用
1 - Docker 版方法 1.3 安装 Docker 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 apt install docker docker-compose -y apt install git -y sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum install -y yum-utilssudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo rpm -qa | grep podman sudo dnf remove podmansudo yum erase podman buildahsudo yum install docker-ce docker-ce-cli containerd.iosudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors" : ["https://apgrrx6f.mirror.aliyuncs.com" ] } EOF sudo systemctl daemon-reloadsudo systemctl restart dockersudo docker version
其中,registry-mirrors 镜像加速链接,可以登录阿里云控制台,并打开容器镜像服务 页面,复制加速器地址。
以及 Docker-compose
1 2 3 4 5 6 7 8 9 10 11 sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s) -$(uname -m) " -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo pip3 install docker-composedocker-compose --version
1.4 配置 拉取代码git clone https://github.com/chinnkarahoi/jd-scripts-docker
并打开目录
国内服务器报超时可以修改 hosts vim /etc/hosts
1 2 3 199.232.96.133 raw.githubusercontent.com 151.101.88.133 raw.githubusercontent.com 151.101.100.133 assets-cdn.github.com
如果还是超时,先 push 到自己的 Gitee 再 clone
修改参数 vim env/env1
将自己获取的 pt_key pt_pin 填入即可
如果还需微信通知,可以获取 server 酱 SCKEY 填入./env/all 的 PUSH_KEY
1.5 启动 docker-compose up --build --force-recreate --detach jd1
等待进程完成即可,然后进行签到测试,确认可以签到等操作后,即可每天定时执行脚本。
docker exec jd1 bash -c 'set -o allexport; source /all; source /env; source /jd-scripts-docker/resolve.sh; cd /scripts; node jd_bean_sign.js'
最后获取助力码,请确保运行了几个小时(最好一天)之后再运行此脚本获取助力码。
bash get-code.sh
2 - 青龙面板方法 1依旧基于 docker 请自行部署好,或者 群晖/威联通 里面的 Docker 中心/Container Station ,再或者宝塔面板直接 pull 镜像即可。
docker pull whyour/qinglong:latest
然后开始创建容器
1 2 3 4 5 6 7 8 9 10 11 12 13 docker run -dit \ -v $pwd /ql/config:/ql/config \ -v $pwd /ql/log:/ql/log \ -v $pwd /ql/db:/ql/db \ -v $pwd /ql/scripts:/ql/scripts \ -v $pwd /ql/jbot:/ql/jbot \ -p 5700:5678 \ -e ENABLE_HANGUP=true \ -e ENABLE_WEB_PANEL=true \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglong:latest
如无报错,这时候打开浏览器 http://ip:5678 即可看到面板,使用账户密码均为 admin 进行登录,会提醒重置密码,密码存放点为vim /ql/config/auth.json
然后自行自定义密码。
针对 NAS 上的 Docker,可以参考VAY 东东 方法
作者提供了 docker run 部署命令,但对于群晖来说还得进入 SSH 下操作,略显不便,可以使用导入 JSON 方法
下一步配置扫码面板,首先下载文件config.zip 到/ql/config 目录下 unzip 解压,然后nohup ./JDC
运行即可,访问浏览器 http://ip:5701 进入 JDC 网页控制面板即表示成功。再者扫码,使用 jd 登录,获取到 cookie 回到青龙面板查看 Session 添加成功。
最后添加定时任务,定时规则为27 8,12,16,20,0 * * *
添加成功后,点击执行即可,如想配置消息推送可以点击左方配置文件,按照说明填写相应的 token 即可。
1 2 3 4 ql repo https://ghproxy.com/https://github.com/chinnkarahoi/jd_scripts.git "jd_|jx_|getJDCookie" "activity|backUp" "^jd[^_]|USER" ql repo https://ghproxy.com/https://github.com/whyour/hundun.git "quanx" "tokens|caiyun|didi|donate|fold|Env"
3 - 青龙面板方法 2 一键安装,键入命令即可
1 2 3 yum update -y bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) wget -q https://yanyu.ltd/https://raw.githubusercontent.com/yanyuwangluo/VIP/main/Scripts/sh/ql.sh -O ql.sh && bash ql.sh
详见青龙教程合集
润色方法 1 - 依赖库追加 一键安装大部分依赖(针对 Faker3)
curl -fsSL [https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh](https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh) | sh
结束后应重启 docker
本地 Sign 脚本依赖安装(针对 Faker3)
1 2 3 4 5 6 7 mkdir -p /mydata/redis/conftouch /mydata/redis/conf/redis.confdocker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -itd redis redis-server /etc/redis/redis.conf \ --appendonly yes
结束后运行一次 jd_check_dependent.py
NodeJs 环境安装
js-base64 dotenv magic tough-cookie ws require requests date-fns ts-md5 typescript json5 axios crypto-js png-js node-telegram-bot-api fs jsdom form-data jieba tslib ds jsdom -g prettytable ql common node-jsencrypt juejin-helper moment global-agent
Python3 环境安装
jieba PyExecJS ping3 canvas Crypto ds requests pycryptodome
Linux 环境安装
bizCode bizMsg lxml libc-dev gcc g++ libffi-dev python3-dev
2 - 在库列表 Faker3 内部互助版【无助力池】 1 ql repo https://github.com/shufflewzc/faker3.git "jd_|jx_|gua_|jddj_|jdCookie" "activity|backUp" "^jd[^_]|USER|function|utils|sendNotify|ZooFaker_Necklace.js|JDJRValidator_|sign_graphics_validate|ql|JDSignValidator" "main"
gys619/Absinthe 1 ql repo https://github.com/gys619/Absinthe.git "jd_|jx_|jddj_|gua_|getJDCookie|wskey" "activity|backUp" "^jd[^_]|USER|utils|ZooFaker_Necklace|JDJRValidator_|sign_graphics_validate|jddj_cookie|function|ql|magic|JDJR|JD" "main"
KingRan/KR 1 ql repo https://github.com/gys619/Absinthe.git "jd_|jx_|jddj_|gua_|getJDCookie|wskey" "activity|backUp" "^jd[^_]|USER|utils|ZooFaker_Necklace|JDJRValidator_|sign_graphics_validate|jddj_cookie|function|ql|magic|JDJR|JD" "main"
ql repo https://github.com/KingRan/KR.git “jd*|jx*|jdCookie” “activity|backUp” “^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR”
6dylan6/jdpro 新势力 1 ql repo https://github.com/gys619/Absinthe.git "jd_|jx_|jddj_|gua_|getJDCookie|wskey" "activity|backUp" "^jd[^_]|USER|utils|ZooFaker_Necklace|JDJRValidator_|sign_graphics_validate|jddj_cookie|function|ql|magic|JDJR|JD" "main"
ql repo https://github.com/6dylan6/jdpro.git “jd*|jx*|jddj*” “backUp” “^jd[^*]|USER|JD|function|sendNotify”
小埋 yyds【无助力池】 1 ql repo https://github.com/okyyds/yyds.git "jd_|jx_|gua_|jddj_|jdCookie" "activity|backUp" "^jd[^_]|USER|function|utils|sendNotify|ZooFaker_Necklace.js|JDJRValidator_|sign_graphics_validate|ql|JDSignValidator" "master"
zero205/JD_tencent_scf 腾讯小程序 1 ql repo https://github.com/zero205/JD_tencent_scf.git "jd_|jx_|jdCookie" "backUp|icon" "^jd[^_]|USER|sendNotify|sign_graphics_validate|JDJR|JDSign|ql" "main"
ccwav 通知增强版和 CK 检测 1 ql repo https://github.com/ccwav/QLScript2.git "jd_" "NoUsed" "ql|sendNotify"
smiek2121 开卡 1 ql repo https://github.com/smiek2121/scripts.git "gua_" "" "ZooFaker_Necklace.js|JDJRValidator_Pure.js|sign_graphics_validate.js|cleancart_activity.js|jdCookie.js|sendNotify.js"
特殊活动 1 - 双 11 全民养红包(2019) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 var MAX_CYCLES = 3 ;var currentCycle = 0 ;var main = (executeNextCycle ) => { var secretp = "" ; var taskList = []; (() => { var frame = document .createElement ("iframe" ); frame.style .display = "none" ; document .body .appendChild (frame); window .alert = frame.contentWindow .alert ; })(); var request = (functionId, body = {} ) => fetch ("https://api.m.jd.com/client.action" , { body : `functionId=${functionId} &body=${JSON .stringify( body )} &client=wh5&clientVersion=1.0.0` , headers : { "content-type" : "application/x-www-form-urlencoded" , }, method : "POST" , credentials : "include" , }); var collector = (task, actionType ) => { console .log (actionType ? "@领取任务:" : "@执行任务:" , task); request ("cakebaker_ckCollectScore" , { taskId : task.taskId , itemId : task.itemId , actionType : actionType ? 1 : undefined , safeStr : JSON .stringify ({ secretp }), }) .then ((res ) => res.json ()) .then ((res ) => { console .log ("调用结果:" , res.data ); if (!actionType) { start (); } }); }; var superiorTask = (() => { var isBusy = false ; return (rawTaskCollection ) => { var getFeedDetail = (copiedTaskCollection ) => { request ("cakebaker_getFeedDetail" , { taskIds : copiedTaskCollection["productInfoVos" ] .map ((item ) => item.itemId ) .toString (), }) .then ((res ) => res.json ()) .then ((res ) => { var result = res.data .result ; var taskCollectionContentKeyName = Object .keys (result).find ( (keyName ) => /Vos?$/ .test (keyName) && !["taskVos" ].includes (keyName) ); result[taskCollectionContentKeyName].forEach ((taskCollection ) => { Array (taskCollection.maxTimes - taskCollection.times ) .fill (true ) .forEach ((_, index ) => { taskList.unshift ({ taskName : taskCollection.taskName , taskId : taskCollection.taskId , taskType : taskCollection.taskType , waitDuration : taskCollection.waitDuration , itemId : taskCollection.productInfoVos [index].itemId , }); }); }); isBusy = false ; }); }; if (!isBusy) { isBusy = true ; getFeedDetail (JSON .parse (JSON .stringify (rawTaskCollection))); } else { setTimeout ( getFeedDetail, 1000 , JSON .parse (JSON .stringify (rawTaskCollection)) ); } }; })(); var start = ( ) => { var task = taskList.pop (); if (task) { if (!["小精灵" , "连签得金币" ].includes (task.taskName )) { setTimeout (collector, 0 , task, true ); } setTimeout (collector, (2 + task.waitDuration ) * 1000 , task); } else { executeNextCycle (); } }; (() => { Promise .all ([ request ("cakebaker_getHomeData" ), new Promise ((resolve ) => { setTimeout (() => { request ("cakebaker_getTaskDetail" ).then (resolve); }, 1000 ); }), ]) .then (([homeData, taskData] ) => Promise .all ([homeData.json (), taskData.json ()]) ) .then (([homeData, taskData] ) => { if (taskData.data .bizCode !== 0 ) { if ( taskData.data .bizCode === -7 && !~navigator.userAgent .indexOf ("jdapp" ) ) { console .log ("当前浏览器 UA:" + navigator.userAgent ); throw "任务详情获取失败,请确保已设置正确的浏览器 User-Agent。" ; } else { throw `【错误信息:${JSON .stringify(taskData.data)} 】` ; } } secretp = homeData.data .result .cakeBakerInfo .secretp ; taskData.data .result .taskVos .forEach (async (taskCollection) => { if (/助力|站队/ .test (taskCollection.taskName )) return ; if (taskCollection["productInfoVos" ]) { superiorTask (taskCollection); } var taskCollectionContentKeyName = Object .keys (taskCollection).find ( (keyName ) => /Vos?$/ .test (keyName) && !["productInfoVos" , "scoreRuleVos" ].includes (keyName) ); taskCollectionContent = taskCollection[taskCollectionContentKeyName]; if (!taskCollectionContent) return ; Array (taskCollection.maxTimes - taskCollection.times ) .fill (true ) .forEach ((_, index ) => { taskList.push ({ taskName : taskCollection.taskName , taskId : taskCollection.taskId , taskType : taskCollection.taskType , waitDuration : taskCollection.waitDuration , itemId : taskCollectionContent instanceof Array ? taskCollectionContent[index].itemId : taskCollectionContent.itemId , }); }); }); console .log (taskList); start (); }); })(); }; var excuteMain = ( ) => { console .log ( `💡 正在执行第 ${currentCycle + 1 } 轮任务,还有 ${ MAX_CYCLES - (currentCycle + 1 ) } 轮未执行。` ); new Promise (main).then (() => { currentCycle++; if (currentCycle < MAX_CYCLES ) { excuteMain (); } else { console .log ("@任务已完成!" ); alert ("任务完成!" ); } }); }; excuteMain ();
2 - 618 全民营业(2020) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 (() => { const REQUEST_INTERVAL = 3000 ; const MAIN_FLOW_MAX_COUNT = 3 ; const API = { GET_HOME_DATA : "stall_getHomeData" , GET_TASK_DATA : "stall_getTaskDetail" , GET_FEED_DATA : "stall_getFeedDetail" , GET_ALL_SHOP : "stall_myShop" , COLLECT_SCORE : "stall_collectScore" , COLLECT_PRODUCE_SCORE : "stall_collectProduceScore" , }; let secretp = "" ; let taskList = []; let mainFlowCount = 0 ; const request = (functionId, body = {} ) => fetch ("https://api.m.jd.com/client.action" , { body : `functionId=${functionId} &body=${JSON .stringify(body)} &client=wh5` , headers : { "content-type" : "application/x-www-form-urlencoded" , }, method : "POST" , credentials : "include" , }); (() => { const frame = document .createElement ("iframe" ); frame.style .display = "none" ; document .body .appendChild (frame); window .alert = frame.contentWindow .alert ; })(); const scoreCollector = (task, actionType, lastResolve, additional = {} ) => request ( API .COLLECT_SCORE , Object .assign ( { taskId : task.taskId , itemId : task.itemId , actionType, ss : JSON .stringify ({ secretp }), }, additional ) ) .then ((res ) => res.json ()) .then ((res ) => { console .log ( (actionType ? "领取" : "执行" ) + "任务:" , task, ",调用结果:" , res.data || res ); return new Promise ((resolve ) => { if (actionType) { setTimeout ( scoreCollector, task.waitDuration * 1000 + REQUEST_INTERVAL , task, undefined , resolve ); } else { setTimeout (() => { lastResolve ? lastResolve () : resolve (); }, REQUEST_INTERVAL ); } }); }); const processFeedTask = (rawTaskId ) => request (API .GET_FEED_DATA , { taskId : rawTaskId, }) .then ((res ) => res.json ()) .then ((res ) => { const result = res.data .result ; const taskCollectionContentKeyName = Object .keys (result).find ( (keyName ) => /Vos?$/ .test (keyName) ); result[taskCollectionContentKeyName].forEach ((taskCollection ) => { Array (taskCollection.maxTimes - taskCollection.times ) .fill (true ) .forEach ((_, index ) => { taskList.unshift ({ taskName : taskCollection.taskName , taskId : taskCollection.taskId , waitDuration : taskCollection.waitDuration , itemId : taskCollection.productInfoVos [index].itemId , }); }); }); }); const mainFlow = ( ) => Promise .all ([ request (API .GET_HOME_DATA ), request (API .GET_TASK_DATA ), ]) .then (([homeData, taskData] ) => Promise .all ([homeData.json (), taskData.json ()]) ) .then (async ([homeData, taskData]) => { secretp = homeData.data .result .homeMainInfo .secretp ; for (const taskCollection of taskData.data .result .taskVos ) { if (/助力|商圈|会员/ .test (taskCollection.taskName )) continue ; if (taskCollection["productInfoVos" ]) { await processFeedTask (taskCollection.taskId ); continue ; } const taskCollectionContentKeyName = Object .keys (taskCollection).find ( (keyName ) => !["productInfoVos" , "scoreRuleVos" ].includes (keyName) && /Vos?$/ .test (keyName) ); taskCollectionContent = taskCollection[taskCollectionContentKeyName]; if (!taskCollectionContent) return ; Array (taskCollection.maxTimes - taskCollection.times ) .fill (true ) .forEach ((_, index ) => { const content = taskCollectionContent instanceof Array && taskCollectionContent[index]; taskList.push ({ taskName : content ? content.title || content.shopName : taskCollection.taskName , taskId : taskCollection.taskId , waitDuration : taskCollection.waitDuration , itemId : content ? content.itemId : taskCollectionContent.itemId , }); }); } console .warn ("任务列表:" , taskList); for (const task of taskList) await scoreCollector (task, task.waitDuration ? 1 : undefined ); mainFlowCount++; console .warn ( "主流程已完成" + mainFlowCount + "次,还有" + (MAIN_FLOW_MAX_COUNT - mainFlowCount) + "次待执行" ); return new Promise ((resolve ) => setTimeout (resolve, REQUEST_INTERVAL )); }); const processBusinessMapTask = ( ) => request (API .GET_ALL_SHOP ) .then ((res ) => res.json ()) .then (async (res) => { const shops = res.data .result .shopList ; taskList = []; for (let shop of shops) { console .log (`正在获取【${shop.name} 】门店的任务` ); await request (API .GET_TASK_DATA , { shopSign : shop.shopId , }) .then ((res ) => res.json ()) .then ((res ) => { const taskCollections = res.data .result .taskVos ; taskCollections.forEach ((taskCollection ) => { const taskCollectionContentKeyName = Object .keys ( taskCollection ).find ( (keyName ) => !["scoreRuleVos" ].includes (keyName) && /Vos?$/ .test (keyName) ); const taskCollectionContent = taskCollection[taskCollectionContentKeyName]; Array (taskCollection.maxTimes - taskCollection.times ) .fill (true ) .forEach ((_, index ) => { taskList.unshift ({ taskName : `【${shop.name} 】${taskCollection.taskName} ` , taskId : taskCollection.taskId , shopSign : shop.shopId , waitDuration : taskCollection.waitDuration , itemId : taskCollectionContent instanceof Array ? taskCollectionContent[index].itemId : taskCollectionContent.itemId , }); }); }); return new Promise ((resolve ) => setTimeout (resolve, REQUEST_INTERVAL ) ); }); } console .warn ("营业版图任务列表:" , taskList); for (const task of taskList) await scoreCollector ( task, task.waitDuration ? 1 : undefined , undefined , { shopSign : task.shopSign } ); }); const collectProduceScore = ( ) => request (API .COLLECT_PRODUCE_SCORE , { ss : JSON .stringify ({ secretp }), }) .then ((res ) => res.json ()) .then ((res ) => { console .warn ("收取金币 " + res.data .result .produceScore + " 枚金币。" ); }); const flows = async ( ) => { if (!~navigator.userAgent .indexOf ("jdapp" )) { return console .error ("请确保已设置正确的浏览器 User-Agent." ); } for (let i = 0 ; i < MAIN_FLOW_MAX_COUNT ; i++) { await mainFlow (); } await collectProduceScore (); await processBusinessMapTask (); alert ("任务完成" ); }; flows (); })();
3 - 618 热爱狂欢趴(2021) 活动地址:urlsite
1 2 3 4 5 javascript : void (function ( ) { var scriptTag = document .createElement ("script" ); scriptTag.src = "https://tyh52.com/jd/jdresource/jd_zoo.js" ; document .body .appendChild (scriptTag); })();
4 - 708 热爱狂欢趴(2021) 活动地址:urlsite
1 2 3 青龙 ql raw https : 12 9 ,11 ,13 ,15 ,17 * * *
5 - 双十一热爱环游记(2021) 活动地址:urlsite
6 - 双十一击鼓大作战(2022) 备注:开始 wskey 转化
写在最后 推荐国内 IP 服务器,最好是小众的,国外的 ip 用久了,会不会有什么影响也不知道
尽量使用小号,即使被老东家打骨折了,block 了也不会太心疼