PT 站签到解放双手:HDTime + 青龙面板全自动签到保姆级教程

本文以 HDTime(hdtime.org)为例,手把手把「每天惦记着打开 PT 站点签到」这件事变成零操作、还能收到微信推送的自动化任务。方法同样适用于其他 NexusPHP 架构的 PT 站。

为什么要折腾这个

玩 PT 的朋友都知道,签到是门槛最低但最容易忘的事:

  • 连续签到能攒魔力值、拿连续签到奖励;
  • 忘了签到断了连续天数,奖励就得从头攒;
  • 人一忙起来,”今天签了吗”永远想不起来。

人工签到需要:打开浏览器 → 登录 → 找到签到按钮 → 点一下。一年下来,这几十次点击完全可以省掉。我们要做的就是:让一台不停机的机器每天定时替你点这一下,点完再推条微信告诉你结果。

整体思路

青龙面板(定时器 + 运行环境)
        │  每天 08:00 触发
        ▼
签到脚本(Python / Node 任选)
        │  携带 Cookie 请求 https://hdtime.org/attendance.php
        ▼
签到成功 ──► WxPusher ──► 微信收到结果推送

三条主线:搭面板 → 配 Cookie → 配推送。下面按顺序来。


第一步:搭好青龙面板

青龙(QingLong)是一个开源的定时任务管理面板,Docker 一行命令就能跑起来:

docker run -d \
  --name qinglong \
  --restart unless-stopped \
  -p 5700:5700 \
  -v /docker/qinglong/data:/ql/data \
  whyour/qinglong:latest

已经在 NAS(飞牛、群晖等)上跑着青龙的话,这步直接跳过。

启动后访问 http://NAS的IP:5700,按引导设置管理员账号密码进入面板。面板里我们只会用到四个地方:脚本管理、环境变量、定时任务、依赖管理。

第二步:获取脚本

脚本分两个版本,功能完全一样,任选其一:

版本依赖适合
hdtime_signin.py需要 requests想后续加代理、扩展功能的
hdtime_signin.js零依赖想省事、面板上什么都不想装的

把脚本放进青龙的脚本目录(容器内 /ql/data/scripts/),或者直接在面板「脚本管理」里新建文件粘贴内容。

⚠️ 安全提示:这份脚本里硬编码了你的登录 Cookie 和 WxPusher token,等同于账号钥匙。不要传到公开仓库、不要发给别人。

第三步:拿到签到 Cookie(最关键的一步)

脚本本身没有魔法,它只是替你「带着你的登录态」去点签到。所以 Cookie 一定要拿对。

  1. 电脑浏览器打开 hdtime.org 并登录;
  2. 按 F12 打开开发者工具,切到 Network(网络) 标签;
  3. 按 F5 刷新页面,点击列表里的第一个请求(一般就是 hdtime.org);
  4. 在右侧 Request Headers(请求标头) 里找到 Cookie: 这一整行;
  5. 完整复制它的值。

然后在脚本里找到这一段,把值替换进去:

DEFAULT_COOKIE = (
    "*******&"                                    # ← 前面是备注名,随意
    "c_secure_uid=********; "
    "c_secure_pass=xxxxxxxxxxxxxxxxxxxxxxxxxxxx; "
    "c_secure_ssl=********; "
    "c_secure_tracker_ssl=*******; "
    "c_secure_login=********; "
    "cf_clearance=xxxxxxxxxxxxxxxx"              # ← 这个千万不能漏
)

不想改代码的话,也可以走环境变量:面板「环境变量」→ 新建 HDTIME_COOKIE,值直接粘贴完整 Cookie。环境变量优先级高于脚本内置值。

💡 脚本会自动清理粘贴时的常见杂质:Cookie: 前缀、换行、多余空格、结尾分号,都能处理。

第四步:先手动跑一次验证

面板「定时任务」→ 新建任务:

  • 名称:HDTime 签到
  • 命令:python3 hdtime_signin.py(Node 版写 node hdtime_signin.js)
  • 定时规则:先随便设一个,比如 0 8 * * *

点「执行」,看日志。正常的话会看到类似输出:

[2026-09-25 14:30:01] 共解析到 1 个账号
[2026-09-25 14:30:01] ===== 开始处理:账号1 =====
[2026-09-25 14:30:02]   校验登录状态 ...
[2026-09-25 14:30:02]   登录有效,当前魔力值:2,401,386.7
[2026-09-25 14:30:02]   执行签到 ...
[2026-09-25 14:30:03]   签到成功!获得 10 魔力值,连续 11 天,排名 2304 / 5814

日志里如果看到的是「今日已签到」,也是正常的——说明配置没问题,等第二天再看。

Python 版第一次跑之前记得装依赖:面板「依赖管理 → Python3」→ 添加 requests。Node 版不需要任何依赖。

第五步:配微信推送(WxPusher)

