Collect authenticated Qinglong scripts batch
This commit is contained in:
58
脚本库/web版/抓包/17k/2023-03-01_17k_dfe209b3.js
Normal file
58
脚本库/web版/抓包/17k/2023-03-01_17k_dfe209b3.js
Normal file
@@ -0,0 +1,58 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/17k.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/17k.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/17k.js
|
||||
// # UploadedAt: 2023-03-01T15:17:32Z
|
||||
// # SHA256: dfe209b30bd8581cd2b2b80fac56de604614270edda9a410af9ccb054389cc3b
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
//17k小说签到 app/网页cookie通用
|
||||
const axios = require("axios");
|
||||
const y7kck = config.y7k.cookie
|
||||
function get(url, method = "get", data = null) {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
let headers = { "cookie" : y7kck }
|
||||
if (method == "get") res = await axios.get(url, {
|
||||
headers
|
||||
});
|
||||
if (method == "post") res = await axios.post(url, data, {
|
||||
headers
|
||||
});
|
||||
resolve(res.data)
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
resolve("签到接口请求出错")
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
async function y7k() {
|
||||
my = "";signResult1 ="";signResult2 ="";
|
||||
//网页签到
|
||||
let res1 = await get("https://h5.17k.com/userSigninH5/saveUserSigninH5.html", "post", "0")
|
||||
signResult1 = res1.msg
|
||||
|
||||
//app任务 阅读30min
|
||||
let res2 =await get("http://api.17k.com/user/task/receive-prize","post","taskId=5&cpsOpid=0&_filterData=1&device_id=32536325221b1ba1&channel=0&_versions=1110&merchant=17Kyyb&platform=2&manufacturer=Xiaomi&clientType=1&appKey=4037465544&model=Redmi%20K30&cpsSource=0&brand=Redmi")
|
||||
console.log(res2.status.msg)
|
||||
|
||||
//app签到
|
||||
let signInfo = await get("http://api.17k.com/sign/user/info?access_token=1&clientType=1&cpsOpid=0&_filterData=1&channel=0&_versions=1070&merchant=17Kyyb&appKey=4037465544&cpsSource=0&platform=2")
|
||||
signResult2 =(signInfo.status.code == 0)?"签到成功":signInfo.status.msg
|
||||
|
||||
//查询
|
||||
let info = await get("http://api.17k.com/user/mine/merge?access_token=1&accountInfo=1&bindInfo=1&benefitsType=1&cpsOpid=0&_filterData=1&device_id=&channel=0&_versions=1230&merchant=17Khwyysd&platform=2&manufacturer=Xiaomi&clientType=1&width=1080&appKey=4037465544&cpsSource=0&youthModel=0&height=2175")
|
||||
if (info.status.code == 0 && info.data) {
|
||||
data = info.data
|
||||
my = `昵称:${data.nickname}\nK币:${data.accountInfo.balance}\nVIP:Lv${data.vipLevel}\n代金券:${data.accountInfo.totalBalance}\n推荐票:${data.cardInfo.recommendTicketCount}\napp签到:${signResult2}\nweb签到:${signResult1}`
|
||||
} else my = info.status.msg
|
||||
console.log(my)
|
||||
return "【17k小说】:"+my
|
||||
}
|
||||
|
||||
//y7k()
|
||||
module.exports = y7k;
|
||||
297
脚本库/web版/抓包/B站每日任务/2026-05-23_Bilibili_3f2f0084.py
Normal file
297
脚本库/web版/抓包/B站每日任务/2026-05-23_Bilibili_3f2f0084.py
Normal file
@@ -0,0 +1,297 @@
|
||||
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/Bilibili.py
|
||||
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Bilibili.py
|
||||
# Repo: CN-Grace/QinglongScripts
|
||||
# Path: Bilibili.py
|
||||
# UploadedAt: 2026-05-23T15:48:24Z
|
||||
# SHA256: 3f2f0084618aefdba5d3f7361244ebec508c7db5a09cbe80d0b8170bb5d2d27f
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
cron: 0 0 * * *
|
||||
new Env("B站每日任务")
|
||||
Bilibili 每日任务脚本
|
||||
- 漫画签到
|
||||
- 投币任务(支持指定投币数和投币来源)
|
||||
- 观看视频任务
|
||||
- 分享视频任务
|
||||
- 银瓜子兑换硬币(可选)
|
||||
- 获取今日经验、当前经验、预计升级天数
|
||||
"""
|
||||
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
|
||||
from utils import log_info, log_success, log_warning, log_error, beijing_time_str
|
||||
from notifier import send as notify_send
|
||||
|
||||
# ==================== 用户配置 ====================
|
||||
BILIBILI_COOKIE = os.environ.get("BILIBILI_COOKIE", "")
|
||||
COIN_NUM = int(os.environ.get("BILIBILI_COIN_NUM", "0"))
|
||||
COIN_TYPE = int(os.environ.get("BILIBILI_COIN_TYPE", "1"))
|
||||
SILVER2COIN = os.environ.get("BILIBILI_SILVER2COIN", "false").lower() == "true"
|
||||
|
||||
report_data = {}
|
||||
|
||||
|
||||
# ---------- Bilibili API ----------
|
||||
def get_nav(session):
|
||||
"""获取用户导航信息"""
|
||||
url = "https://api.bilibili.com/x/web-interface/nav"
|
||||
ret = session.get(url=url).json()
|
||||
data = ret.get("data", {})
|
||||
return data.get("uname"), data.get("mid"), data.get("isLogin"), data.get("money"), data.get("vipType"), data.get("level_info", {}).get("current_exp")
|
||||
|
||||
|
||||
def get_today_exp(session):
|
||||
"""获取今日经验明细"""
|
||||
url = "https://api.bilibili.com/x/member/web/exp/log?jsonp=jsonp"
|
||||
today = beijing_time_str("%Y-%m-%d")
|
||||
try:
|
||||
data_list = session.get(url=url).json().get("data", {}).get("list", [])
|
||||
return list(filter(lambda x: x["time"].split()[0] == today, data_list))
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
|
||||
def manga_sign(session, platform="android"):
|
||||
"""漫画签到"""
|
||||
try:
|
||||
url = "https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn"
|
||||
ret = session.post(url=url, data={"platform": platform}).json()
|
||||
if ret["code"] == 0:
|
||||
return "✅ 签到成功"
|
||||
elif ret.get("msg") == "clockin clockin is duplicate":
|
||||
return "✅ 今天已经签到过了"
|
||||
else:
|
||||
msg = f"❌ 签到失败: {ret.get('msg', '未知错误')}"
|
||||
log_error(msg)
|
||||
return msg
|
||||
except Exception as e:
|
||||
msg = f"❌ 签到异常: {e!s}"
|
||||
log_error(msg)
|
||||
return msg
|
||||
|
||||
|
||||
def report_task(session, bili_jct, aid, cid, progres=300):
|
||||
"""上报视频观看进度"""
|
||||
url = "http://api.bilibili.com/x/v2/history/report"
|
||||
return session.post(url=url, data={"aid": aid, "cid": cid, "progres": progres, "csrf": bili_jct}).json()
|
||||
|
||||
|
||||
def share_task(session, bili_jct, aid):
|
||||
"""分享视频"""
|
||||
url = "https://api.bilibili.com/x/web-interface/share/add"
|
||||
return session.post(url=url, data={"aid": aid, "csrf": bili_jct}).json()
|
||||
|
||||
|
||||
def get_followings(session, uid, pn=1, ps=50, order="desc", order_type="attention"):
|
||||
"""获取关注的 up 主列表"""
|
||||
params = {"vmid": uid, "pn": pn, "ps": ps, "order": order, "order_type": order_type}
|
||||
return session.get(url="https://api.bilibili.com/x/relation/followings", params=params).json()
|
||||
|
||||
|
||||
def space_arc_search(session, uid, pn=1, ps=30, tid=0, order="pubdate", keyword=""):
|
||||
"""获取指定 up 主的视频投稿"""
|
||||
params = {"mid": uid, "pn": pn, "Ps": ps, "tid": tid, "order": order, "keyword": keyword}
|
||||
ret = session.get(url="https://api.bilibili.com/x/space/arc/search", params=params).json()
|
||||
data_list = [
|
||||
{"aid": one.get("aid"), "cid": 0, "title": one.get("title"), "owner": one.get("author")}
|
||||
for one in ret.get("data", {}).get("list", {}).get("vlist", [])[:2]
|
||||
]
|
||||
return data_list, 2
|
||||
|
||||
|
||||
def coin_add(session, bili_jct, aid, num=1, select_like=1):
|
||||
"""给视频投币"""
|
||||
url = "https://api.bilibili.com/x/web-interface/coin/add"
|
||||
return session.post(url=url, data={"aid": aid, "multiply": num, "select_like": select_like, "cross_domain": "true", "csrf": bili_jct}).json()
|
||||
|
||||
|
||||
def live_status(session):
|
||||
"""获取直播瓜子状态"""
|
||||
ret = session.get(url="https://api.live.bilibili.com/pay/v1/Exchange/getStatus").json()
|
||||
data = ret.get("data", {})
|
||||
return {"coin": data.get("coin", 0), "gold": data.get("gold", 0), "silver": data.get("silver", 0)}
|
||||
|
||||
|
||||
def get_region(session, rid=1, num=6):
|
||||
"""获取分区视频列表"""
|
||||
url = f"https://api.bilibili.com/x/web-interface/dynamic/region?ps={num}&rid={rid}"
|
||||
ret = session.get(url=url).json()
|
||||
return [{"aid": one.get("aid"), "cid": one.get("cid"), "title": one.get("title"), "owner": one.get("owner", {}).get("name")} for one in ret.get("data", {}).get("archives", [])]
|
||||
|
||||
|
||||
def silver2coin(session, bili_jct):
|
||||
"""银瓜子兑换硬币"""
|
||||
url = "https://api.live.bilibili.com/xlive/revenue/v1/wallet/silver2coin"
|
||||
return session.post(url=url, data={"csrf": bili_jct}).json()
|
||||
|
||||
|
||||
def main():
|
||||
global report_data
|
||||
report_data = {}
|
||||
|
||||
bilibili_cookie = {item.split("=")[0]: item.split("=")[1] for item in BILIBILI_COOKIE.split("; ")}
|
||||
bili_jct = bilibili_cookie.get("bili_jct")
|
||||
|
||||
session = requests.session()
|
||||
requests.utils.add_dict_to_cookiejar(session.cookies, bilibili_cookie)
|
||||
session.headers.update({
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64",
|
||||
"Referer": "https://www.bilibili.com/",
|
||||
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
||||
"Connection": "keep-alive",
|
||||
})
|
||||
|
||||
uname, uid, is_login, coin, vip_type, current_exp = get_nav(session=session)
|
||||
if not is_login:
|
||||
log_error("登录失败,请检查 cookie")
|
||||
return "登录失败,请检查 cookie"
|
||||
|
||||
log_success(f"登录成功,用户名: {uname},UID: {uid},当前硬币: {coin}")
|
||||
report_data["账号"] = uname
|
||||
|
||||
# 漫画签到
|
||||
manhua_msg = manga_sign(session=session)
|
||||
log_info(f"漫画签到: {manhua_msg}")
|
||||
report_data["漫画签到"] = manhua_msg
|
||||
|
||||
# 获取分区视频列表
|
||||
aid_list = get_region(session=session)
|
||||
|
||||
# 计算今日已投币数
|
||||
today_exp_list = get_today_exp(session=session)
|
||||
coins_av_count = len(list(filter(lambda x: x.get("reason") == "视频投币奖励", today_exp_list)))
|
||||
need_coin_num = COIN_NUM - coins_av_count
|
||||
need_coin_num = need_coin_num if need_coin_num < coin else coin
|
||||
|
||||
log_info(f"今日已投币 {coins_av_count} 个,目标投币 {COIN_NUM} 个,还需投 {need_coin_num} 个")
|
||||
|
||||
# 根据 coin_type 选择投币来源
|
||||
if COIN_TYPE == 1:
|
||||
following_list = get_followings(session=session, uid=uid)
|
||||
count = 0
|
||||
for following in following_list.get("data", {}).get("list", []):
|
||||
mid = following.get("mid")
|
||||
if mid:
|
||||
tmplist, tmpcount = space_arc_search(session=session, uid=mid)
|
||||
aid_list += tmplist
|
||||
count += tmpcount
|
||||
if count > need_coin_num:
|
||||
log_info("已获取足够关注用户的视频")
|
||||
break
|
||||
else:
|
||||
aid_list += get_region(session=session)
|
||||
|
||||
# 投币循环
|
||||
success_count = 0
|
||||
if need_coin_num > 0:
|
||||
for one in aid_list[::-1]:
|
||||
ret = coin_add(session=session, aid=one.get("aid"), bili_jct=bili_jct)
|
||||
if ret.get("code") == 0:
|
||||
need_coin_num -= 1
|
||||
log_success(f"成功给《{one.get('title')}》投一个币")
|
||||
success_count += 1
|
||||
elif ret.get("code") == 34005:
|
||||
log_warning(f"投币《{one.get('title')}》失败: {ret.get('message')},继续下一个")
|
||||
continue
|
||||
else:
|
||||
log_error(f"投币《{one.get('title')}》失败: {ret.get('message')},跳过投币")
|
||||
break
|
||||
if need_coin_num <= 0:
|
||||
break
|
||||
coin_msg = f"今日成功投币 {success_count + coins_av_count}/{COIN_NUM} 个"
|
||||
else:
|
||||
coin_msg = f"今日成功投币 {coins_av_count}/{COIN_NUM} 个"
|
||||
log_info(coin_msg)
|
||||
report_data["投币任务"] = coin_msg
|
||||
|
||||
# 观看视频任务
|
||||
if aid_list:
|
||||
first = aid_list[0]
|
||||
report_ret = report_task(session=session, bili_jct=bili_jct, aid=first.get("aid"), cid=first.get("cid"))
|
||||
report_msg = f"✅ 观看《{first.get('title')}》300秒" if report_ret.get("code") == 0 else "❌ 观看任务失败"
|
||||
log_success(report_msg) if report_ret.get("code") == 0 else log_error(report_msg)
|
||||
|
||||
share_ret = share_task(session=session, bili_jct=bili_jct, aid=first.get("aid"))
|
||||
share_msg = f"✅ 分享《{first.get('title')}》成功" if share_ret.get("code") == 0 else "❌ 分享失败"
|
||||
log_success(share_msg) if share_ret.get("code") == 0 else log_error(share_msg)
|
||||
else:
|
||||
report_msg = "⚠️ 无视频可观看"; share_msg = "⚠️ 无视频可分享"
|
||||
log_warning(report_msg); log_warning(share_msg)
|
||||
report_data["观看视频"] = report_msg
|
||||
report_data["分享任务"] = share_msg
|
||||
|
||||
# 银瓜子兑换硬币
|
||||
s2c_msg = "⚪ 未开启兑换"
|
||||
if SILVER2COIN:
|
||||
silver2coin_ret = silver2coin(session=session, bili_jct=bili_jct)
|
||||
if silver2coin_ret.get("code") == 0:
|
||||
s2c_msg = "✅ 银瓜子兑换硬币成功"
|
||||
log_success(s2c_msg)
|
||||
else:
|
||||
s2c_msg = f"❌ 兑换失败: {silver2coin_ret.get('message', '未知错误')}"
|
||||
log_error(s2c_msg)
|
||||
report_data["瓜子兑换"] = s2c_msg
|
||||
|
||||
# 获取直播瓜子状态
|
||||
live_stats = live_status(session=session)
|
||||
report_data["硬币数量"] = live_stats["coin"]
|
||||
report_data["金瓜子数"] = live_stats["gold"]
|
||||
report_data["银瓜子数"] = live_stats["silver"]
|
||||
|
||||
# 再次获取用户信息,更新经验
|
||||
uname, uid, is_login, new_coin, vip_type, new_current_exp = get_nav(session=session)
|
||||
today_exp = sum(map(lambda x: x.get("delta", 0), get_today_exp(session=session)))
|
||||
update_data = (28800 - new_current_exp) // (today_exp if today_exp else 1) if today_exp else "未知"
|
||||
|
||||
report_data["今日经验"] = today_exp
|
||||
report_data["当前经验"] = new_current_exp
|
||||
report_data["升级还需"] = f"{update_data}天"
|
||||
|
||||
log_success("========== 任务执行汇总 ==========")
|
||||
for k, v in report_data.items():
|
||||
log_info(f"{k}: {v}")
|
||||
return report_data
|
||||
|
||||
|
||||
def build_report(data):
|
||||
"""构建签到报告"""
|
||||
lines = ["🎯 Bilibili 每日任务报告", "", f"👤 账号: {data.get('账号', '未知')}", ""]
|
||||
|
||||
tasks = [
|
||||
("📖 漫画签到", data.get("漫画签到", "")),
|
||||
("📺 观看视频", data.get("观看视频", "")),
|
||||
("🔗 分享任务", data.get("分享任务", "")),
|
||||
("💰 投币任务", data.get("投币任务", "")),
|
||||
("💱 瓜子兑换", data.get("瓜子兑换", "")),
|
||||
]
|
||||
for name, value in tasks:
|
||||
lines.append(f"{name}: {value}")
|
||||
|
||||
lines.append("")
|
||||
lines.append("📊 数据统计")
|
||||
lines.append(f"⭐ 今日经验: {data.get('今日经验', 0)}")
|
||||
lines.append(f"📈 当前经验: {data.get('当前经验', 0)}")
|
||||
lines.append(f"⏳ 升级还需: {data.get('升级还需', '未知')}")
|
||||
|
||||
lines.append("")
|
||||
lines.append("🥜 瓜子库存")
|
||||
lines.append(f"🪙 硬币数量: {data.get('硬币数量', 0)}")
|
||||
lines.append(f"✨ 金瓜子数: {data.get('金瓜子数', 0)}")
|
||||
lines.append(f"🥈 银瓜子数: {data.get('银瓜子数', 0)}")
|
||||
|
||||
lines.append("")
|
||||
lines.append("─" * 18)
|
||||
lines.append(f"🕒 执行时间: {beijing_time_str()}")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
report = main()
|
||||
if report and isinstance(report, dict):
|
||||
tg_text = build_report(report)
|
||||
notify_send("Bilibili 每日任务报告", tg_text)
|
||||
141
脚本库/web版/抓包/NodeSeek签到/2026-05-23_Nodeseek_fe954847.py
Normal file
141
脚本库/web版/抓包/NodeSeek签到/2026-05-23_Nodeseek_fe954847.py
Normal file
@@ -0,0 +1,141 @@
|
||||
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/Nodeseek.py
|
||||
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Nodeseek.py
|
||||
# Repo: CN-Grace/QinglongScripts
|
||||
# Path: Nodeseek.py
|
||||
# UploadedAt: 2026-05-23T15:48:24Z
|
||||
# SHA256: fe954847cd0f827c46a977716be00547e6496cf4df72f558542e5c846db4a19d
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
cron: 0 0 * * *
|
||||
new Env("NodeSeek签到")
|
||||
NodeSeek 论坛自动签到脚本
|
||||
- 使用 curl_cffi 模拟浏览器指纹
|
||||
- 支持随机延迟签到
|
||||
"""
|
||||
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
from datetime import datetime
|
||||
from typing import Tuple
|
||||
|
||||
import requests
|
||||
from curl_cffi import requests as cffi_requests
|
||||
|
||||
from utils import log_info, log_success, log_warning, log_error, beijing_now, beijing_time_str
|
||||
from notifier import send as notify_send
|
||||
|
||||
# ==================== 用户配置 ====================
|
||||
NS_COOKIE = os.getenv("NS_COOKIE", "").strip()
|
||||
NS_RANDOM = os.getenv("NS_RANDOM", "true").strip().lower()
|
||||
NS_IMPERSONATE = os.getenv("NS_IMPERSONATE", "chrome110").strip()
|
||||
|
||||
|
||||
def _curl_post_json(url: str, headers: dict, timeout: int = 25):
|
||||
return cffi_requests.post(url, headers=headers, json={}, timeout=timeout, impersonate=NS_IMPERSONATE)
|
||||
|
||||
|
||||
def _normalize_random_flag(v: str) -> str:
|
||||
v = (v or "").strip().lower()
|
||||
return v if v in ("true", "false") else "true"
|
||||
|
||||
|
||||
def _sleep_jitter_before_checkin() -> int:
|
||||
"""签到前随机延迟 0~5 分钟"""
|
||||
delay_seconds = random.randint(0, 5 * 60)
|
||||
if delay_seconds <= 0:
|
||||
log_info("签到前随机延迟: 0s(跳过)")
|
||||
return 0
|
||||
minutes = delay_seconds // 60
|
||||
seconds = delay_seconds % 60
|
||||
log_info(f"签到前随机延迟: {minutes}m {seconds}s ...")
|
||||
time.sleep(delay_seconds)
|
||||
return delay_seconds
|
||||
|
||||
|
||||
def nodeseek_checkin(cookie: str, ns_random: str) -> Tuple[bool, str, str]:
|
||||
"""返回 (ok, status, message)"""
|
||||
if not cookie:
|
||||
return False, "invalid", "无有效 Cookie"
|
||||
|
||||
random_flag = _normalize_random_flag(ns_random)
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0",
|
||||
"origin": "https://www.nodeseek.com",
|
||||
"referer": "https://www.nodeseek.com/board",
|
||||
"Content-Type": "application/json",
|
||||
"Cookie": cookie,
|
||||
}
|
||||
|
||||
url = f"https://www.nodeseek.com/api/attendance?random={random_flag}"
|
||||
try:
|
||||
start = datetime.now()
|
||||
r = _curl_post_json(url, headers=headers)
|
||||
elapsed_ms = int((datetime.now() - start).total_seconds() * 1000)
|
||||
|
||||
data = None
|
||||
try:
|
||||
data = r.json()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
msg = ""
|
||||
success_flag = None
|
||||
if isinstance(data, dict):
|
||||
msg = str(data.get("message") or "")
|
||||
success_flag = data.get("success")
|
||||
|
||||
if "鸡腿" in msg or bool(success_flag) is True:
|
||||
return True, "success", msg or "签到成功"
|
||||
if "已完成签到" in msg:
|
||||
return True, "already", msg
|
||||
if isinstance(data, dict) and data.get("status") == 404:
|
||||
return False, "invalid", msg or "Cookie 已失效"
|
||||
if getattr(r, "status_code", 0) >= 400:
|
||||
snippet = (r.text or "").strip()[:200]
|
||||
return False, "error", f"HTTP {r.status_code}: {snippet or '请求失败'}"
|
||||
return False, "fail", msg or "签到失败"
|
||||
except Exception as e:
|
||||
return False, "error", f"签到异常: {e}"
|
||||
|
||||
|
||||
def _format_result(ok: bool, status: str, message: str, elapsed_ms: int, delay_seconds: int) -> str:
|
||||
icon = "✅" if ok else "❌"
|
||||
delay_str = f"{delay_seconds // 60}m {delay_seconds % 60}s" if delay_seconds else "0s"
|
||||
lines = [
|
||||
f"{icon} 状态: {status}",
|
||||
f"🕒 时间: {beijing_time_str()} (UTC+8)",
|
||||
f"⏱️ 耗时: {elapsed_ms} ms",
|
||||
f"🕯️ 延迟: {delay_str} (签到前随机延迟)",
|
||||
f"📝 说明: {message}",
|
||||
]
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
log_info(f"NodeSeek 签到脚本启动(单账号)")
|
||||
|
||||
if not NS_COOKIE:
|
||||
content = _format_result(False, "invalid", "未配置 NS_COOKIE,无法签到。", 0, 0)
|
||||
print("\n" + content)
|
||||
notify_send("NodeSeek 签到结果", content)
|
||||
return 1
|
||||
|
||||
delay_seconds = _sleep_jitter_before_checkin()
|
||||
start = datetime.now()
|
||||
ok, status, message = nodeseek_checkin(NS_COOKIE, NS_RANDOM)
|
||||
elapsed_ms = int((datetime.now() - start).total_seconds() * 1000)
|
||||
|
||||
content = _format_result(ok, status, message, elapsed_ms, delay_seconds)
|
||||
title = f"NodeSeek 签到结果 @ {beijing_time_str()}"
|
||||
print("\n" + content)
|
||||
notify_send(title, content)
|
||||
return 0 if ok else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
File diff suppressed because one or more lines are too long
47
脚本库/web版/抓包/acdog/2021-04-16_acdog_6f2a1d7c.js
Normal file
47
脚本库/web版/抓包/acdog/2021-04-16_acdog_6f2a1d7c.js
Normal file
@@ -0,0 +1,47 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/acdog.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/acdog.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/acdog.js
|
||||
// # UploadedAt: 2021-04-16T00:43:18Z
|
||||
// # SHA256: 6f2a1d7c68045d9ac88c8f18c0c1f636c7f8b1b950882b61b4ed1bf2a24a12f6
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
let header = {
|
||||
headers: {
|
||||
'referer': 'https://www.acgndog.com/category/qingxiaoshuo',
|
||||
'cookie': config.acdog.cookie }
|
||||
}
|
||||
const axios = require("axios")
|
||||
let result = "【次元🐕】:"
|
||||
async function getnonce() {
|
||||
var res = await axios.get('https://www.acgndog.com/wp-admin/admin-ajax.php?action=d2e5b56b75e2f3d4ab412a6d9561faee&%5Btype%5D=checkSigned&6bce68d6adeec8e9a3fb135daeb30b7f%5Btype%5D=checkUnread&7a2a6dd56f97c9a9a1b3bd5ade6d8f17%5Btype%5D=getUnreadCount', header)
|
||||
if (res.data.user.uid) {
|
||||
msg = "当前共" + res.data.customPoint.point + "狗爪 "
|
||||
nonce = res.data._nonce
|
||||
result += msg
|
||||
console.log(msg)
|
||||
await dailysign(nonce)
|
||||
} else {
|
||||
msg = "cookie已失效"
|
||||
result += msg
|
||||
console.log(msg)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
async function dailysign(nonce) {
|
||||
var res = await axios.get("https://www.acgndog.com/wp-admin/admin-ajax.php?_nonce=" + nonce + "&action=5ced0113734a2bc46ecf3f30b0685b7b&type=goSign", header)
|
||||
if (res.data.code == 0) {
|
||||
msg = res.data.msg
|
||||
} else {
|
||||
msg = "签到失败"
|
||||
console.log(res.data)
|
||||
|
||||
}
|
||||
console.log(msg)
|
||||
result += msg
|
||||
}
|
||||
|
||||
module.exports = getnonce
|
||||
54
脚本库/web版/抓包/aihao/2021-04-16_aihao_096bad64.js
Normal file
54
脚本库/web版/抓包/aihao/2021-04-16_aihao_096bad64.js
Normal file
@@ -0,0 +1,54 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/aihao.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/aihao.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/aihao.js
|
||||
// # UploadedAt: 2021-04-16T00:43:18Z
|
||||
// # SHA256: 096bad643c3f6c635572eea4ec218275001b9e4d8f0de7c26f3ca05b81db43a3
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
let result = "【爱好论坛】:";
|
||||
function aihao() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
console.log("爱好论坛打卡开始...");
|
||||
let cookie = config.aihao.cookie;
|
||||
let header = { headers: { cookie: cookie } };
|
||||
for (i of [1, 2, 3, 4]) {
|
||||
str = ["上午打卡", "下午打卡", "晚上打卡", "全勤奖励"];
|
||||
data = `button${i}=`;
|
||||
res = await axios.post(
|
||||
"https://www.aihao.cc/plugin.php?id=daka",
|
||||
data,
|
||||
header
|
||||
);
|
||||
if (!res.data.match(/请先登录后才能继续使用/)) {
|
||||
if (res.data.match(/未到打卡时间|您本月还未打卡|已过打卡时间/)) {
|
||||
msg = "还没到打卡时间呢亲_(:D)∠)_";
|
||||
} else if (res.data.match(/打卡成功/)) {
|
||||
msg = res.data.match(/打卡成功!奖励金钱:\d+/);
|
||||
} else if (res.data.match(/请勿重复打卡/)) {
|
||||
msg = "当前时间段已经打过卡了嗷(๑°3°๑)";
|
||||
} else if (res.data.match(/无法获得全勤奖励/)) {
|
||||
msg = res.data.match(/无法获得全勤奖励!您本月打卡次数:\d+/);
|
||||
} else {
|
||||
msg = "签到失败!原因未知";
|
||||
console.log(res.data);
|
||||
}
|
||||
} else {
|
||||
msg = "cookie已失效";
|
||||
}
|
||||
console.log(str[i - 1] + ":" + msg);
|
||||
result += str[i - 1] + ":" + msg+" ";
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
|
||||
//aihao()
|
||||
module.exports = aihao;
|
||||
69
脚本库/web版/抓包/ccw/2024-01-22_ccw_ad367a77.js
Normal file
69
脚本库/web版/抓包/ccw/2024-01-22_ccw_ad367a77.js
Normal file
@@ -0,0 +1,69 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/ccw.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ccw.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/ccw.js
|
||||
// # UploadedAt: 2024-01-22T22:39:08Z
|
||||
// # SHA256: ad367a776ed1a81284f3532d277a20e1e2dc050d9915ac9e5916aee6e310de3c
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
let msg = "【共创世界】:\n";
|
||||
const token = config.ccw.token
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
token
|
||||
};
|
||||
|
||||
async function checkIn() {
|
||||
const url = 'https://community-web.ccw.site/study-community/check_in_record/insert';
|
||||
const body = {
|
||||
"scene": "HOMEPAGE"
|
||||
};
|
||||
try {
|
||||
const response = await axios.post(url, body, { headers });
|
||||
if (response.data && response.data.code === "200") {
|
||||
console.log("签到成功");
|
||||
return "成功";
|
||||
} else if (response.data && response.data.code === "10736001") {
|
||||
console.log("用户已签到");
|
||||
return "用户已签到";
|
||||
} else {
|
||||
return "签到失败";
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("签到失败", error);
|
||||
return "签到失败";
|
||||
}
|
||||
}
|
||||
|
||||
async function queryBalance() {
|
||||
const url = 'https://community-web.ccw.site/currency/account/personal';
|
||||
|
||||
try {
|
||||
const response = await axios.post(url, {}, { headers });
|
||||
if (response.data && response.data.code === "200" && response.data.body) {
|
||||
console.log("当前积分:", response.data.body.internalCurrencyBalance);
|
||||
return response.data.body.internalCurrencyBalance.toString();
|
||||
} else {
|
||||
return "获取积分失败";
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("查询失败", error);
|
||||
return "查询失败";
|
||||
}
|
||||
}
|
||||
|
||||
async function task() {
|
||||
let checkInMsg = await checkIn();
|
||||
let balanceMsg = await queryBalance();
|
||||
msg += `签到:${checkInMsg}\n积分:${balanceMsg}`;
|
||||
// console.log(msg);
|
||||
return msg
|
||||
}
|
||||
|
||||
//task(); // 如果你想在文件执行时直接运行 task 函数
|
||||
|
||||
module.exports = task; // 允许其他文件导入并使用 task 函数
|
||||
63
脚本库/web版/抓包/cg163/2021-09-16_cg163_71024025.js
Normal file
63
脚本库/web版/抓包/cg163/2021-09-16_cg163_71024025.js
Normal file
@@ -0,0 +1,63 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/cg163.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/cg163.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/cg163.js
|
||||
// # UploadedAt: 2021-09-16T02:16:27Z
|
||||
// # SHA256: 71024025bbb27a426f7d5e1899ada14ca39b718b0b04918f478fd8b0deda6c7e
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const headers = {
|
||||
headers: {
|
||||
Authorization:
|
||||
config.cg163.Authorization || " bearer xxxxx",
|
||||
"user-agent":
|
||||
"Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/85.0.4183.127 Mobile Safari/537.36",
|
||||
// "content-type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||
},
|
||||
};
|
||||
const axios = require("axios")
|
||||
function check() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const url = `https://n.cg.163.com/api/v2/users/@me`;
|
||||
let res = await axios.get(url, headers);
|
||||
console.log("cookie未失效,即将开始签到...");
|
||||
ckstatus = 1;
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
console.log("cookie已失效");
|
||||
ckstatus = 0;
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function sign() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const url = `https://n.cg.163.com/api/v2/sign-today`;
|
||||
let res = await axios.post(url, "", headers);
|
||||
console.log("签到成功");
|
||||
msg = "签到成功!! ";
|
||||
} catch (err) {
|
||||
// console.log(err)
|
||||
msg = "签到失败,已签到过或其它未知原因!! ";
|
||||
console.log(msg);
|
||||
}
|
||||
resolve("【网易云游戏】:"+msg);
|
||||
});
|
||||
}
|
||||
async function cg163() {
|
||||
ckstatus = 0;
|
||||
await check();
|
||||
if (ckstatus == 1) {
|
||||
return await sign();
|
||||
} else {
|
||||
console.log("cookie失效,请重新抓取cookies...");
|
||||
return "【网易云游戏】: cookie失效,请重新抓取cookies...";
|
||||
}
|
||||
}
|
||||
//cg163()
|
||||
module.exports = cg163;
|
||||
47
脚本库/web版/抓包/du163/2021-10-10_du163_27825333.js
Normal file
47
脚本库/web版/抓包/du163/2021-10-10_du163_27825333.js
Normal file
@@ -0,0 +1,47 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/du163.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/du163.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/du163.js
|
||||
// # UploadedAt: 2021-10-10T06:20:09Z
|
||||
// # SHA256: 278253336ed5ca263518aca6ac174e963458e381dad2dc7bbfc04753cea43e2b
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
//网易蜗牛读书
|
||||
const axios = require("axios");
|
||||
let result = "【网易蜗牛读书】: ";
|
||||
function du163() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const du = config.du163;
|
||||
const headers = {
|
||||
headers: {
|
||||
_xsrf: du.xsrf,
|
||||
"X-Auth-Token": du["X-Auth-Token"],
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/85.0.4183.127 Mobile Safari/537.36 NeteaseSnailReader/1.9.11 NetType/3G+ (00ef591f8e05c305;coolapk) NEJSBridge/2.0.0",
|
||||
},
|
||||
};
|
||||
let url = `https://du.163.com/activity/201907/activityCenter/sign.jsonannel=0&_versions=1080&merchant=17Kxiaomi&platform=2&manufacturer=`;
|
||||
let data = { csrfToken: du.xsrf || 6 };
|
||||
let res = await axios.post(url, data, headers);
|
||||
if (res.data.code == -1104) {
|
||||
msg = res.data.msg;
|
||||
} else if (res.data.code == 0) {
|
||||
msg = res.data.message + " 连签" + res.data.continuousSignedDays + "天";
|
||||
} else {
|
||||
msg = "签到失败 "+res.data.msg;
|
||||
console.log(res.data);
|
||||
}
|
||||
result += msg;
|
||||
console.log(msg);
|
||||
} catch (err) {
|
||||
console.log(err.response.data.msg);
|
||||
result =result + "签到失败 "+ err.response.data.msg;
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = du163;
|
||||
57
脚本库/web版/抓包/hzw/2023-11-23_hzw_d2dc6e35.js
Normal file
57
脚本库/web版/抓包/hzw/2023-11-23_hzw_d2dc6e35.js
Normal file
@@ -0,0 +1,57 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/hzw.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hzw.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/hzw.js
|
||||
// # UploadedAt: 2023-11-23T08:10:53Z
|
||||
// # SHA256: d2dc6e35db0770955352fc7fb0df0657b3d87da693dd7f42b538951aabd4d271
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
// formhash获取(在浏览器F12控制台输入):document.querySelector('input[name="formhash"]').getAttribute('value')
|
||||
|
||||
const axios = require("axios");
|
||||
let result = "【海贼王论坛】:"
|
||||
|
||||
class HZW {
|
||||
constructor() {
|
||||
this.host = 'https://bbs.talkop.com/plugin.php';
|
||||
this.headers = {
|
||||
"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 Edg/120.0.0.0",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Cookie": config.hzw.cookie,
|
||||
};
|
||||
this.body = `formhash=${config.hzw.formhash}&qdxq=kx&qdmode=2&todaysay=&fastreply=0`;
|
||||
}
|
||||
|
||||
// 签到
|
||||
async sign() {
|
||||
const url = this.host + '?id=dsu_paulsign:sign&operation=qiandao&infloat=1&sign_as=1&inajax=1';
|
||||
try {
|
||||
const res = await axios.post(url, this.body, {headers: this.headers});
|
||||
let matchResult = res.data.match(/(.+?)\r\n<\/div>/);
|
||||
let response = matchResult ? matchResult[1] : '签到失败,原因未知';
|
||||
console.log(`${response}`);
|
||||
result += `${response} ||`
|
||||
} catch (error) {
|
||||
console.log(`签到失败,原因是:${error}`);
|
||||
result += `签到失败,原因是:${error} ||`
|
||||
}
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.sign();
|
||||
console.log();
|
||||
}
|
||||
}
|
||||
|
||||
async function hzw() {
|
||||
const hzwlt = new HZW();
|
||||
await hzwlt.run();
|
||||
if (result.endsWith('||')) {
|
||||
result = result.substring(0, result.length - 2);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = hzw;
|
||||
170
脚本库/web版/抓包/mtmc/2023-02-01_mtmc_7c844a5f.js
Normal file
170
脚本库/web版/抓包/mtmc/2023-02-01_mtmc_7c844a5f.js
Normal file
@@ -0,0 +1,170 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/mtmc.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/mtmc.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/mtmc.js
|
||||
// # UploadedAt: 2023-02-01T08:53:28Z
|
||||
// # SHA256: 7c844a5f0b597749d681c654ff47966a18bb9e725624d5125e3559184356fbfa
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
const {
|
||||
MTMC_userId,
|
||||
MTMC_fingerprint,
|
||||
MTMC_token,
|
||||
MTMC_uuid
|
||||
} = config.MeiTuan
|
||||
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
||||
function get(task, method = "get", data = null) {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
let url = `https://mall.meituan.com/api/c/mallcoin/${task}&app_tag=union&bizId=2&ci=2&page_type=h5&poi=10000380&poiId=66&tenantId=1&t=${MTMC_token}&uci=-1&userid=${MTMC_userId}&utm_medium=android&utm_term=5.38.0&uuid=${MTMC_uuid}&xuuid=`
|
||||
const headers = {
|
||||
t: MTMC_token,
|
||||
"user-agent": "Mozilla/5.0 (Linux; Android 11; MEIZU 18 Pro Build/RKQ1.201105.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/104.0.5112.69 Mobile Safari/537.36 TitansX/20.12.6 KNB/1.2.0 android/11 com.meituan.retail.v.android/armv7 App/11g20/5.38.0 com.meituan.retail.v.android/5.38.0",
|
||||
Host: "mall.meituan.com",
|
||||
"X-Requested-With": "com.meituan.retail.v.android",
|
||||
"Content-Type": "application/json; charset=utf-8"
|
||||
}
|
||||
|
||||
//console.log(headers)
|
||||
if (method == "get") res = await axios.get(url, {
|
||||
headers
|
||||
});
|
||||
if (data) {
|
||||
xxstr = {
|
||||
"platform": 4,
|
||||
"app": 95,
|
||||
"utm_term": "5.38.0",
|
||||
"uuid": MTMC_uuid,
|
||||
"fingerprint": MTMC_fingerprint,
|
||||
"utm_medium": 95
|
||||
}
|
||||
data.riskMap ==
|
||||
Object.assign(data.riskMap, xxstr)
|
||||
}
|
||||
// console.log(data)
|
||||
if (method == "post") res = await axios.post(url, data, {
|
||||
headers
|
||||
});
|
||||
if (res.data.code == 0) console.log(" 操作成功")
|
||||
// console.log(headers)
|
||||
// console.log(res.data)
|
||||
resolve(res.data)
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
resolve({
|
||||
code: 500,
|
||||
error: {
|
||||
msg: "签到接口请求出错"
|
||||
}
|
||||
})
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
async function getaskList() {
|
||||
console.log("查询任务列表")
|
||||
let res = await get("checkIn/queryTaskListInfoV3?&channel=1", "post", {
|
||||
"riskMap": {
|
||||
"partner": 109,
|
||||
"campaignId": 1002,
|
||||
"campaignName": "买菜币"
|
||||
}
|
||||
})
|
||||
if (res.code == 0 && res.data) return res.data.checkInTaskInfos.filter(x => x.id == 52 && x.taskFinishCount != x.taskChance || x.status == 100)
|
||||
return []
|
||||
}
|
||||
|
||||
|
||||
async function sign() {
|
||||
signmsg = ""
|
||||
console.log("去签到:")
|
||||
let signRes = await get("checkIn/userCheckInNew?", "post", {
|
||||
"userId": MTMC_userId,
|
||||
"riskMap": {}
|
||||
})
|
||||
if (signRes.code == 0) {
|
||||
if (signRes.data.result) signmsg = `签到成功!获得 ${signRes.data.rewardValue} 买菜币`
|
||||
else signmsg = `签到失败!可能签到过啦`
|
||||
console.log(" " + signmsg)
|
||||
|
||||
} else signmsg = signRes.error.msg
|
||||
//console.log(signRes)/
|
||||
//
|
||||
for (rewardDate of [3, 7]) {
|
||||
await get("checkIn/getWeekContinuousRewardNew?", "post", {
|
||||
userId: MTMC_userId,
|
||||
rewardDate: rewardDate,
|
||||
"riskMap": {}
|
||||
})
|
||||
}
|
||||
return signmsg
|
||||
}
|
||||
//浏览任务
|
||||
async function view() {
|
||||
let taskList = await getaskList()
|
||||
if (taskList.length != 0) {
|
||||
let task = taskList[0]
|
||||
//领取
|
||||
console.log("浏览任务开始:\n 去领取浏览任务:")
|
||||
console.log(" " + task.buttonDesc)
|
||||
if (task) {
|
||||
|
||||
if (task.buttonDesc == "领任务" || task.status == 10) {
|
||||
let lqRes = await get("checkIn/takeTask?activityId=33&taskId=52&channel=1")
|
||||
if (lqRes && lqRes.code == 0) {
|
||||
console.log(" 领取成功\n等待17s")
|
||||
await sleep(17 * 1000)
|
||||
await get("checkIn/taskEventComplete?eventType=6&channel=1")
|
||||
|
||||
} else console.log(" " + lqRes.error.msg)
|
||||
taskList = await getaskList()
|
||||
task = taskList[0]
|
||||
}
|
||||
|
||||
if (task.buttonDesc == "领奖励") {
|
||||
await sleep(3 * 1000)
|
||||
console.log(" 去领取奖励:")
|
||||
let lqReward = await get(`checkIn/takeTaskReward?activityId=33&taskId=52&rewardId=774&taskType=6&userTaskId=${task.userTaskId}&channel=1`)
|
||||
if (lqReward && lqReward.code == 0) {
|
||||
console.log(` 领取成功!获得 ${lqReward.data.rewardType} ${lqReward.data.rewardValue}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else console.log(" 暂无可领取任务")
|
||||
}
|
||||
}
|
||||
async function getmyb() {
|
||||
let res = await get("checkIn/getCheckInMainView?")
|
||||
if (res && res.code == 0) return `\n 我的菜币:${res.data.userInfo.balance}\n 签到天数:${res.data.checkInCount}\n smjb:${res.data.noticeDetail}\n`
|
||||
else return ""
|
||||
|
||||
}
|
||||
|
||||
async function share() {
|
||||
console.log("去分享:")
|
||||
let res = await get("checkIn/getShareReward?shareBusinessType=2&")
|
||||
if (res.code == 0) {
|
||||
if (res.data.result) console.log(` 分享成功!获得 ${res.data.rewardValue}菜币`)
|
||||
else console.log(" 分享过啦")
|
||||
}
|
||||
}
|
||||
async function meituanmc() {
|
||||
let signMsg = await sign()
|
||||
await view()
|
||||
await share()
|
||||
myInfo = await getmyb()
|
||||
content = ` 【美团买菜】 签到:${signMsg} ${myInfo}`
|
||||
console.log(myInfo)
|
||||
return content
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = meituanmc
|
||||
126
脚本库/web版/抓包/pfjsq/2023-11-22_pfjsq_43885f51.js
Normal file
126
脚本库/web版/抓包/pfjsq/2023-11-22_pfjsq_43885f51.js
Normal file
@@ -0,0 +1,126 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/pfjsq.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/pfjsq.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/pfjsq.js
|
||||
// # UploadedAt: 2023-11-22T14:22:59Z
|
||||
// # SHA256: 43885f513eed4b880605b7cba3b31684592740c97935320ff03219bcb825803e
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
|
||||
let result = "【泡芙加速器】:"
|
||||
|
||||
class PFJS {
|
||||
constructor() {
|
||||
this.host = 'https://api-admin-js.paofujiasu.com/';
|
||||
this.headers = {
|
||||
"Host": "api-admin-js.paofujiasu.com",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.141 Mobile Safari/537.36 XWEB/5169 MMWEBSDK/20221011 MMWEBID/6242 MicroMessenger/8.0.30.2260(0x28001E3B) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
"tokentype": "applet",
|
||||
"Content-Type": "application/json",
|
||||
"token": config.pfjsq.token,
|
||||
};
|
||||
this.count = 0;
|
||||
this.body = '{"res_type":1}';
|
||||
}
|
||||
|
||||
// 检查金币是否满5个
|
||||
async check_gold(msg) {
|
||||
if (msg.indexOf('5个金币') !== -1) {
|
||||
await this.exchange();
|
||||
}
|
||||
}
|
||||
|
||||
// 兑换6小时时长卡
|
||||
async exchange() {
|
||||
const url = this.host + 'client/api/v1/virtual_currency/exchange_by_species';
|
||||
try {
|
||||
this.body = '{"rule_id":4}'
|
||||
const res = await axios.post(url, this.body, {headers: this.headers});
|
||||
console.log(`兑换${res.data.info}`);
|
||||
result += `兑换${res.data.info} ||`
|
||||
} catch (error) {
|
||||
console.log(`兑换失败,原因是:${error.response.data.info}`);
|
||||
result += `兑换失败,原因是:${error.response.data.info} ||`
|
||||
}
|
||||
}
|
||||
|
||||
// 签到
|
||||
async sign() {
|
||||
const url = this.host + 'client/api/v1/virtual_currency/sign_in_for_species';
|
||||
try {
|
||||
const res = await axios.post(url, this.body, {headers: this.headers});
|
||||
console.log(`签到${res.data.info}`);
|
||||
result += `签到${res.data.info} ||`
|
||||
await this.check_gold(res.data.info)
|
||||
} catch (error) {
|
||||
console.log(`签到失败,原因是:${error.response.data.info}`);
|
||||
result += `签到失败,原因是:${error.response.data.info} ||`
|
||||
await this.check_gold(error.response.data.info)
|
||||
}
|
||||
}
|
||||
|
||||
// 查询广告剩余次数
|
||||
async getAd() {
|
||||
const url = this.host + 'client/api/v1/virtual_currency/look_ad_count';
|
||||
try {
|
||||
const res = await axios.get(url, {headers: this.headers});
|
||||
console.log(`广告${res.data.data.sign_count}/${res.data.data.limit_count}`);
|
||||
this.count = res.data.data.limit_count - res.data.data.sign_count;
|
||||
} catch (error) {
|
||||
console.log(`查询广告失败,原因是:${error.response.data.info}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 看广告前置
|
||||
async lookAdForPower() {
|
||||
const url = this.host + 'client/api/v1/virtual_currency/look_ad_for_power';
|
||||
try {
|
||||
const res = await axios.post(url, this.body, {headers: this.headers});
|
||||
console.log(`目前倍率:${res.data.data.power}`);
|
||||
} catch (error) {
|
||||
console.log(`看广告失败,原因是:${error.response.data.info}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 看广告
|
||||
async lookAd() {
|
||||
const url = this.host + 'client/api/v1/virtual_currency/look_ad_for_species';
|
||||
try {
|
||||
const res = await axios.post(url, this.body, {headers: this.headers});
|
||||
console.log(`看广告${res.data.info}`);
|
||||
await this.check_gold(res.data.info)
|
||||
result += `看广告${res.data.info} ||`
|
||||
} catch (error) {
|
||||
console.log(`看广告失败,原因是:${error.response.data.info}`);
|
||||
await this.check_gold(error.response.data.info)
|
||||
result += `看广告失败,原因是:${error.response.data.info} ||`
|
||||
}
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.sign();
|
||||
await this.getAd();
|
||||
console.log();
|
||||
for (let i = 0; i < this.count; i++) {
|
||||
console.log(`--------------- 第${i + 1}轮广告 ---------------`);
|
||||
await this.lookAdForPower();
|
||||
await this.lookAd();
|
||||
await new Promise(resolve => setTimeout(resolve, Math.floor(Math.random() * (60000 - 30000 + 1)) + 30000));
|
||||
}
|
||||
console.log();
|
||||
}
|
||||
}
|
||||
|
||||
async function pfjsq() {
|
||||
const pfjs = new PFJS();
|
||||
await pfjs.run();
|
||||
if (result.endsWith('||')) {
|
||||
result = result.substring(0, result.length - 2);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = pfjsq;
|
||||
41
脚本库/web版/抓包/pingu/2021-10-18_pingu_298375e2.js
Normal file
41
脚本库/web版/抓包/pingu/2021-10-18_pingu_298375e2.js
Normal file
@@ -0,0 +1,41 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/pingu.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/pingu.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/pingu.js
|
||||
// # UploadedAt: 2021-10-18T16:32:03Z
|
||||
// # SHA256: 298375e236180b0ddb22ad22902ddc939dd1742ed2d61fd488164f987eb16a16
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
//经管之家 邀请链接 https://bbs.pinggu.org/?fromuid=11925701
|
||||
const axios = require("axios");
|
||||
function task() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
let url = "https://bbs.pinggu.org/index_lth5.php?mod=my_qiandao&uid=";
|
||||
let res = await axios.get(url, {
|
||||
headers: {
|
||||
cookie: config.pinggu.cookie,
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Linux; Android 10; Redmi K30) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.110 Mobile Safari/537.36",
|
||||
},
|
||||
});
|
||||
if (res.data.data) {
|
||||
msg = res.data.data.msg
|
||||
} else {
|
||||
msg = "cookie已失效,请及时更新";
|
||||
}
|
||||
console.log(msg);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
msg = "签到接口请求出错";
|
||||
}
|
||||
resolve("【经管之家】:\n" + msg);
|
||||
});
|
||||
}
|
||||
|
||||
//task()
|
||||
|
||||
module.exports = task;
|
||||
97
脚本库/web版/抓包/quark/2024-06-06_quark_1c97a712.js
Normal file
97
脚本库/web版/抓包/quark/2024-06-06_quark_1c97a712.js
Normal file
@@ -0,0 +1,97 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/quark.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/quark.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/quark.js
|
||||
// # UploadedAt: 2024-06-06T17:33:52Z
|
||||
// # SHA256: 1c97a712980803bab7a5cb5bc44ebfd2779ebad7ef92a3efe3d4b6028daf86b5
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
|
||||
cookie = config.quark.cookie;
|
||||
|
||||
const headers = {
|
||||
"Content-Type": "application/json",
|
||||
Cookie: "",
|
||||
};
|
||||
|
||||
async function quark() {
|
||||
for (let index = 0; index < cookie.length; index++) {
|
||||
headers["Cookie"] = cookie[index];
|
||||
await qd_check();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @returns 签到情况
|
||||
*/
|
||||
async function qd_check() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/info";
|
||||
const params = {
|
||||
pr: "ucpro",
|
||||
fr: "pc",
|
||||
uc_param_str: "",
|
||||
};
|
||||
let res = await axios.get(url, { headers, params });
|
||||
if (res.data.data.cap_sign.sign_daily) {
|
||||
const sign = res.data.data.cap_sign;
|
||||
const number = sign.sign_daily_reward / 1048576;
|
||||
const progress = Math.round(
|
||||
(sign.sign_progress / sign.sign_target) * 100
|
||||
);
|
||||
console.log(`今日已签到,获取${number}MB,进度${progress}%`);
|
||||
msg = `今日已签到,获取${number}MB,进度${progress}%`;
|
||||
} else {
|
||||
await qd();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error.data);
|
||||
msg = "签到接口请求失败";
|
||||
}
|
||||
resolve("【夸克网盘】:" + msg || "正常运行了");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @returns 签到结果
|
||||
*/
|
||||
function qd() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/sign";
|
||||
const params = {
|
||||
pr: "ucpro",
|
||||
fr: "pc",
|
||||
uc_param_str: "",
|
||||
};
|
||||
let res = await axios.post(
|
||||
url,
|
||||
{
|
||||
sign_cyclic: true,
|
||||
},
|
||||
{ headers, params }
|
||||
);
|
||||
if (res.data.status == 200) {
|
||||
const sign = res.data.data;
|
||||
const number = sign.sign_daily_reward / 1048576;
|
||||
console.log(`签到成功,本次签到领取${number}MB`);
|
||||
msg = `签到成功,本次签到领取${number}MB`;
|
||||
} else {
|
||||
console.log(`签到失败,${res.data.message}!`);
|
||||
msg = "签到失败";
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error.data);
|
||||
msg = "签到接口请求失败";
|
||||
}
|
||||
resolve("【夸克网盘】:" + msg || "正常运行了");
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = quark;
|
||||
235
脚本库/web版/抓包/tst/2025-11-27_tst_bb3abb0a.py
Normal file
235
脚本库/web版/抓包/tst/2025-11-27_tst_bb3abb0a.py
Normal file
@@ -0,0 +1,235 @@
|
||||
# Source: https://github.com/back-101/zyqinglong/blob/main/tst.py
|
||||
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/tst.py
|
||||
# Repo: back-101/zyqinglong
|
||||
# Path: tst.py
|
||||
# UploadedAt: 2025-11-27T10:49:43Z
|
||||
# SHA256: bb3abb0a9bff29861a10318c1ea94861781faafe5dc21b2d43f5b7f65281cfaf
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
塔斯汀汉堡签到脚本(使用青龙notify模块)
|
||||
原作者:https://github.com/linbailo/zyqinglong
|
||||
二改:https://github.com/wanvfx/zyqinglong
|
||||
最后更新日期:2025.6.8
|
||||
|
||||
功能说明:
|
||||
1. 每日自动签到获取积分
|
||||
2. 支持多账号管理
|
||||
3. 使用青龙面板自带的notify.py模块发送通知
|
||||
|
||||
使用方法:
|
||||
1. 添加环境变量 tst_tk_env
|
||||
2. 格式:每行一个账号,格式为 token
|
||||
示例:
|
||||
sss113-23129-123123-123123
|
||||
sss234-23129-123123-234312
|
||||
"""
|
||||
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
# 配置区域
|
||||
DEBUG_MODE = False # 调试模式开关
|
||||
MAX_RETRIES = 3 # 请求最大重试次数
|
||||
|
||||
# 全局通知内容
|
||||
notification_list = []
|
||||
|
||||
# 导入青龙通知模块
|
||||
try:
|
||||
sys.path.append('/ql/scripts')
|
||||
import notify
|
||||
except ImportError:
|
||||
notify = None
|
||||
print("警告:未找到青龙通知模块,通知功能将不可用")
|
||||
|
||||
def log_debug(msg):
|
||||
"""调试日志"""
|
||||
if DEBUG_MODE:
|
||||
print(f"[DEBUG] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
|
||||
|
||||
def log_info(msg):
|
||||
"""信息日志"""
|
||||
print(f"[INFO] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
|
||||
|
||||
def log_error(msg):
|
||||
"""错误日志"""
|
||||
print(f"[ERROR] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
|
||||
|
||||
def safe_request(method, url, **kwargs):
|
||||
"""带重试机制的请求函数"""
|
||||
retries = 0
|
||||
while retries < MAX_RETRIES:
|
||||
try:
|
||||
response = requests.request(method, url, **kwargs)
|
||||
if response.status_code == 200:
|
||||
return response
|
||||
log_error(f"请求失败: {url} 状态码: {response.status_code}")
|
||||
except Exception as e:
|
||||
log_error(f"请求异常: {url} 错误: {str(e)}")
|
||||
|
||||
retries += 1
|
||||
if retries < MAX_RETRIES:
|
||||
time.sleep(2 ** retries) # 指数退避
|
||||
return None
|
||||
|
||||
def add_notification(title, content):
|
||||
"""添加到通知列表"""
|
||||
notification_list.append(f"【{title}】\n{content}")
|
||||
log_info(f"已添加通知: {title}")
|
||||
|
||||
def send_notification():
|
||||
"""使用青龙通知模块发送通知"""
|
||||
if not notification_list:
|
||||
log_info("无通知内容,跳过发送")
|
||||
return
|
||||
|
||||
if notify is None:
|
||||
log_error("通知模块未导入,无法发送通知")
|
||||
return
|
||||
|
||||
content = "\n\n".join(notification_list)
|
||||
try:
|
||||
notify.send("塔斯汀签到脚本通知", content)
|
||||
log_info("通知发送成功")
|
||||
except Exception as e:
|
||||
log_error(f"发送通知异常: {str(e)}")
|
||||
|
||||
def checkin(tk):
|
||||
"""签到功能"""
|
||||
# 获取动态活动ID
|
||||
activityId = qdsj(tk)
|
||||
|
||||
# 如果动态获取失败,使用计算的活动ID
|
||||
if not activityId:
|
||||
current_date = datetime.now()
|
||||
activityId = 59 + (current_date.year - 2025) * 12 + (current_date.month - 5)
|
||||
log_info(f"使用计算的活动ID: {activityId}")
|
||||
|
||||
url = "https://sss-web.tastientech.com/api/sign/member/signV2"
|
||||
payload = {"activityId": activityId, "memberName": "", "memberPhone": ""}
|
||||
headers = {
|
||||
'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(0x63090a13) UnifiedPCWindowsWechat(0xf254032b) XWEB/13655",
|
||||
'Content-Type': "application/json",
|
||||
'xweb_xhr': "1",
|
||||
'user-token': tk,
|
||||
'channel': "1"
|
||||
}
|
||||
|
||||
response = safe_request('POST', url, data=json.dumps(payload), headers=headers)
|
||||
if response:
|
||||
try:
|
||||
data = response.json()
|
||||
if data.get("code") == 200:
|
||||
# 解析签到结果
|
||||
if data['result']['rewardInfoList'][0].get('rewardName'):
|
||||
reward = data['result']['rewardInfoList'][0]['rewardName']
|
||||
else:
|
||||
reward = f"{data['result']['rewardInfoList'][0]['point']}积分"
|
||||
|
||||
# 添加到通知
|
||||
add_notification(
|
||||
"签到成功",
|
||||
f"账号: {tk[:10]}...\n"
|
||||
f"结果: 获得 {reward}\n"
|
||||
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
||||
)
|
||||
return True, f"签到成功,获得: {reward}"
|
||||
else:
|
||||
add_notification(
|
||||
"签到失败",
|
||||
f"账号: {tk[:10]}...\n"
|
||||
f"原因: {data.get('msg', '未知错误')}\n"
|
||||
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
||||
)
|
||||
return False, data.get("msg", f"签到失败: {response.text}")
|
||||
except Exception as e:
|
||||
add_notification(
|
||||
"签到异常",
|
||||
f"账号: {tk[:10]}...\n"
|
||||
f"错误: {str(e)}\n"
|
||||
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
||||
)
|
||||
return False, f"解析签到响应异常: {str(e)}"
|
||||
else:
|
||||
add_notification(
|
||||
"签到请求失败",
|
||||
f"账号: {tk[:10]}...\n"
|
||||
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
||||
)
|
||||
return False, "请求失败"
|
||||
|
||||
def qdsj(ck):
|
||||
"""获取签到活动ID"""
|
||||
headers = {
|
||||
'user-token': ck,
|
||||
'channel': '1'
|
||||
}
|
||||
data = {"shopId": "", "birthday": "", "gender": 0, "nickName": None, "phone": ""}
|
||||
response = safe_request('POST', 'https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list',
|
||||
json=data, headers=headers)
|
||||
|
||||
if not response:
|
||||
return ''
|
||||
|
||||
try:
|
||||
dl = response.json()
|
||||
activityId = ''
|
||||
for i in dl['result']:
|
||||
if '每日签到' in i['bannerName'] or '签到' in i['bannerName']:
|
||||
qd = i['jumpPara']
|
||||
activityId = json.loads(qd)['activityId']
|
||||
log_info(f"获取到本月签到代码:{activityId}")
|
||||
return activityId
|
||||
except Exception as e:
|
||||
log_error(f"解析签到活动ID异常: {str(e)}")
|
||||
|
||||
return ''
|
||||
|
||||
def filter_lines(input_string):
|
||||
"""过滤有效账号行"""
|
||||
lines = input_string.splitlines()
|
||||
return [
|
||||
line.strip()
|
||||
for line in lines
|
||||
if line.strip()
|
||||
]
|
||||
|
||||
def start():
|
||||
"""主启动函数"""
|
||||
global notification_list
|
||||
|
||||
# 环境变量处理
|
||||
env = os.getenv('tst_tk_env', '')
|
||||
accounts = filter_lines(env)
|
||||
if not accounts:
|
||||
log_error("未找到有效账号配置")
|
||||
add_notification("配置错误", "未找到有效账号配置,请检查环境变量tst_tk_env")
|
||||
return
|
||||
|
||||
log_info(f"===== 开始执行签到,共 {len(accounts)} 个账号 =====")
|
||||
|
||||
# 处理每个账号
|
||||
for account in accounts:
|
||||
try:
|
||||
tk = account.split('|')[0].strip() # 只取token部分
|
||||
log_info(f"处理账号: {tk[:10]}...")
|
||||
|
||||
# 签到
|
||||
success, message = checkin(tk)
|
||||
log_info(f"签到结果: {message}")
|
||||
except Exception as e:
|
||||
log_error(f"处理账号异常: {str(e)}")
|
||||
|
||||
# 发送所有通知
|
||||
send_notification()
|
||||
log_info("===== 签到执行结束 =====")
|
||||
|
||||
if __name__ == '__main__':
|
||||
start()
|
||||
29
脚本库/web版/抓包/ug爱好者_,/2021-09-25_ugsnx_62534dd8.js
Normal file
29
脚本库/web版/抓包/ug爱好者_,/2021-09-25_ugsnx_62534dd8.js
Normal file
@@ -0,0 +1,29 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/ugsnx.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ugsnx.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/ugsnx.js
|
||||
// # UploadedAt: 2021-09-25T00:15:59Z
|
||||
// # SHA256: 62534dd85b6f24116fc614bca2846afa150ea0a8351dabb0de54e53be897dbef
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const rules = {
|
||||
name: "【ug爱好者】: ",
|
||||
url: "http://www.ugsnx.com/forum.php?mod=guide&view=newthread&mobile=2", //用于获取formhash的链接
|
||||
cookie: config.ugsnx.cookie,
|
||||
formhash: 'formhash=(.+?)"', //formhash正则
|
||||
verify: "有你更精彩!",
|
||||
op: [{
|
||||
name: "签到",
|
||||
charset: "gb2312",
|
||||
method: "get", //签到请求方式 get/post
|
||||
url: "http://www.ugsnx.com/plugin.php?id=dsu_amupper&ppersubmit=true&nogoto=1&formhash=@formhash&mobile=2&inajax=1"
|
||||
}]
|
||||
};
|
||||
|
||||
async function ugsnx() {
|
||||
const template = require("../Template");
|
||||
return rules.name + await template(rules)
|
||||
}
|
||||
module.exports = ugsnx
|
||||
79
脚本库/web版/抓包/utils/2026-05-23_utils_bce11cad.py
Normal file
79
脚本库/web版/抓包/utils/2026-05-23_utils_bce11cad.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/utils.py
|
||||
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/utils.py
|
||||
# Repo: CN-Grace/QinglongScripts
|
||||
# Path: utils.py
|
||||
# UploadedAt: 2026-05-23T15:38:06Z
|
||||
# SHA256: bce11cad3d194cbf6779b4f13ce88d5838904d43fd875c9ada09b880c46d6f39
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
#!/usr/bin/env python3
|
||||
"""QinglongScripts 公共工具模块"""
|
||||
|
||||
import time
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
|
||||
import requests
|
||||
|
||||
# 北京时间时区 (UTC+8)
|
||||
_TZ_BEIJING = timezone(timedelta(hours=8))
|
||||
|
||||
# ---------- 时间工具 ----------
|
||||
def beijing_now() -> datetime:
|
||||
"""返回当前北京时间 datetime"""
|
||||
return datetime.now(_TZ_BEIJING)
|
||||
|
||||
|
||||
def beijing_time_str(fmt: str = "%Y-%m-%d %H:%M:%S") -> str:
|
||||
"""返回当前北京时间字符串"""
|
||||
return beijing_now().strftime(fmt)
|
||||
|
||||
|
||||
# ---------- 日志函数 ----------
|
||||
def _log(emoji: str, msg: str):
|
||||
print(f"[{beijing_time_str()}] {emoji} {msg}")
|
||||
|
||||
|
||||
def log_info(msg: str):
|
||||
_log("ℹ️", msg)
|
||||
|
||||
|
||||
def log_success(msg: str):
|
||||
_log("✅", msg)
|
||||
|
||||
|
||||
def log_warning(msg: str):
|
||||
_log("⚠️", msg)
|
||||
|
||||
|
||||
def log_error(msg: str):
|
||||
_log("❌", msg)
|
||||
|
||||
|
||||
# ---------- HTTP 工具 ----------
|
||||
def create_session(
|
||||
cookie: Optional[str] = None,
|
||||
user_agent: Optional[str] = None,
|
||||
extra_headers: Optional[dict] = None,
|
||||
) -> requests.Session:
|
||||
"""创建带可选 Cookie 和自定义 Headers 的 requests.Session"""
|
||||
session = requests.Session()
|
||||
session.headers.update({
|
||||
"User-Agent": user_agent or (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
|
||||
),
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Connection": "keep-alive",
|
||||
})
|
||||
if extra_headers:
|
||||
session.headers.update(extra_headers)
|
||||
if cookie:
|
||||
cookie_dict = {
|
||||
item.split("=")[0]: item.split("=")[1]
|
||||
for item in cookie.split("; ") if "=" in item
|
||||
}
|
||||
requests.utils.add_dict_to_cookiejar(session.cookies, cookie_dict)
|
||||
return session
|
||||
72
脚本库/web版/抓包/voapi/2025-10-31_voapi_d60b3048.js
Normal file
72
脚本库/web版/抓包/voapi/2025-10-31_voapi_d60b3048.js
Normal file
@@ -0,0 +1,72 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/voapi.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/voapi.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/voapi.js
|
||||
// # UploadedAt: 2025-10-31T06:24:35Z
|
||||
// # SHA256: d60b3048fdc5bac872cc8f9e41e632cc2fe45ebc884f6f0966218fa1716e8b7f
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
async function voapi() {
|
||||
let result = '【voapi】'; // 初始化结果字符串
|
||||
|
||||
try {
|
||||
// 从 config 中读取 token
|
||||
const token = config.voapi.token;
|
||||
|
||||
if (!token) {
|
||||
const errorMsg = `${result}-未找到有效的token配置`;
|
||||
console.log(errorMsg);
|
||||
// 确保返回字符串
|
||||
return String(errorMsg);
|
||||
}
|
||||
|
||||
console.log(token);
|
||||
// 设置请求头
|
||||
const headers = {
|
||||
'Authorization': token, // 直接使用配置中的完整 token 值
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36'
|
||||
};
|
||||
|
||||
// 发送 POST 请求
|
||||
const response = await axios.post('https://demo.voapi.top/api/check_in', {}, { headers });
|
||||
|
||||
// 处理响应 - 根据实际返回结构优化
|
||||
// 成功响应示例: {"code":0,"msg":"签到成功","data":{"checkin_days":1}}
|
||||
if (response.data && response.data.code === 0) {
|
||||
const msg = response.data.msg || '签到成功';
|
||||
// 尝试从 data 中提取更多信息,例如连续签到天数
|
||||
let extraInfo = '';
|
||||
if (response.data.data) {
|
||||
if (response.data.data.checkin_days !== undefined) {
|
||||
extraInfo += `,连续签到 ${response.data.data.checkin_days} 天`;
|
||||
}
|
||||
// 可以在这里添加对 data 中其他字段的处理
|
||||
}
|
||||
result += `${msg}${extraInfo}`;
|
||||
console.log(result);
|
||||
} else {
|
||||
// 失败响应示例: {"code":1,"msg":"今天已经签到过了"}
|
||||
const msg = response.data.msg || response.data.message || '未知错误';
|
||||
result += `签到失败: ${msg}`;
|
||||
console.log(result);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('【voapi】签到请求失败:', error.message);
|
||||
result += `签到请求失败: ${error.message}`;
|
||||
// 异常时,返回的结果字符串会包含 "失败" 或 "出错",这会匹配 checkbox.js 中的单独推送条件
|
||||
} finally {
|
||||
// 在 finally 块中确保返回值是字符串类型
|
||||
// 这可以防止任何意外的非字符串返回值导致主程序出错
|
||||
const finalResult = String(result);
|
||||
// console.log('Final result type:', typeof finalResult, 'Value:', finalResult); // 调试用
|
||||
return finalResult;
|
||||
}
|
||||
}
|
||||
|
||||
// 确保模块导出的是一个函数
|
||||
module.exports = voapi;
|
||||
33
脚本库/web版/抓包/zbwx/2021-09-30_zbwx_f0d29096.js
Normal file
33
脚本库/web版/抓包/zbwx/2021-09-30_zbwx_f0d29096.js
Normal file
@@ -0,0 +1,33 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/zbwx.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/zbwx.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/zbwx.js
|
||||
// # UploadedAt: 2021-09-30T00:56:04Z
|
||||
// # SHA256: f0d29096de088207cfb49e6ec77162969498bc2d4c07f762a36cc65c46aa6468
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const axios = require("axios");
|
||||
function task() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
let cookie = config.zbwx.cookie;
|
||||
let url = "http://api.wenxue.mgtv.com/user/benefits/merge?cpsOpid=zb_xm&_filterData=1&device_id=c3ad60274fc24dea&channel=0&_versions=1260&merchant=zb_xm&Guid=48c5d293-6a72-461a-9cd5-cacc4789b19f&ua=Mozilla%2F5.0%20(Linux%3B%20Android%209%3B%20MI%206%20Build%2FPKQ1-wesley_iui-19.07.13%3B%20wv)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Version%2F4.0%20Chrome%2F74.0.3729.136%20Mobile%20Safari%2F537.36&platform=2&manufacturer=Xiaomi&clientType=1&width=1080&appKey=7283695590&model=MI%206&cpsSource=0&brand=Xiaomi&subapp=0&youthModel=0&height=1920&path=%2Fuser%2Fbenefits%2Fmerge×tamp=1632355285136&sn=392a955a1842912262f01a84af983dd2";
|
||||
let res = await axios.get(url, { headers: { cookie: cookie } });
|
||||
if (res.data.data.signInfo) {
|
||||
msg = `签到成功✅本月累计签到${res.data.data.signInfo.sign.m_num}天`;
|
||||
} else {
|
||||
msg = res.data.error;
|
||||
}
|
||||
console.log(msg);
|
||||
} catch (err) {
|
||||
msg = "签到接口请求出错";
|
||||
console.log(err);
|
||||
}
|
||||
resolve("【瞻彼文学】:" + msg + "\n当月累计签到达到7、14、21、满签时,可获得额外奖励\n请自行手动领取");
|
||||
});
|
||||
}
|
||||
|
||||
//task()
|
||||
module.exports = task;
|
||||
254
脚本库/web版/抓包/同程旅游/2025-11-29_tclx_b49c33dc.py
Normal file
254
脚本库/web版/抓包/同程旅游/2025-11-29_tclx_b49c33dc.py
Normal file
@@ -0,0 +1,254 @@
|
||||
# Source: https://github.com/back-101/zyqinglong/blob/main/tclx.py
|
||||
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/tclx.py
|
||||
# Repo: back-101/zyqinglong
|
||||
# Path: tclx.py
|
||||
# UploadedAt: 2025-11-29T06:56:58Z
|
||||
# SHA256: b49c33dc10adf577eb8b1809d98ceeddc3a58a11676c70eb65a040f3d76c9035
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
# -*- coding=UTF-8 -*-
|
||||
# @Project QL_TimingScript
|
||||
# @fileName tclx.py
|
||||
# @author Echo
|
||||
# @EditTime 2025/3/14
|
||||
# cron: 0 0 9 * * *
|
||||
# const $ = new Env('同程旅游');
|
||||
"""
|
||||
开启抓包,进入app 进入‘领福利’界面,点击签到,查看https://app.17u.cn/welfarecenter/index/signIndex请求头
|
||||
提取变量: apptoken、device
|
||||
变量格式: phone#apptoken#device,多个账号用@隔开
|
||||
"""
|
||||
import asyncio
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
import httpx
|
||||
|
||||
from fn_print import fn_print
|
||||
from get_env import get_env
|
||||
from sendNotify import send_notification_message_collection
|
||||
|
||||
tc_cookies = get_env("tc_cookie", "@")
|
||||
|
||||
|
||||
class Tclx:
|
||||
def __init__(self, cookie):
|
||||
self.client = httpx.AsyncClient(base_url="https://app.17u.cn/welfarecenter",
|
||||
verify=False,
|
||||
timeout=60)
|
||||
self.phone = cookie.split("#")[0]
|
||||
self.apptoken = cookie.split("#")[1]
|
||||
self.device = cookie.split("#")[2]
|
||||
self.headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'phone': self.phone,
|
||||
'channel': '1',
|
||||
'apptoken': self.apptoken,
|
||||
'sec-fetch-site': 'same-site',
|
||||
'accept-language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'accept-encoding': 'gzip, deflate, br',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'origin': 'https://m.17u.cn',
|
||||
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 TcTravel/11.0.0 tctype/wk',
|
||||
'referer': 'https://m.17u.cn/',
|
||||
# 'content-length': str(len(payload_str.encode('utf-8'))),
|
||||
'device': self.device,
|
||||
'sec-fetch-dest': 'empty'
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
async def get_today_date():
|
||||
return datetime.now().strftime('%Y-%m-%d')
|
||||
|
||||
async def sign_in(self):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/index/signIndex",
|
||||
headers=self.headers,
|
||||
json={}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - token失效了,请更新")
|
||||
return None
|
||||
else:
|
||||
today_sign = data['data']['todaySign']
|
||||
mileage = data['data']['mileageBalance']['mileage']
|
||||
fn_print(f"用户【{self.phone}】 - 今日{'已' if today_sign else '未'}签到,当前剩余里程{mileage}!")
|
||||
return today_sign
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 签到请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
return None
|
||||
|
||||
async def do_sign_in(self):
|
||||
today_date = await self.get_today_date()
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/index/sign",
|
||||
headers=self.headers,
|
||||
json={"type": 1, "day": today_date}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 签到失败了,尝试获取任务列表")
|
||||
return False
|
||||
else:
|
||||
fn_print(f"用户【{self.phone}】 - 签到成功!开始获取任务列表")
|
||||
return True
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 执行签到请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
return False
|
||||
|
||||
async def get_task_list(self):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/task/taskList?version=11.0.7",
|
||||
headers=self.headers,
|
||||
json={}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 获取任务列表失败了")
|
||||
return None
|
||||
else:
|
||||
tasks = []
|
||||
for task in data['data']:
|
||||
if task['state'] == 1 and task['browserTime'] != 0:
|
||||
tasks.append(
|
||||
{
|
||||
'taskCode': task['taskCode'],
|
||||
'title': task['title'],
|
||||
'browserTime': task['browserTime']
|
||||
}
|
||||
)
|
||||
return tasks
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 获取任务列表请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
return None
|
||||
|
||||
async def perform_tasks(self, task_code):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/task/start",
|
||||
headers=self.headers,
|
||||
json={"taskCode": task_code}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 执行任务【{task_code}】失败了,跳过当前任务")
|
||||
return None
|
||||
else:
|
||||
task_id = data['data']
|
||||
return task_id
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 执行任务【{task_code}】请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
return None
|
||||
|
||||
async def finsh_task(self, task_id):
|
||||
max_retry = 3 # 最大重试次数
|
||||
retry_delay = 2 # 重试间隔时间(秒)
|
||||
for attempt in range(max_retry):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/task/finish",
|
||||
headers=self.headers,
|
||||
json={"id": task_id}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] == 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 完成任务【{task_id}】成功!开始领取奖励")
|
||||
return True
|
||||
if attempt < max_retry - 1:
|
||||
fn_print(f"用户【{self.phone}】 - 完成任务【{task_id}】失败了,尝试重新提交(第{attempt + 1}次重试。。)")
|
||||
await asyncio.sleep(retry_delay * (attempt + 1))
|
||||
continue
|
||||
fn_print(f"用户【{self.phone}】 - 完成任务【{task_id}】最终失败,跳过当前任务")
|
||||
return False
|
||||
except Exception as e:
|
||||
error_msg = f"用户【{self.phone}】 - 完成任务【{task_id}】请求异常!{e}"
|
||||
if 'response' in locals():
|
||||
error_msg += f"\n{response.text}"
|
||||
fn_print(error_msg)
|
||||
if attempt == max_retry - 1:
|
||||
return False
|
||||
await asyncio.sleep(retry_delay * (attempt + 1))
|
||||
|
||||
async def receive_reward(self, task_id):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/task/receive",
|
||||
headers=self.headers,
|
||||
json={"id": task_id}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 领取签到奖励失败了, 请尝试手动领取")
|
||||
else:
|
||||
fn_print(f"用户【{self.phone}】 - 领取签到奖励成功!开始下一个任务")
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 领取签到奖励请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
|
||||
async def get_mileage_info(self):
|
||||
try:
|
||||
response = await self.client.post(
|
||||
url="/index/signIndex",
|
||||
headers=self.headers,
|
||||
json={}
|
||||
)
|
||||
data = response.json()
|
||||
if data['code'] != 2200:
|
||||
fn_print(f"用户【{self.phone}】 - 获取积分信息失败了")
|
||||
return None
|
||||
else:
|
||||
cycle_sign_num = data['data']['cycleSighNum']
|
||||
continuous_history = data['data']['continuousHistory']
|
||||
mileage = data['data']['mileageBalance']['mileage']
|
||||
today_mileage = data['data']['mileageBalance']['todayMileage']
|
||||
fn_print(
|
||||
f"用户【{self.phone}】 - 本月签到{cycle_sign_num}天,连续签到{continuous_history}天,今日共获取{today_mileage}里程,当前剩余里程{mileage}")
|
||||
except Exception as e:
|
||||
fn_print(f"用户【{self.phone}】 - 获取积分信息请求异常!{e}")
|
||||
fn_print(response.text)
|
||||
return None
|
||||
|
||||
async def run(self):
|
||||
today_sign = await self.sign_in()
|
||||
if today_sign is None:
|
||||
return
|
||||
if today_sign:
|
||||
fn_print(f"用户【{self.phone}】 - 今日已签到,开始获取任务列表")
|
||||
else:
|
||||
if await self.do_sign_in():
|
||||
fn_print(f"用户【{self.phone}】 - 签到成功,开始获取任务列表")
|
||||
tasks = await self.get_task_list()
|
||||
if tasks:
|
||||
for task in tasks:
|
||||
task_code = task['taskCode']
|
||||
title = task['title']
|
||||
browser_time = task['browserTime']
|
||||
fn_print(f"用户【{self.phone}】 - 开始做任务【{title}】,需要浏览{browser_time}秒")
|
||||
task_id = await self.perform_tasks(task_code)
|
||||
if task_id:
|
||||
await asyncio.sleep(browser_time)
|
||||
if await self.finsh_task(task_id):
|
||||
await self.receive_reward(task_id)
|
||||
await self.get_mileage_info()
|
||||
|
||||
|
||||
async def main():
|
||||
tasks = []
|
||||
for cookie in tc_cookies:
|
||||
tclx = Tclx(cookie)
|
||||
tasks.append(tclx.run())
|
||||
await asyncio.gather(*tasks)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
send_notification_message_collection(f"同程旅行签到通知 - {datetime.now().strftime('%Y/%m/%d')}")
|
||||
42
脚本库/web版/抓包/好书友论坛_,/2022-02-22_hsy_e824ae28.js
Normal file
42
脚本库/web版/抓包/好书友论坛_,/2022-02-22_hsy_e824ae28.js
Normal file
@@ -0,0 +1,42 @@
|
||||
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/hsy.js
|
||||
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hsy.js
|
||||
// # Repo: Wenmoux/checkbox
|
||||
// # Path: scripts/hsy.js
|
||||
// # UploadedAt: 2022-02-22T20:29:28Z
|
||||
// # SHA256: e824ae285da7e27d573d4a6dae4a328df6fde28e563cbe905df3dd88e126e272
|
||||
// # Category: web版/抓包
|
||||
// # Evidence: web/H5关键词 + cookie/token/header
|
||||
//
|
||||
|
||||
const rules = {
|
||||
name: "【好书友论坛】: ",
|
||||
url: "http://www.58shuyou.com/plugin.php?id=k_misign:sign", //用于获取formhash的链接
|
||||
cookie: config.hsy.cookie,
|
||||
ua: "pc",
|
||||
formhash: 'formhash=(.+?)\\"', //formhash正则
|
||||
verify: "你还没登录,确定登录", //验证cookie状态
|
||||
op: [{
|
||||
name: "签到",
|
||||
ua: "pc",
|
||||
charset: "gb2312",
|
||||
method: "get", //签到请求方式 get/post
|
||||
url: "http://www.58shuyou.com/plugin.php?id=k_misign:sign&operation=qiandao&format=text&formhash=@formhash", //签到链接
|
||||
},
|
||||
{
|
||||
name: "在线奖励",
|
||||
ua: "pc",
|
||||
charset: "gb2312",
|
||||
method: "get", //签到请求方式 get/post
|
||||
url: "http://www.58shuyou.com/plugin.php?id=gonline:index&action=award&formhash=@formhash", //签到链接
|
||||
reg2: "没", //重复签到判断
|
||||
reg3: "parent", //签到成功判断
|
||||
info: "\\(\\'(.+?)\\'", //签到成功返回信息
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
async function hsy() {
|
||||
const template = require("../Template");
|
||||
return rules.name + await template(rules)
|
||||
}
|
||||
module.exports = hsy
|
||||
224
脚本库/web版/抓包/小黑盒每日签到/2026-05-24_Heybox_cf7af030.py
Normal file
224
脚本库/web版/抓包/小黑盒每日签到/2026-05-24_Heybox_cf7af030.py
Normal file
@@ -0,0 +1,224 @@
|
||||
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/Heybox.py
|
||||
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Heybox.py
|
||||
# Repo: CN-Grace/QinglongScripts
|
||||
# Path: Heybox.py
|
||||
# UploadedAt: 2026-05-24T03:44:01Z
|
||||
# SHA256: cf7af03059bd3d2d7e1afc7c76282554853e47ce7576ceaadfb124683364afc1
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
cron: 0 8 * * *
|
||||
new Env("小黑盒每日签到")
|
||||
小黑盒 (Heybox) 每日签到脚本
|
||||
- 获取签到日历和任务列表
|
||||
- 执行每日签到
|
||||
- 推送签到结果和奖励信息
|
||||
"""
|
||||
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
import requests
|
||||
from datetime import datetime, timezone, timedelta
|
||||
|
||||
from utils import log_info, log_success, log_warning, log_error, beijing_time_str
|
||||
from notifier import send as notify_send
|
||||
|
||||
# ==================== 用户配置 ====================
|
||||
HEYBOX_COOKIE = os.environ.get("HEYBOX_COOKIE", "") # pkey=...;x_xhh_tokenid=...
|
||||
HEYBOX_ID = os.environ.get("HEYBOX_ID", "") # 小黑盒用户 ID
|
||||
IMEI = os.environ.get("HEYBOX_IMEI", "") # 设备标识
|
||||
|
||||
API_BASE = "https://api.xiaoheihe.cn"
|
||||
TZ_BEIJING = timezone(timedelta(hours=8))
|
||||
|
||||
|
||||
def _random_str(length: int = 32) -> str:
|
||||
chars = string.ascii_letters + string.digits
|
||||
return "".join(random.choice(chars) for _ in range(length))
|
||||
|
||||
|
||||
def _random_hex(length: int = 8) -> str:
|
||||
return "".join(random.choice("0123456789ABCDEF") for _ in range(length))
|
||||
|
||||
|
||||
def create_session() -> requests.Session:
|
||||
session = requests.Session()
|
||||
session.headers.update({
|
||||
"User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 ApiMaxJia/1.0",
|
||||
"Accept-Encoding": "gzip",
|
||||
})
|
||||
if HEYBOX_COOKIE:
|
||||
for item in HEYBOX_COOKIE.split(";"):
|
||||
item = item.strip()
|
||||
if "=" in item:
|
||||
k, v = item.split("=", 1)
|
||||
session.cookies.set(k.strip(), v.strip(), domain="xiaoheihe.cn")
|
||||
return session
|
||||
|
||||
|
||||
def build_params() -> str:
|
||||
"""构建通用 Query 参数"""
|
||||
heybox_id = HEYBOX_ID or _extract_from_cookie("heybox_id", "30182259")
|
||||
imei = IMEI or _extract_from_cookie("imei", "a9381821da647661")
|
||||
params = [
|
||||
f"heybox_id={heybox_id}",
|
||||
f"imei={imei}",
|
||||
"device_info=25102RKBEC",
|
||||
f"nonce={_random_str(32)}",
|
||||
f"hkey={_random_hex(8)}",
|
||||
"os_type=Android",
|
||||
"x_os_type=Android",
|
||||
"x_client_type=mobile",
|
||||
"os_version=16",
|
||||
"version=1.3.382",
|
||||
"build=1076",
|
||||
]
|
||||
return "&".join(params)
|
||||
|
||||
|
||||
def _extract_from_cookie(key: str, default: str = "") -> str:
|
||||
for item in HEYBOX_COOKIE.split(";"):
|
||||
item = item.strip()
|
||||
if "=" in item and item.split("=", 1)[0].strip() == key:
|
||||
return item.split("=", 1)[1].strip()
|
||||
return default
|
||||
|
||||
|
||||
def api_get(session: requests.Session, path: str) -> dict:
|
||||
"""通用 GET 请求"""
|
||||
url = f"{API_BASE}{path}?{build_params()}"
|
||||
try:
|
||||
resp = session.get(url, timeout=15)
|
||||
return resp.json()
|
||||
except Exception as e:
|
||||
log_error(f"API 请求失败 [{path}]: {e}")
|
||||
return {}
|
||||
|
||||
|
||||
def get_sign_status(session: requests.Session) -> tuple:
|
||||
"""检查今日签到状态,返回 (is_signed_today, sign_streak, calendar)"""
|
||||
result = api_get(session, "/task/sign_list/")
|
||||
if result.get("status") != "ok":
|
||||
log_error(f"获取签到日历失败: {result}")
|
||||
return False, 0, []
|
||||
|
||||
sign_list = result.get("result", {}).get("sign_list", [])
|
||||
today_start = datetime.now(TZ_BEIJING).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
today_ts = int(today_start.timestamp())
|
||||
|
||||
is_signed = False
|
||||
for item in sign_list:
|
||||
if item["date"] == today_ts:
|
||||
is_signed = item.get("is_sign", False)
|
||||
break
|
||||
|
||||
return is_signed, sign_list
|
||||
|
||||
|
||||
def do_sign(session: requests.Session) -> str:
|
||||
"""执行签到 (v3 API),返回 state: success/ignore/fail"""
|
||||
result = api_get(session, "/task/sign_v3/sign")
|
||||
if result.get("status") != "ok":
|
||||
log_error(f"签到请求失败: {result}")
|
||||
return "fail"
|
||||
|
||||
state = result.get("result", {}).get("state", "fail")
|
||||
state_map = {
|
||||
"success": "签到成功 ✅",
|
||||
"ignore": "今日已签到,无需重复 ⚠️",
|
||||
"fail": "签到失败 ❌",
|
||||
}
|
||||
log_info(f"签到结果: {state_map.get(state, state)}")
|
||||
return state
|
||||
|
||||
|
||||
def get_task_list(session: requests.Session) -> dict:
|
||||
"""获取任务列表,含签到奖励信息"""
|
||||
result = api_get(session, "/task/list_v2/")
|
||||
if result.get("status") != "ok":
|
||||
log_warning(f"获取任务列表失败: {result}")
|
||||
return {}
|
||||
return result.get("result", {})
|
||||
|
||||
|
||||
def get_account_info(session: requests.Session) -> str:
|
||||
"""获取用户昵称"""
|
||||
result = api_get(session, "/account/info/")
|
||||
if result.get("msg") == "":
|
||||
profile = result.get("result", {}).get("profile", {})
|
||||
return profile.get("nickname", "未知")
|
||||
return "未知"
|
||||
|
||||
|
||||
def build_report(nickname: str, state: str, task_info: dict) -> str:
|
||||
"""构建签到报告"""
|
||||
lines = ["🎮 小黑盒 每日签到", "", f"👤 账号: {nickname}"]
|
||||
|
||||
if state == "success":
|
||||
lines.append("✅ 签到状态: 签到成功!")
|
||||
|
||||
# 提取签到奖励
|
||||
award_found = False
|
||||
for group in task_info.get("task_list", []):
|
||||
for task in group.get("tasks", []):
|
||||
if task.get("type") == "sign":
|
||||
awards = task.get("award_desc_v2", [])
|
||||
if awards:
|
||||
award_found = True
|
||||
lines.append(f"🎁 签到奖励:")
|
||||
for a in awards:
|
||||
lines.append(f" {a.get('desc', '')}")
|
||||
lines.append(f"🔥 连续签到: {task.get('sign_in_streak', '?')} 天")
|
||||
break
|
||||
|
||||
if not award_found:
|
||||
lines.append("🎁 奖励: 已自动发放")
|
||||
elif state == "ignore":
|
||||
lines.append("⚠️ 签到状态: 今日已签到")
|
||||
lines.append("🎁 无需重复签到")
|
||||
else:
|
||||
lines.append("❌ 签到状态: 签到失败")
|
||||
lines.append("💡 请检查 Cookie 是否有效")
|
||||
|
||||
lines.append("")
|
||||
lines.append("─" * 18)
|
||||
lines.append(f"🕒 执行时间: {beijing_time_str()}")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main():
|
||||
if not HEYBOX_COOKIE:
|
||||
log_error("未配置 HEYBOX_COOKIE")
|
||||
notify_send("小黑盒签到 错误", "❌ 未配置 HEYBOX_COOKIE")
|
||||
return
|
||||
|
||||
session = create_session()
|
||||
nickname = get_account_info(session)
|
||||
log_info(f"账号: {nickname}")
|
||||
|
||||
# 检查签到状态
|
||||
is_signed, sign_list = get_sign_status(session)
|
||||
|
||||
state = "ignore"
|
||||
if not is_signed:
|
||||
log_info("今日未签到,开始执行签到...")
|
||||
state = do_sign(session)
|
||||
is_signed = (state in ("success", "ignore"))
|
||||
else:
|
||||
log_info("今日已签到,无需重复签到")
|
||||
|
||||
task_info = get_task_list(session)
|
||||
|
||||
task_info = task_info or {}
|
||||
|
||||
# 构建报告
|
||||
report = build_report(nickname, state, task_info)
|
||||
notify_send("小黑盒 签到报告", report)
|
||||
log_success("推送完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
353
脚本库/web版/抓包/库街区自动签到/2026-05-23_ql_kuro_46013225.py
Normal file
353
脚本库/web版/抓包/库街区自动签到/2026-05-23_ql_kuro_46013225.py
Normal file
@@ -0,0 +1,353 @@
|
||||
# Source: https://github.com/Small-tailqwq/ql_script/blob/master/kuro/ql_kuro.py
|
||||
# Raw: https://raw.githubusercontent.com/Small-tailqwq/ql_script/master/kuro/ql_kuro.py
|
||||
# Repo: Small-tailqwq/ql_script
|
||||
# Path: kuro/ql_kuro.py
|
||||
# UploadedAt: 2026-05-23T15:50:58Z
|
||||
# SHA256: 46013225510794598730a4bad8387ebfbcee626a372ce9a1e605ff7acbf18bac
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
cron: 30 8 * * *
|
||||
new Env('库街区自动签到');
|
||||
|
||||
基于 mxyooR/Kuro-autosignin (GPL-3.0) 精简适配青龙单文件版
|
||||
上游版本: a334796 (2026-04-21)
|
||||
最后更新: 2026-05-23 09:00 (UTC+8)
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import random
|
||||
import socket
|
||||
import time
|
||||
import uuid
|
||||
from typing import Dict, List, Optional
|
||||
import requests
|
||||
|
||||
try:
|
||||
from sendNotify import send
|
||||
except Exception:
|
||||
try:
|
||||
from notify import send
|
||||
except Exception:
|
||||
send = None
|
||||
|
||||
TIMEOUT = 30
|
||||
GAME_WUWA_ID = "3"
|
||||
GAME_PGR_ID = "2"
|
||||
SERVER_WUWA = "76402e5b20be2c39f095a152090afddc"
|
||||
SERVER_PGR = "1000"
|
||||
MAX_RETRIES = 3
|
||||
|
||||
|
||||
class API:
|
||||
USER_MINE = "https://api.kurobbs.com/user/mineV2"
|
||||
USER_SIGN_IN = "https://api.kurobbs.com/user/signIn"
|
||||
USER_ROLE_LIST = "https://api.kurobbs.com/user/role/findRoleList"
|
||||
FORUM_LIST = "https://api.kurobbs.com/forum/list"
|
||||
FORUM_POST_DETAIL = "https://api.kurobbs.com/forum/getPostDetail"
|
||||
FORUM_LIKE = "https://api.kurobbs.com/forum/like"
|
||||
TASK_PROCESS = "https://api.kurobbs.com/encourage/level/getTaskProcess"
|
||||
TASK_SHARE = "https://api.kurobbs.com/encourage/level/shareTask"
|
||||
GAME_SIGN_IN = "https://api.kurobbs.com/encourage/signIn/v2"
|
||||
GAME_SIGN_RECORD = "https://api.kurobbs.com/encourage/signIn/queryRecordV2"
|
||||
|
||||
|
||||
def get_ip_address() -> str:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
try:
|
||||
s.connect(("8.8.8.8", 80))
|
||||
return s.getsockname()[0]
|
||||
except socket.error:
|
||||
return "127.0.0.1"
|
||||
finally:
|
||||
s.close()
|
||||
|
||||
|
||||
class KuroSigner:
|
||||
def __init__(self, token_data: Dict[str, str]):
|
||||
self.token = token_data['token']
|
||||
self.note = token_data.get('note', '未命名账号')
|
||||
|
||||
self.ip = get_ip_address()
|
||||
self.devcode = str(uuid.uuid4())
|
||||
self.distinct_id = str(uuid.uuid4())
|
||||
|
||||
self.session = requests.Session()
|
||||
self.user_id = None
|
||||
self.wuwa_role_id = None
|
||||
self.pgr_role_id = None
|
||||
self.messages = []
|
||||
self.success = True
|
||||
|
||||
def _log(self, msg: str):
|
||||
logging.info(f"[{self.note}] {msg}")
|
||||
self.messages.append(msg)
|
||||
|
||||
def _req(self, url: str, method: str = 'POST', data: Optional[dict] = None, req_type: str = 'bbs') -> dict:
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Language": "zh-CN,zh-Hans;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Connection": "keep-alive",
|
||||
"Host": "api.kurobbs.com",
|
||||
"source": "ios",
|
||||
}
|
||||
|
||||
if req_type == 'bbs':
|
||||
headers.update({
|
||||
"lang": "zh-Hans",
|
||||
"User-Agent": "KuroGameBox/48 CFNetwork/1492.0.1 Darwin/23.3.0",
|
||||
"channelId": "1",
|
||||
"channel": "appstore",
|
||||
"version": "2.2.0",
|
||||
"model": "iPhone15,2",
|
||||
"osVersion": "17.3",
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
|
||||
"Cookie": f"user_token={self.token}",
|
||||
"Ip": self.ip,
|
||||
"distinct_id": self.distinct_id,
|
||||
"devCode": self.devcode,
|
||||
"token": self.token,
|
||||
})
|
||||
elif req_type == 'game':
|
||||
headers.update({
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Sec-Fetch-Site": "same-site",
|
||||
"source": "ios",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Origin": "https://web-static.kurobbs.com",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) KuroGameBox/2.2.0",
|
||||
"devCode": f"{self.ip}, Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) KuroGameBox/2.2.0",
|
||||
"token": self.token,
|
||||
})
|
||||
elif req_type == 'user_info':
|
||||
headers.update({
|
||||
"osversion": "Android",
|
||||
"countrycode": "CN",
|
||||
"ip": self.ip,
|
||||
"model": "2211133C",
|
||||
"source": "android",
|
||||
"lang": "zh-Hans",
|
||||
"version": "1.0.9",
|
||||
"versioncode": "1090",
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
"user-agent": "okhttp/3.10.0",
|
||||
"devcode": self.devcode,
|
||||
"distinct_id": self.distinct_id,
|
||||
"token": self.token,
|
||||
})
|
||||
|
||||
try:
|
||||
if method == 'POST':
|
||||
resp = self.session.post(url, headers=headers, data=data, timeout=TIMEOUT).json()
|
||||
else:
|
||||
resp = self.session.get(url, headers=headers, timeout=TIMEOUT).json()
|
||||
return resp
|
||||
except Exception as e:
|
||||
return {"code": -1, "msg": f"请求异常: {str(e)}"}
|
||||
|
||||
def init_user_data(self) -> bool:
|
||||
res = self._req(API.USER_MINE, req_type='user_info')
|
||||
if res.get('code') != 200:
|
||||
self._log(f"获取用户信息失败或Token已过期: {res.get('msg')}")
|
||||
self.success = False
|
||||
return False
|
||||
self.user_id = res['data']['mine']['userId']
|
||||
|
||||
res_wuwa = self._req(API.USER_ROLE_LIST, data={"gameId": GAME_WUWA_ID}, req_type='user_info')
|
||||
if res_wuwa.get('code') == 200 and res_wuwa.get('data'):
|
||||
self.wuwa_role_id = res_wuwa['data'][0].get('roleId')
|
||||
|
||||
res_pgr = self._req(API.USER_ROLE_LIST, data={"gameId": GAME_PGR_ID}, req_type='user_info')
|
||||
if res_pgr.get('code') == 200 and res_pgr.get('data'):
|
||||
self.pgr_role_id = res_pgr['data'][0].get('roleId')
|
||||
|
||||
return True
|
||||
|
||||
def _get_sign_reward(self, game_name: str, game_id: str, server_id: str, role_id: str) -> Optional[str]:
|
||||
try:
|
||||
data = {
|
||||
"gameId": game_id,
|
||||
"serverId": server_id,
|
||||
"roleId": role_id,
|
||||
"userId": self.user_id,
|
||||
}
|
||||
res = self._req(API.GAME_SIGN_RECORD, data=data, req_type='game')
|
||||
if res.get('code') == 200 and res.get('data'):
|
||||
if isinstance(res['data'], list) and len(res['data']) > 0:
|
||||
return res['data'][0].get('goodsName')
|
||||
return None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def game_sign(self):
|
||||
month = datetime.datetime.now().strftime("%m")
|
||||
|
||||
def _do_sign(game_name, game_id, server_id, role_id):
|
||||
if not role_id:
|
||||
self._log(f"[{game_name}] 未找到角色ID,跳过签到")
|
||||
return
|
||||
data = {
|
||||
"gameId": game_id,
|
||||
"serverId": server_id,
|
||||
"roleId": role_id,
|
||||
"userId": self.user_id,
|
||||
"reqMonth": month,
|
||||
}
|
||||
res = self._req(API.GAME_SIGN_IN, data=data, req_type='game')
|
||||
code = res.get('code')
|
||||
|
||||
if code == 200:
|
||||
reward = self._get_sign_reward(game_name, game_id, server_id, role_id)
|
||||
msg = f"[{game_name}] 签到成功"
|
||||
if reward:
|
||||
msg += f",奖励: {reward}"
|
||||
self._log(msg)
|
||||
elif code == 1511:
|
||||
reward = self._get_sign_reward(game_name, game_id, server_id, role_id)
|
||||
msg = f"[{game_name}] 今日已签到"
|
||||
if reward:
|
||||
msg += f",奖励: {reward}"
|
||||
self._log(msg)
|
||||
elif code == 1513:
|
||||
self._log(f"[{game_name}] 签到失败:用户信息异常,即将禁用该账号")
|
||||
self.success = False
|
||||
elif code == 220:
|
||||
self._log(f"[{game_name}] 签到失败:登录已过期,请重新登录")
|
||||
self.success = False
|
||||
else:
|
||||
self._log(f"[{game_name}] 签到失败: {res.get('msg', '未知错误')} (code={code})")
|
||||
raise Exception(f"{game_name} 签到失败: {res.get('msg', '未知错误')}")
|
||||
|
||||
_do_sign("鸣潮", GAME_WUWA_ID, SERVER_WUWA, self.wuwa_role_id)
|
||||
time.sleep(1)
|
||||
_do_sign("战双", GAME_PGR_ID, SERVER_PGR, self.pgr_role_id)
|
||||
|
||||
def forum_tasks(self):
|
||||
res = self._req(API.USER_SIGN_IN, data={"gameId": "2"}, req_type='bbs')
|
||||
if res.get('code') == 200:
|
||||
self._log("论坛签到成功")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
res_tasks = self._req(API.TASK_PROCESS, data={"gameId": "0"}, req_type='bbs')
|
||||
if res_tasks.get('code') != 200:
|
||||
self._log("获取每日任务列表失败跳过")
|
||||
return
|
||||
|
||||
tasks = res_tasks.get('data', {}).get('dailyTask', [])
|
||||
tasks_map = {t.get('remark'): t.get('process') for t in tasks}
|
||||
|
||||
posts = []
|
||||
if tasks_map.get("浏览3篇帖子", 1) == 0 or tasks_map.get("点赞5次", 1) == 0:
|
||||
res_posts = self._req(API.FORUM_LIST, data={"forumId": "9", "gameId": "3", "pageIndex": "1", "pageSize": "20", "searchType": "3", "timeType": "0"}, req_type='bbs')
|
||||
if res_posts.get('code') == 200:
|
||||
posts = res_posts.get('data', {}).get('postList', [])
|
||||
|
||||
if tasks_map.get("浏览3篇帖子", 1) == 0 and posts:
|
||||
view_count = 0
|
||||
for p in posts[:3]:
|
||||
self._req(API.FORUM_POST_DETAIL, data={"isOnlyPublisher": "0", "postId": p['postId'], "showOrderTyper": "2"}, req_type='bbs')
|
||||
view_count += 1
|
||||
time.sleep(random.uniform(1, 2))
|
||||
self._log(f"完成浏览帖子任务 ({view_count}/3)")
|
||||
|
||||
if tasks_map.get("点赞5次", 1) == 0 and posts:
|
||||
like_count = 0
|
||||
for p in posts[:5]:
|
||||
self._req(API.FORUM_LIKE, data={"forumId": 11, "gameId": 3, "likeType": 1, "operateType": 1, "postCommentId": "", "postCommentReplyId": "", "postId": p['postId'], "postType": 1, "toUserId": p['userId']}, req_type='bbs')
|
||||
like_count += 1
|
||||
time.sleep(random.uniform(1, 2))
|
||||
self._log(f"完成点赞帖子任务 ({like_count}/5)")
|
||||
|
||||
if tasks_map.get("分享1次帖子", 1) == 0:
|
||||
self._req(API.TASK_SHARE, data={"gameId": 3}, req_type='bbs')
|
||||
self._log("完成分享帖子任务 (1/1)")
|
||||
|
||||
def run(self):
|
||||
for attempt in range(MAX_RETRIES):
|
||||
try:
|
||||
if attempt > 0:
|
||||
delay = random.uniform(5, 15)
|
||||
self._log(f"将在 {delay:.1f} 秒后进行第 {attempt + 1}/{MAX_RETRIES} 次重试...")
|
||||
time.sleep(delay)
|
||||
|
||||
if self.init_user_data():
|
||||
self.game_sign()
|
||||
self.forum_tasks()
|
||||
|
||||
if not self.success:
|
||||
raise Exception("签到执行失败")
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
self._log(f"执行异常: {str(e)}")
|
||||
self.success = False
|
||||
if attempt < MAX_RETRIES - 1:
|
||||
continue
|
||||
else:
|
||||
self._log(f"重试 {MAX_RETRIES} 次后仍然失败,放弃签到")
|
||||
|
||||
return "\n".join(self.messages)
|
||||
|
||||
|
||||
def get_tokens() -> List[Dict[str, str]]:
|
||||
raw = os.environ.get("KURO_TOKEN", "").strip()
|
||||
if not raw:
|
||||
return []
|
||||
|
||||
raw = raw.replace('&', '\n').replace(',', '\n')
|
||||
token_list = []
|
||||
|
||||
for line in raw.split('\n'):
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
parts = line.split('#', 1)
|
||||
token_val = parts[0].strip()
|
||||
note = parts[1].strip() if len(parts) > 1 else f"账号{len(token_list) + 1}"
|
||||
|
||||
if token_val:
|
||||
token_list.append({'token': token_val, 'note': note})
|
||||
|
||||
return token_list
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
|
||||
|
||||
tokens = get_tokens()
|
||||
if not tokens:
|
||||
logging.error("未找到 Token,请在环境变量中设置 'KURO_TOKEN'。")
|
||||
return
|
||||
|
||||
logging.info(f"✅ 检测到 {len(tokens)} 个账号,开始执行库街区签到...\n" + "-" * 30)
|
||||
|
||||
notify_content = []
|
||||
|
||||
for token_data in tokens:
|
||||
signer = KuroSigner(token_data)
|
||||
result_msg = signer.run()
|
||||
|
||||
status_icon = "✅" if signer.success else "❌"
|
||||
header = f"【{signer.note}】{status_icon}"
|
||||
|
||||
notify_content.append(header)
|
||||
notify_content.append(result_msg)
|
||||
notify_content.append("-" * 20)
|
||||
|
||||
final_content = "\n".join(notify_content)
|
||||
logging.info(f"\n{final_content}")
|
||||
|
||||
if send:
|
||||
send("库街区签到", final_content)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
22
脚本库/web版/抓包/快手双版本金币查询/2026-05-16_zhks_query_2baad40b.js
Normal file
22
脚本库/web版/抓包/快手双版本金币查询/2026-05-16_zhks_query_2baad40b.js
Normal file
File diff suppressed because one or more lines are too long
22
脚本库/web版/抓包/快手双版本金币查询/2026-05-16_zhks_query_2baad40b_2.js
Normal file
22
脚本库/web版/抓包/快手双版本金币查询/2026-05-16_zhks_query_2baad40b_2.js
Normal file
File diff suppressed because one or more lines are too long
694
脚本库/web版/抓包/滴滴出行/2025-11-29_滴滴出行_e0d2a0c8.py
Normal file
694
脚本库/web版/抓包/滴滴出行/2025-11-29_滴滴出行_e0d2a0c8.py
Normal file
@@ -0,0 +1,694 @@
|
||||
# Source: https://github.com/back-101/zyqinglong/blob/main/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C.py
|
||||
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/滴滴出行.py
|
||||
# Repo: back-101/zyqinglong
|
||||
# Path: 滴滴出行.py
|
||||
# UploadedAt: 2025-11-29T06:56:58Z
|
||||
# SHA256: e0d2a0c873bdcaa9f9bb7f078021468bed339ad22e6e04b4db7003797176362b
|
||||
# Category: web版/抓包
|
||||
# Evidence: web/H5关键词 + cookie/token/header
|
||||
|
||||
# -*- coding=UTF-8 -*-
|
||||
# @Project QL_TimingScript
|
||||
# @fileName 滴滴出行.py
|
||||
# @author Echo
|
||||
# @EditTime 2024/11/27
|
||||
# const $ = new Env('滴滴出行')
|
||||
# cron: "0 8,14,17 * * *"
|
||||
"""
|
||||
DD_TOKENS: 滴滴出行进入福利页面抓token值
|
||||
自行配经纬度和城市id
|
||||
"""
|
||||
import asyncio
|
||||
import datetime
|
||||
import httpx
|
||||
|
||||
from fn_print import fn_print
|
||||
from get_env import get_env
|
||||
from sendNotify import send_notification_message_collection
|
||||
|
||||
MONTH_SIGNAL = False # 月月领券
|
||||
|
||||
dd_tokens = get_env("DD_TOKENS", "&")
|
||||
|
||||
|
||||
class DiDi:
|
||||
LAT = "30.707130422009786" # 纬度
|
||||
LNG = "104.09652654810503" # 经度
|
||||
CITY_ID = 17 # 城市id
|
||||
|
||||
def __init__(self, token, city_id=CITY_ID, lat=LAT, lng=LNG):
|
||||
self.user_phone = None
|
||||
self.client = httpx.AsyncClient(verify=False)
|
||||
self.token = token
|
||||
self.city_id = city_id
|
||||
self.lat = lat
|
||||
self.lng = lng
|
||||
self.today = datetime.datetime.now().strftime("%Y-%m-%d")
|
||||
self.tomorrow = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
|
||||
self.activity_id_today = 0
|
||||
self.task_id_today = 0
|
||||
self.status_today = 0
|
||||
self.activity_id_tomorrow = 0
|
||||
self.status_tomorrow = 0
|
||||
self.count_tomorrow = 0
|
||||
|
||||
async def get_user_info(self):
|
||||
"""
|
||||
获取用户信息
|
||||
:return:
|
||||
"""
|
||||
get_user_info_response = await self.client.get(
|
||||
url=f"https://common.diditaxi.com.cn/passenger/getprofile?token={self.token}"
|
||||
)
|
||||
get_user_info_data = get_user_info_response.json()
|
||||
self.user_phone = get_user_info_data.get("phone")
|
||||
|
||||
async def get_welfare_payments(self):
|
||||
"""
|
||||
获取福利金
|
||||
:return:
|
||||
"""
|
||||
get_weibo_payments_response = await self.client.get(
|
||||
url="https://rewards.xiaojukeji.com/loyalty_credit/bonus/getWelfareUsage4Wallet",
|
||||
params={
|
||||
"token": self.token,
|
||||
"city_id": self.city_id
|
||||
}
|
||||
)
|
||||
if get_weibo_payments_response.status_code == 200:
|
||||
get_info_data = get_weibo_payments_response.json()
|
||||
if "token error" in get_info_data.get("errmsg") and get_info_data.get("errno") == 20001:
|
||||
fn_print("token已过期,请重新获取token")
|
||||
send_notification_message_collection(
|
||||
"滴滴出行通知 - {}".format(datetime.datetime.now().strftime("%Y/%m/%d")))
|
||||
exit()
|
||||
return get_info_data['data']['balance']
|
||||
else:
|
||||
fn_print(f"===获取用户福利金请求异常, {get_weibo_payments_response.text}===")
|
||||
|
||||
async def sign_in(self):
|
||||
"""
|
||||
签到
|
||||
:return:
|
||||
"""
|
||||
sign_in_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/action/dailySign",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": '{}'
|
||||
}
|
||||
)
|
||||
if sign_in_response.status_code == 200:
|
||||
sign_in_data = sign_in_response.json()
|
||||
fn_print(sign_in_data)
|
||||
if sign_in_data["errno"] == 0:
|
||||
subsidy_amount = sign_in_data["data"]["subsidy_state"]["subsidy_amount"]
|
||||
fn_print(f"用户【{0}】, ===今日签到成功,获得{subsidy_amount}福利金🪙🪙🪙===")
|
||||
return
|
||||
elif sign_in_data["errno"] == 40009:
|
||||
fn_print(f"用户【{0}】, ===今日福利金已签到,无需重复签到!===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"用户【{0}】, ===签到失败, {sign_in_data}===")
|
||||
else:
|
||||
fn_print(f"===签到请求异常, {sign_in_response}===")
|
||||
|
||||
async def get_carve_up_action_id(self):
|
||||
"""
|
||||
获取瓜分活动的ID
|
||||
:return:
|
||||
"""
|
||||
get_carve_up_action_id_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/home/init/v2",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": '{}'
|
||||
}
|
||||
)
|
||||
if get_carve_up_action_id_response.status_code == 200:
|
||||
get_carve_up_action_id_data = get_carve_up_action_id_response.json()
|
||||
if get_carve_up_action_id_data.get("errno") == 0:
|
||||
divide_data = get_carve_up_action_id_data["data"]["divide_data"]["divide"]
|
||||
today_data = divide_data.get(self.today)
|
||||
self.activity_id_today, self.task_id_today, self.status_today = today_data["activity_id"], today_data[
|
||||
"task_id"], today_data["status"]
|
||||
tomorrow_data = divide_data.get(self.tomorrow)
|
||||
self.activity_id_tomorrow, self.status_tomorrow, self.count_tomorrow = tomorrow_data["activity_id"], \
|
||||
tomorrow_data["status"], tomorrow_data["button"]["count"]
|
||||
return True
|
||||
else:
|
||||
fn_print(f"===获取瓜分活动ID请求异常, {get_carve_up_action_id_response.text}===")
|
||||
|
||||
async def apply_carve_up_action(self):
|
||||
"""
|
||||
报名明天的瓜分福利金
|
||||
:return:
|
||||
"""
|
||||
apply_carve_up_action_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/action/joinDivide",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": '{}',
|
||||
"activity_id": self.activity_id_tomorrow,
|
||||
"count": self.count_tomorrow,
|
||||
"type": "ut_bonus"
|
||||
}
|
||||
)
|
||||
if apply_carve_up_action_response.status_code == 200:
|
||||
apply_carve_up_action_data = apply_carve_up_action_response.json()
|
||||
if apply_carve_up_action_data.get("errno") == 0:
|
||||
if apply_carve_up_action_data.get("data", {}).get("result"):
|
||||
fn_print(f"用户【{self.user_phone}】, ===报名明日瓜分福利金成功🎉===")
|
||||
return
|
||||
elif apply_carve_up_action_data.get("errno") == 1003:
|
||||
fn_print(f"用户【{self.user_phone}】, ===今日瓜分福利金已报名,无需重复报名!===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"用户【{self.user_phone}】, ===报名明日瓜分福利金失败, {apply_carve_up_action_data}===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"===报名明日瓜分福利金请求异常, {apply_carve_up_action_response.text}===")
|
||||
|
||||
async def complete_carve_up_action(self):
|
||||
"""
|
||||
完成今天的瓜分福利金,14点前完成
|
||||
:return:
|
||||
"""
|
||||
complete_carve_up_action_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/action/divideReward",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": '{}',
|
||||
"activity_id": self.activity_id_today,
|
||||
"task_id": self.task_id_today
|
||||
}
|
||||
)
|
||||
if complete_carve_up_action_response.status_code == 200:
|
||||
complete_carve_up_action_data = complete_carve_up_action_response.json()
|
||||
if complete_carve_up_action_data.get("errno") == 0:
|
||||
if complete_carve_up_action_data.get("data", {}).get("result"):
|
||||
fn_print(f"用户【{self.user_phone}】, ===完成今日打卡瓜分福利金成功🎉===")
|
||||
return
|
||||
elif complete_carve_up_action_data.get("errno") == 1003:
|
||||
fn_print(f"用户【{self.user_phone}】, ===今日瓜分福利金已完成,无需重复完成!===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"用户【{self.user_phone}】, ===完成今日瓜分福利金失败, {complete_carve_up_action_data}===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"===完成今日瓜分福利金请求异常, {complete_carve_up_action_response.text}===")
|
||||
|
||||
async def inquire_benefits_details(self):
|
||||
"""
|
||||
查询权益详情
|
||||
:return:
|
||||
"""
|
||||
benefits_details_response = await self.client.get(
|
||||
url="https://member.xiaojukeji.com/dmember/h5/privilegeLists",
|
||||
params={
|
||||
"token": self.token,
|
||||
"city_id": self.city_id
|
||||
}
|
||||
)
|
||||
if benefits_details_response.status_code == 200:
|
||||
benefits_details_data = benefits_details_response.json()
|
||||
if benefits_details_data.get("errno") == 0:
|
||||
privileges_list = benefits_details_data.get('data', {}).get('privileges', []) # 我的权益列表
|
||||
return privileges_list
|
||||
else:
|
||||
fn_print(f"===查询权益详情请求异常, {benefits_details_response.text}===")
|
||||
|
||||
async def receive_level_gift_week(self):
|
||||
"""
|
||||
领取周周领券活动的优惠券
|
||||
:return:
|
||||
"""
|
||||
privileges_list = await self.inquire_benefits_details()
|
||||
for privilege in privileges_list:
|
||||
if privilege.get('name') not in ['周周领券'] or privilege.get('level_gift') is None:
|
||||
continue
|
||||
coupons_list = privilege.get('level_gift', {}).get('coupons', [])
|
||||
for coupon in coupons_list:
|
||||
status = coupon.get("status") # 0: 未领取 1: 已使用 2: 未使用
|
||||
if status != 0:
|
||||
continue
|
||||
batch_id = coupon.get("batch_id")
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取{coupon.get('remark')}{coupon.get('coupon_title')}===")
|
||||
receive_level_gift_response = await self.client.get(
|
||||
url=f"https://member.xiaojukeji.com/dmember/h5/receiveLevelGift?xbiz=&prod_key=wyc-vip-level&xpsid=&dchn=&xoid=&xenv=passenger&xspm_from=&xpsid_root=&xpsid_from=&xpsid_share=&token={self.token}&batch_id={batch_id}&env={{}}&gift_type=1&city_id={self.city_id}"
|
||||
)
|
||||
if receive_level_gift_response.status_code == 200:
|
||||
receive_level_gift_data = receive_level_gift_response.json()
|
||||
if receive_level_gift_data.get("errno") == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取成功🎉===")
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取失败, {receive_level_gift_data}===")
|
||||
else:
|
||||
fn_print(f"===领取周周领券请求异常, {receive_level_gift_response.text}===")
|
||||
|
||||
async def receive_level_gift_month(self):
|
||||
"""
|
||||
领取月月领券活动的优惠券
|
||||
:return:
|
||||
"""
|
||||
if not MONTH_SIGNAL:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===月月领券活动未开启===")
|
||||
return
|
||||
privileges_list = await self.inquire_benefits_details()
|
||||
for privilege in privileges_list:
|
||||
if privilege.get('name') not in ['月月领券'] or privilege.get('level_gift') is None:
|
||||
continue
|
||||
coupons_list = privilege.get('level_gift', {}).get('coupons', [])
|
||||
for coupon in coupons_list:
|
||||
status = coupon.get("status") # 0: 未领取 1: 已使用 2: 未使用
|
||||
if status != 0:
|
||||
continue
|
||||
batch_id = coupon.get("batch_id")
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取{coupon.get('remark')}{coupon.get('coupon_title')}===")
|
||||
receive_level_gift_response = await self.client.get(
|
||||
url=f"https://member.xiaojukeji.com/dmember/h5/receiveLevelGift?xbiz=&prod_key=wyc-vip-level&xpsid=&dchn=&xoid=&xenv=passenger&xspm_from=&xpsid_root=&xpsid_from=&xpsid_share=&token={self.token}&batch_id={batch_id}&env={{}}&gift_type=1&city_id={self.city_id}"
|
||||
)
|
||||
if receive_level_gift_response.status_code == 200:
|
||||
receive_level_gift_data = receive_level_gift_response.json()
|
||||
if receive_level_gift_data.get("errno") == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取成功🎉===")
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取失败, {receive_level_gift_data}===")
|
||||
else:
|
||||
fn_print(f"===领取月月领券请求异常, {receive_level_gift_response.text}===")
|
||||
|
||||
async def swell_coupon(self):
|
||||
"""
|
||||
膨胀周周领券活动的优惠券
|
||||
:return:
|
||||
"""
|
||||
privileges_list = await self.inquire_benefits_details()
|
||||
for privilege in privileges_list:
|
||||
if privilege.get("name") in ["周周领券", "月月领券"]:
|
||||
if privilege.get('level_gift') is None:
|
||||
continue
|
||||
coupons_list = privilege.get('level_gift', {}).get('coupons', [])
|
||||
for coupon in coupons_list:
|
||||
swell_status = coupon.get('swell_status') # 0代表不能膨胀,1代表能膨胀,2代表已膨胀、
|
||||
if swell_status == 1:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===开始膨胀{coupon.get('remark')}{coupon.get('coupon_title')}===")
|
||||
batch_id = coupon.get("batch_id")
|
||||
coupon_id = coupon.get("coupon_id")
|
||||
swell_coupon_response = await self.client.post(
|
||||
url=f"https://member.xiaojukeji.com/dmember/h5/swell_coupon?city_id={self.city_id}",
|
||||
json={
|
||||
"token": self.token,
|
||||
"batch_id": batch_id,
|
||||
"coupon_id": coupon_id,
|
||||
"city_id": self.city_id
|
||||
}
|
||||
)
|
||||
if swell_coupon_response.status_code == 200:
|
||||
swell_coupon_data = swell_coupon_response.json()
|
||||
if swell_coupon_data.get("errno") == 0:
|
||||
if swell_coupon_data.get("data", {}).get("is_swell"):
|
||||
fn_print(f"用户【“{self.user_phone}】, ===膨胀成功🎉===")
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===膨胀失败, {swell_coupon_data}===")
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===膨胀失败, {swell_coupon_data}===")
|
||||
else:
|
||||
fn_print(f"===膨胀周周领券请求异常, {swell_coupon_response.text}===")
|
||||
|
||||
async def receive_travel_insurance(self):
|
||||
"""
|
||||
领取行程意外险
|
||||
:return:
|
||||
"""
|
||||
privileges_list = await self.inquire_benefits_details()
|
||||
for privilege in privileges_list:
|
||||
if privilege.get('name') == "行程意外险":
|
||||
need_received = privilege.get('need_received')
|
||||
if need_received == 1: # 0为未领取,1为已领取
|
||||
fn_print(f"用户【“{self.user_phone}】, ===已经领取过了行程意外险===")
|
||||
return
|
||||
elif need_received == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取行程意外险===")
|
||||
receive_travel_insurance_response = await self.client.post(
|
||||
url="https://member.xiaojukeji.com/dmember/h5/bindPrivilege",
|
||||
json={"token": self.token, "type": 3}
|
||||
)
|
||||
if receive_travel_insurance_response.status_code == 200:
|
||||
receive_travel_insurance_data = receive_travel_insurance_response.json()
|
||||
if receive_travel_insurance_data.get("errno") == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取行程意外险成功🎉===")
|
||||
else:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===领取行程意外险失败, {receive_travel_insurance_data}===")
|
||||
else:
|
||||
fn_print(f"===领取行程意外险请求异常, {receive_travel_insurance_response.text}===")
|
||||
|
||||
async def receive_memberday_discount_multi(self):
|
||||
"""
|
||||
领取周三折上折权益
|
||||
:return:
|
||||
"""
|
||||
privileges_list = await self.inquire_benefits_details()
|
||||
for privilege in privileges_list:
|
||||
if privilege.get('name') == "周三折上折":
|
||||
need_received = privilege.get('need_received')
|
||||
if need_received == 1: # 0为未领取,1为已领取
|
||||
fn_print(f"用户【“{self.user_phone}】, ===已经领取过了周三折上折===")
|
||||
return
|
||||
elif need_received == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取周三折上折===")
|
||||
receive_memberday_discount_multi_response = await self.client.post(
|
||||
url="https://member.xiaojukeji.com/dmember/h5/receiveMemberDayDiscount",
|
||||
json={"token": self.token, "privilege_type": 1}
|
||||
)
|
||||
if receive_memberday_discount_multi_response.status_code == 200:
|
||||
receive_memberday_discount_multi_data = receive_memberday_discount_multi_response.json()
|
||||
if receive_memberday_discount_multi_data.get("errno") == 0:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取周三折上折成功🎉===")
|
||||
return
|
||||
else:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===领取周三折上折失败, {receive_memberday_discount_multi_data}===")
|
||||
else:
|
||||
fn_print(f"===领取周三折上折请求异常, {receive_memberday_discount_multi_response.text}===")
|
||||
|
||||
async def receive_wyc_order_finish(self):
|
||||
"""
|
||||
领取气泡奖励完单返福利金
|
||||
:return:
|
||||
"""
|
||||
get_bubble_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/home/getBubble",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": "{}"
|
||||
}
|
||||
)
|
||||
get_bubble_data = get_bubble_response.json()
|
||||
bubble_list = get_bubble_data.get('data', {}).get('bubble_list', [])
|
||||
for bubble in bubble_list:
|
||||
if bubble.get('pre_content') == "完单返":
|
||||
cycle_id = bubble.get('cycle_id')
|
||||
reward_count = bubble.get('reward_count')
|
||||
receive_wyc_order_finish_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/welfare/api/action/clickBubble",
|
||||
json={
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"platform": "na",
|
||||
"env": "{}",
|
||||
"cycle_id": cycle_id,
|
||||
"bubble_type": "wyc_order_finish"
|
||||
}
|
||||
)
|
||||
if receive_wyc_order_finish_response.status_code == 200:
|
||||
receive_wyc_order_finish_data = receive_wyc_order_finish_response.json()
|
||||
if receive_wyc_order_finish_data.get("errno") == 0:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===领取气泡奖励完单返福利金成功🎉, 获得{reward_count}福利金!===")
|
||||
return
|
||||
else:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===领取气泡奖励完单返福利金失败, {receive_wyc_order_finish_data}===")
|
||||
else:
|
||||
fn_print(f"===领取气泡奖励完单返福利金请求异常, {receive_wyc_order_finish_response.text}===")
|
||||
|
||||
async def claim_coupon_check_in(self):
|
||||
"""
|
||||
领取天天神券签到
|
||||
:return:
|
||||
"""
|
||||
claim_coupon_check_in_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/janitor/api/action/sign/do",
|
||||
headers={'Didi-Ticket': self.token}
|
||||
)
|
||||
if claim_coupon_check_in_response.status_code == 200:
|
||||
claim_coupon_check_in_data = claim_coupon_check_in_response.json()
|
||||
if claim_coupon_check_in_data.get("errno") == 0:
|
||||
current_progress = claim_coupon_check_in_data.get("data").get("current_progress")
|
||||
total_progress = claim_coupon_check_in_data.get("data").get("total_progress")
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===领取天天神券签到成功🎉签到进度:{current_progress}/{total_progress}===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===领取天天神券签到失败, {claim_coupon_check_in_data}===")
|
||||
else:
|
||||
fn_print(f"===领取天天神券签到请求异常, {claim_coupon_check_in_response.text}===")
|
||||
|
||||
async def claim_coupon_lottery(self):
|
||||
"""
|
||||
天天神券抽奖
|
||||
:return:
|
||||
"""
|
||||
get_draw_times_response = await self.client.post(
|
||||
url="https://api.didi.cn/webx/chapter/product/init",
|
||||
headers={'Didi-Ticket': self.token},
|
||||
json={
|
||||
"dchn": "dKlklLa",
|
||||
"args": {
|
||||
"runtime_args":
|
||||
{
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"env": {},
|
||||
"platform": "na",
|
||||
"Didi-Ticket": self.token,
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
if get_draw_times_response.status_code == 200:
|
||||
get_draw_times_data = get_draw_times_response.json()
|
||||
lottery_chance = get_draw_times_data.get('data').get('conf').get('strategy_data').get('data').get(
|
||||
'lottery_chance')
|
||||
act_id = get_draw_times_data.get('data').get('conf').get('ext').get('act_conf').get('act_id')
|
||||
for _ in range(lottery_chance):
|
||||
lucky_draw_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/janitor/api/action/lottery/doLottery",
|
||||
headers={'Didi-Ticket': self.token},
|
||||
json={
|
||||
"act_id": act_id
|
||||
}
|
||||
)
|
||||
lucky_draw_data = lucky_draw_response.json()
|
||||
if lucky_draw_data.get("errno") == 0:
|
||||
fn_print(
|
||||
f"用户【“{self.user_phone}】, ===抽奖成功🎉, 获得{lucky_draw_data.get('data').get('prize_data')[0].get('name')}===")
|
||||
await asyncio.sleep(5)
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===天天神券抽奖失败, {lucky_draw_data}===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"===天天神券获取抽奖次数请求异常, {get_draw_times_response.text}===")
|
||||
|
||||
async def run_scratch(self):
|
||||
"""
|
||||
运行刮刮乐
|
||||
:return:
|
||||
"""
|
||||
if await self.get_carve_up_action_id():
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始完成今日瓜分活动===")
|
||||
if self.status_today == 2:
|
||||
await self.complete_carve_up_action()
|
||||
elif self.status_today == 3:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===今日瓜分活动已完成,无需重复完成!===")
|
||||
elif self.status_today == 4:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===今日已领取瓜分活动奖励!===")
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===今日瓜分活动完成失败!肯昨日未报名!===")
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始报名明日瓜分活动===")
|
||||
if self.status_tomorrow == 1:
|
||||
await self.apply_carve_up_action()
|
||||
elif self.status_tomorrow == 2:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===明日瓜分活动已报名,无需重复报名!===")
|
||||
else:
|
||||
fn_print(f"用户【“{self.user_phone}】, ===明日瓜分活动报名失败!===")
|
||||
|
||||
async def today_pick(self):
|
||||
"""
|
||||
每日精选
|
||||
:return:
|
||||
"""
|
||||
get_batch_config_response = await self.client.post(
|
||||
url="https://api.didi.cn/webx/chapter/page/batch/config",
|
||||
headers={'Didi-Ticket': self.token},
|
||||
json={
|
||||
"dchn": "PxJanq9",
|
||||
"args": [
|
||||
{"dchn": "kkXgpzO",
|
||||
"prod_key": "ut-limited-seckill",
|
||||
"runtime_args":
|
||||
{
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"env": {},
|
||||
"Didi-Ticket": self.token,
|
||||
}
|
||||
},
|
||||
{"dchn": "gL3E8qZ",
|
||||
"prod_key": "ut-support-coupon",
|
||||
"runtime_args": {
|
||||
"token": self.token,
|
||||
"lat": self.lat,
|
||||
"lng": self.lng,
|
||||
"env": {},
|
||||
"Didi-Ticket": self.token}
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
if get_batch_config_response.status_code == 200:
|
||||
get_batch_config_data = get_batch_config_response.json()
|
||||
activity_list = get_batch_config_data.get("data").get("conf")
|
||||
for activity in activity_list:
|
||||
if activity.get("dchn") == "gL3E8qZ":
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取每日精选===")
|
||||
coupons_list = activity.get("strategy_data").get("data").get("daily_coupon").get("coupons")
|
||||
coupons_status_name_dict = {
|
||||
'1': '可领取',
|
||||
'2': '已经领取',
|
||||
'4': '已抢光',
|
||||
'6': '待前置条件完成'
|
||||
}
|
||||
for coupon_index, coupon in enumerate(coupons_list):
|
||||
coupons_name = coupon.get("name")
|
||||
coupons_status = coupon.get("status") # 1为可领取 2为已经领取 4为抽奖抢券
|
||||
fn_print(f"==={coupon_index + 1}.券名:{coupons_name} "
|
||||
f"状态:{coupons_status_name_dict.get(str(coupons_status))}===")
|
||||
if coupons_status == 1:
|
||||
fn_print(f"===开始领取券:{coupons_name}===")
|
||||
activity_id = coupon.get("activity_id")
|
||||
if coupons_name == "打车5元券":
|
||||
fn_print(f"用户【{self.user_phone}】, ===【打车5元券】为分享助力才能领券,不支持自动领券===")
|
||||
continue
|
||||
if activity_id == "10010":
|
||||
fn_print(
|
||||
f"用户【{self.user_phone}】, ===该券为明天在目的地栏搜“领券”必得1张快车优惠券,不支持自动领取===")
|
||||
continue
|
||||
group_id = coupon.get("group_id")
|
||||
coupon_conf_id = coupon.get("coupon_conf_id")
|
||||
group_date = coupon.get("group_date")
|
||||
bind_coupon_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/janitor/api/action/coupon/bind",
|
||||
headers={'Didi-Ticket': self.token},
|
||||
json={
|
||||
'group_date': group_date,
|
||||
"activity_id": activity_id,
|
||||
"group_id": group_id,
|
||||
"coupon_conf_id": coupon_conf_id
|
||||
}
|
||||
)
|
||||
bind_coupon_data = bind_coupon_response.json()
|
||||
if bind_coupon_data.get("errno") == 0:
|
||||
fn_print(f"用户【{self.user_phone}】, ===领取成功🎉===")
|
||||
await asyncio.sleep(0.5)
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【{self.user_phone}】, ===领取失败,{bind_coupon_data}===")
|
||||
return
|
||||
if activity.get("dchn") == "kkXgpzO":
|
||||
fn_print(f"用户【“{self.user_phone}】, ===开始领取限时抢===")
|
||||
seckill_list = activity.get("strategy_data").get("data").get("seckill") # 秒杀列表
|
||||
seckill_status_name_dict = {
|
||||
'1': '正在热抢',
|
||||
'2': '即将开始',
|
||||
'3': '已经开抢'
|
||||
}
|
||||
coupons_status_name_dict = {
|
||||
'1': '可领取',
|
||||
'2': '已经领取',
|
||||
'4': '抽奖抢券',
|
||||
'5': '未到时间'
|
||||
}
|
||||
for seckill in seckill_list:
|
||||
seckill_name = seckill.get("start_at")
|
||||
seckill_status = int(seckill.get("status")) # 1为正在热抢 2为即将开始 3为已经开抢
|
||||
fn_print(f"☆☆场次:{seckill_name} 状态:{seckill_status_name_dict[str(seckill_status)]}")
|
||||
if seckill_status in [1, 3]:
|
||||
coupons_list = seckill.get("coupons")
|
||||
for coupon_index, coupon in enumerate(coupons_list):
|
||||
coupons_name = coupon.get("name")
|
||||
coupons_status = coupon.get("status") # 1为可领取 2为已经领取 4为抽奖抢券
|
||||
fn_print(f"==={coupon_index + 1}.券名:{coupons_name} "
|
||||
f"状态:{coupons_status_name_dict.get(str(coupons_status))}===")
|
||||
if coupons_status == 1:
|
||||
fn_print(f"===开始领取券:{coupons_name}===")
|
||||
activity_id = coupon.get("activity_id")
|
||||
group_id = coupon.get("group_id")
|
||||
coupon_conf_id = coupon.get("coupon_conf_id")
|
||||
group_date = coupon.get("group_date")
|
||||
bind_coupon_response = await self.client.post(
|
||||
url="https://ut.xiaojukeji.com/ut/janitor/api/action/coupon/bind",
|
||||
headers={'Didi-Ticket': self.token},
|
||||
json={
|
||||
"activity_id": activity_id,
|
||||
"group_id": group_id,
|
||||
'group_date': group_date,
|
||||
"coupon_conf_id": coupon_conf_id
|
||||
}
|
||||
)
|
||||
bind_coupon_data = bind_coupon_response.json()
|
||||
if bind_coupon_data.get("errno") == 0:
|
||||
fn_print(f"用户【{self.user_phone}】, ===领取成功🎉===")
|
||||
await asyncio.sleep(0.5)
|
||||
continue
|
||||
else:
|
||||
fn_print(f"用户【{self.user_phone}】, ===领取失败,{bind_coupon_data}===")
|
||||
return
|
||||
else:
|
||||
fn_print(f"===每日精选请求异常, {get_batch_config_response.text}===")
|
||||
|
||||
async def run(self):
|
||||
await self.get_user_info()
|
||||
fn_print(f"用户【{self.user_phone}】, ===当前福利金数量为:{await self.get_welfare_payments()}===")
|
||||
task = [
|
||||
self.today_pick(),
|
||||
self.sign_in(),
|
||||
self.run_scratch(),
|
||||
self.receive_level_gift_week(),
|
||||
self.receive_level_gift_month(),
|
||||
self.swell_coupon(),
|
||||
self.receive_travel_insurance(),
|
||||
self.receive_memberday_discount_multi(),
|
||||
self.receive_wyc_order_finish(),
|
||||
self.claim_coupon_check_in(),
|
||||
self.claim_coupon_lottery()
|
||||
]
|
||||
await asyncio.gather(*task)
|
||||
fn_print(f"用户【{self.user_phone}】, ===当前福利金数量为:{await self.get_welfare_payments()}===")
|
||||
|
||||
|
||||
async def main():
|
||||
task = []
|
||||
for token in dd_tokens:
|
||||
dd = DiDi(token)
|
||||
task.append(dd.run())
|
||||
await asyncio.gather(*task)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
send_notification_message_collection("滴滴出行通知 - {}".format(datetime.datetime.now().strftime("%Y/%m/%d")))
|
||||
25
脚本库/web版/抓包/老铁爱分享/2025-11-29_老铁爱分享_89434746.js
Normal file
25
脚本库/web版/抓包/老铁爱分享/2025-11-29_老铁爱分享_89434746.js
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user