一个自动签到工具:CheckinBox
如果你每天都会打开一堆网站做签到、领积分、攒经验,时间久了就会发现:这类操作本身并不复杂,但它特别容易被忘记。
CheckinBox 解决的正是这个问题。它把不同网站的签到脚本收拢到一个统一入口里,让脚本按计划自动执行。你只需要准备对应站点的 Cookie,配置好运行环境,之后就可以让它每天自动跑。
本文介绍的是我基于 tautcony/CheckinBox 做的修改。原项目是通过 GitHub Actions、Repository Secrets 和 schedule 来运行签到任务;我修改的这版更偏向“放在自己的服务器或 NAS 上长期运行”,所以改成了 Docker 容器部署 + cron 定时任务的部署方式。
下载本文使用的修改版:checkinbox-all-scripts-clean.tar.gz(约 74 KB)。
当前支持的站点
这份改版导出包已经包含这些站点:
genshinhdcity.leniter.orgmydigit.cnnodeseek.comskland.comsmzdm.comtsdm39.netu2.dmhy.orgv2ex.com其中 checkin.sh 会自动扫描各目录下的 Python 签到脚本并依次执行。对于不想启用的站点,只要不配置对应 Cookie,脚本就会跳过,不影响其他站点运行。
导出包里也保留了 mybmw/checkin.js,但默认的 checkin.sh 只扫描 checkin.py,所以 MyBMW 脚本不会自动执行。
和原项目相比改了哪里?
原项目 tautcony/CheckinBox 的结构已经很清楚:每个站点一个目录,脚本里读取对应的 Secrets 或环境变量,再由 GitHub Actions 定时触发。
我主要做了以下调整:
- 增加 Docker 部署文件,包括
docker-compose.yml、docker/Dockerfile、docker/entrypoint.sh和docker/checkinbox.cron。 - 把运行方式从 GitHub Actions 改成自托管容器,适合放在服务器、NAS、家用小主机上长期运行。
- 增加
.env.example,把各站点 Cookie、代理、通知变量集中到一个配置文件里。 - 增加
.dockerignore,避免.env、.env.*、缓存文件被复制进镜像,降低 Cookie 泄露风险。 - 增加
RUN_ON_START开关,容器启动时可以先立即执行一次签到。 - 增加按
Asia/Shanghai时区每天 10:00 执行的 cron 计划任务。 - 增加可选代理变量
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY,方便在容器内处理部分站点的网络访问问题。 - 新增
nodeseek.com/checkin.py,使用COOKIE_NODESEEK,通过POST https://www.nodeseek.com/api/attendance?random=true签到,并支持NODESEEK_RANDOM=1。 - 新增
hdcity.leniter.org/checkin.py,使用COOKIE_HDCITY,访问/sign完成签到,并把“已签到”识别为成功状态。 - 修过 cron 拿不到 Docker
env_file环境变量的问题:如果定时任务日志里全部显示“未配置Cookie”,通常就是 cron 环境没有加载.env,需要让 cron 执行前加载容器运行时环境。
部署前准备
你需要一台可以运行 Docker 的机器,例如 VPS、NAS、家用 Linux 小主机,或者安装了 Docker Desktop 的电脑。
先确认 Docker 和 Compose 可用:
docker --versiondocker compose version部署步骤
1. 解压项目
假设导出包叫 checkinbox-all-scripts-clean.tar.gz:
tar -xzf checkinbox-all-scripts-clean.tar.gzcd checkinbox-all-scripts-clean2. 创建配置文件
复制模板:
cp .env.example .env编辑 .env:
nano .env最小配置可以像这样:
TZ=Asia/ShanghaiRUN_ON_START=1LOG_LEVEL=INFO
COOKIE_V2EX=COOKIE_SMZDM=COOKIE_NODESEEK=NODESEEK_RANDOM=1COOKIE_HDCITY=
SCKEY=SCTKEY=TG_TOKEN=TG_CHATID=只填自己要用的站点即可。没有 Cookie 的站点会自动跳过。
如果你的运行环境需要代理,可以填:
HTTP_PROXY=HTTPS_PROXY=ALL_PROXY=NO_PROXY=localhost,127.0.0.13. 启动容器
docker compose up -d --build查看容器状态:
docker compose ps查看日志:
docker logs -f checkinbox如果 RUN_ON_START=1,容器启动后会先立即跑一轮,日志里能看到各站点的签到结果。
4. 手动测试
手动跑全部签到:
docker exec checkinbox sh -lc 'cd /app && bash checkin.sh'手动跑单个站点:
docker exec checkinbox sh -lc 'cd /app && pipenv run python3 nodeseek.com/checkin.py'docker exec checkinbox sh -lc 'cd /app && pipenv run python3 hdcity.leniter.org/checkin.py'docker exec checkinbox sh -lc 'cd /app && pipenv run python3 v2ex.com/checkin.py'查看 cron 是否安装成功:
docker exec checkinbox crontab -l默认计划任务是每天 10:00 执行:
0 10 * * * bash /app/checkin.sh如果你希望改时间,修改 docker/checkinbox.cron 后重新构建:
docker compose up -d --build --force-recreateCookie 怎么找
大多数站点的自动签到都依赖 Cookie。Cookie 可以理解成浏览器里保存的登录凭证,脚本拿到 Cookie 后,就能以你的登录状态访问签到接口。
以 Safari 为例:
- 打开目标网站,并确认已经登录账号。
- 按 ⌥ Option + ⌘ Command + I 打开“网页检查器”。
- 如果没有反应,先进入 Safari 菜单栏:Safari 浏览器 → 设置 → 高级,勾选“在菜单栏中显示‘开发’菜单”。
- 打开“网络”面板。
- 刷新页面,或者点击一次签到页面。
- 在请求列表中选择一个当前站点的请求,通常选择首页、签到页或接口请求。
- 查看右侧或下方的请求详情,找到 请求标头 / Request Headers。
- 找到 Cookie: 这一行。
- 复制 Cookie: 后面的内容,不要复制 Cookie: 这个字段名。
- 粘贴到 .env 对应变量后面,保持为一整行。
以 Safari 为例,常见站点 Cookie 对应关系
Nodeseek:

NODESEEK_RANDOM=1 表示使用“试试手气”。如果日志里显示“今天已完成签到,请勿重复操作”,也算成功。
U2:

复制时不用单独挑字段,直接复制整个 Cookie 请求头内容。
其他站点也是同样思路:登录对应网站,打开开发者工具,复制该域名请求里的 Cookie,再填到 .env 里对应变量。
Skland 比较特殊,使用的是:
SKLAND_UID_CRED_KEY=uid&cred_key这个值按脚本要求填写,不是普通的浏览器 Cookie。
修改 Cookie 后重启容器
改完 .env 后,需要重启容器,让 Docker 重新加载环境变量:
docker compose up -d --force-recreate然后手动跑一次确认:
docker exec checkinbox sh -lc 'cd /app && bash checkin.sh'如果日志显示“未配置Cookie,跳过签到”,优先检查 .env 变量名有没有写错、Cookie 有没有换行、容器有没有重新创建。
如果手动执行正常,但每天定时任务不正常,重点检查 cron 是否能读取到运行时环境变量。cron 的环境经常比交互 shell 少,必要时需要在 entrypoint 里把环境写入文件,再让 cron 任务执行前 source 这个文件。
安全注意事项
Cookie 就是登录凭证,泄露后别人可能直接以你的身份访问网站。使用这类工具时,最重要的是不要泄露 Cookie。
部分信息可能已经过时