签到成功了没人告诉你,等于没做。这里用 WxPusher,免费、不用搭服务、直接推到微信。

  1. 打开 wxpusher.zjiecode.com,微信扫码登录,创建一个应用拿到 appToken(AT_ 开头);
  2. 微信里关注它的公众号,扫码绑定后能看到你的 UID(UID_ 开头);
  3. 把两个值填进脚本:
DEFAULT_WXPUSHER_TOKEN = "AT_你的appToken"
DEFAULT_WXPUSHER_UID = "UID_你的UID"

配完再跑一次,微信里就会收到一条排版好的结果卡片:

✅ HDTime 签到通知
本次获得:10 魔力值
累计签到:第 1514 次 | 连续签到:11 天
今日排名:2304 / 5814
当前魔力值:2,401,386.7

如果青龙里已经在用 notify.js / notify.py 这类统一通知模块,脚本也会自动调用它,双通道并行,互不影响。临时不想收推送,配环境变量 HDTIME_PUSH=0 即可。

第六步:设置正式的定时

验证通过后,把定时规则改成正式的:

0 8 * * *

即每天早上 8 点执行。几点跑都行,建议错开整点(比如 7 9 * * *),整点是定时任务高峰。

多账号怎么办?在 HDTIME_COOKIE 的值里直接换行分隔,每行一个:

账号A&c_secure_uid=xxx; c_secure_pass=xxx; cf_clearance=xxx
账号B&c_secure_uid=yyy; c_secure_pass=yyy; cf_clearance=yyy

脚本会逐个签到(默认间隔 5 秒,可用 HDTIME_DELAY 调整),最后汇总推送「N/M 成功」。


必须知道的坑:cf_clearance 会过期

这是整套方案唯一需要你后期维护的地方,值得单独讲。

HDTime 挂在 Cloudflare 后面,它的 Cookie 分两类:

Cookie性质有效期
c_secure_uid / c_secure_pass / c_secure_ssl / c_secure_login站点登录凭证长期有效
cf_clearanceCloudflare 人机验证通行证几小时到几天

cf_clearance 有两个特性,决定了它一定会过期:

  • 绑定浏览器指纹和出口 IP:换设备、换网络、甚至浏览器大版本升级都可能失效;
  • 有效期短:Cloudflare 对它有严格时限。

过期之后,脚本请求会被 Cloudflare 拦截(HTTP 403 或跳出人机验证页)。好消息是脚本专门识别了这种情况,日志和推送会明确告诉你:

❌ ******:被 Cloudflare 拦截,请更新 cf_clearance

应对方法:重复第三步,从浏览器重新复制一份完整 Cookie 换进去,就恢复了。整个过程大概一分钟。

两个补充建议:

  1. 被拦截时不要高频重试。请求打多了容易触发 Cloudflare 风控,越试越难放行。
  2. 如果服务器 IP 长期被风控,可以给脚本配代理:HDTIME_PROXY=http://代理地址:端口,多个代理换行分隔会随机使用。

其他踩坑记录

顺手把调试过程中确认过的几个点记录下来,给改脚本的人参考:

  1. HDTime 的签到页是幂等的。当天重复访问 attendance.php,页面依然显示「签到成功」,但累计次数不会重复增加(对比「这是您的第 N 次签到」即可确认)。所以不用担心定时任务一天跑几次会刷魔力值。
  2. 请求要带 Referer。部分 NexusPHP 站点会校验来源,脚本里已带上 https://hdtime.org/。
  3. 先访问首页再签到。脚本会先请求首页确认登录态和 Cloudflare 状态,避免拿着失效的 Cookie 白跑一趟。
  4. 退出码有讲究。全部成功返回 0,全部失败返回 2,配置错误返回 1。青龙靠退出码标记任务失败,方便接告警。

环境变量速查表

全部可选,不配也能跑(用的是脚本内置值):

变量说明默认
HDTIME_COOKIECookie,多账号换行分隔,行格式 [备注&]Cookie内置值
WXPUSHER_TOKEN_VALWxPusher appToken内置值
WXPUSHER_UIDWxPusher UID,多个逗号分隔内置值
HDTIME_PUSH0/off 关闭推送开
HDTIME_PROXY代理,多个换行则随机取不走代理
HDTIME_RETRY请求失败重试次数3
HDTIME_DELAY多账号间隔秒数5

总结

整套东西的维护成本只剩一件事:隔几天看一眼微信推送,出现「Cloudflare 拦截」就去复制个新 Cookie。如果连这个都嫌烦,可以关注两个方向:

  • 用能常驻浏览器的方案(Playwright / FlareSolverr)自动过 Cloudflare 验证,彻底免维护,但部署复杂度高不少;
  • 换没有 Cloudflare 前置的站点签到逻辑会简单很多。

对我来说,一分钟换一次 Cookie 换来每天魔力值不断,这笔账是划算的。祝签到愉快。

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous