TraeWork签到助手
执行步骤
当用户提出「TraeWork 签到 / TraeCode 签到 / Trae 自动签到 / 每日打卡 / 领积分 / 设置定时签到 / 排查签到失败」等需求时,按以下步骤执行:
- 先确认运行环境:
python -c "import playwright"。缺失则按下方「准备环境」安装(国内需换 pip 与 chromium 镜像)。
> 例外:若走零浏览器模式(--session,见「无头服务器 / 面板」),无需安装 Playwright。 - 运行
python scripts/trae_checkin.py(路径相对于本技能包,务必使用绝对路径)。
首次运行会弹出浏览器并要求登录一次,此后登录态持久化,不再需要人工参与。 - 读取退出码:
0= 成功(本次领取成功,或今天早已签到而跳过);1= 失败。 - 若退出码为
1,读取脚本同目录的checkin.log定位原因,再对照下方「排障」与@references/api-notes.md处理。 - 如实回报结果,绝不把「claim 返回非零」当成签到成功——判定规则见下方「结果判定」。
- 需要无人值守时,按「定时执行」将其挂为系统计划任务。
常用参数:--login 强制重新引导登录;--show-device 仅打印设备指纹不签到;--device-id ID 手动指定设备 ID 跑一次。
> 版本 v1.1.0 | 技能包:totorosir-traework-checkin-v1.1.0.zip | 作者:totorosir
安全约束(务必遵守)
本技能每次运行都必须严格遵守以下红线,调用时不得擅自放宽或绕过:
- 仅限本机当前用户:只能用于本机已登录的 Trae 账号,不得用于任何他人账号或远程账号。
- 只读本机登录态:只读取本机持久化的浏览器登录态(
trae_browser_profile/)完成每日签到;不修改该目录下的任何登录文件。为跨设备部署而使用--export-session导出的会话文件,仅限用于用户本人名下的设备之间搬迁,不得上传网盘、不得分享或发送给任何他人;用完即删。 - 今日已签到则跳过:先查
status,若checked_in为true直接跳过领取,不重复执行claim。 - 不打印凭据:日志与控制台一律不得输出 Token / JWT / Cookie 等任何凭据明文(仅
device_id等非敏感设备指纹可出现在日志)。 - 不外发凭证:所有请求只发给 Trae 官方接口(
api.trae.cn/work.trae.cn),绝不以任何形式将登录态、Token 或设备信息发送给任何第三方。 - 失效即停:若 Trae 官方下线签到活动、或调整 / 关闭
checkin_credits接口导致功能不可用,立即停止使用本技能,不得尝试绕过或 hack。
背景:为什么不能直接点按钮
work.trae.cn 的签到入口被前端 kill switch 硬关闭——feature gate 恒返回
false,页面上根本不渲染签到按钮,页面自己的 fetchStatus/claim 也会
直接短路不发请求。所以 DOM 和网络面板里都搜不到签到调用。
本 skill 绕过 UI,直连后端 checkin_credits 接口完成签到。
快速开始
1. 准备环境
只需要一次。Playwright 的 pip 源和 chromium 下载源在国内都需要换镜像:
pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple
# Windows PowerShell
$env:PLAYWRIGHT_DOWNLOAD_HOST = "https://cdn.npmmirror.com/binaries/playwright"
# macOS / Linux
export PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright
playwright install chromium
清理 Playwright 残留的 chromium 进程时,按进程路径包含 ms-playwright 过滤,
避免误杀用户自己的 Chrome。
2. 首次运行(必须有人参与)
python scripts/trae_checkin.py
脚本会自动弹出浏览器并置顶提示,等待用户在 work.trae.cn 完成登录。
登录态保存在脚本同目录的 trae_browser_profile/,之后不再需要登录。
3. 后续运行(全自动、无窗口)
同一条命令即可。登录态有效时完全静默执行,不再弹窗。
工作流
脚本内部流程固定为:
- 读取/探测设备指纹,缓存到同目录
device.json - 静默启动持久化浏览器,在页面上下文取 JWT
(GetUserToken——会话 cookie 是 httpOnly,读不到,只能靠页面发请求) - 登录态失效才弹出浏览器引导登录
- 用 Python 的
urllib直连接口(不是 浏览器fetch):
status→ 未签到则claim→ 再次status校验
第 4 步必须用 Python 直连:浏览器 fetch 发不出 x-device-id 这类自定义头
(会触发被服务端拒绝的 CORS 预检),导致 claim 恒返回 9004。
> 零浏览器模式(--session)跳过第 2–3 步的浏览器环节:由 Python 用会话 cookie
> 经纯 HTTP 换取 JWT,然后直接进入第 4 步。
结果判定
| 退出码 | 含义 |
|---|---|
0 |
已签到(本次领取成功,或今天早已签到而跳过) |
1 |
失败,细节见脚本同目录 checkin.log |
脚本是幂等的:先查 status,已签到就跳过领取,一天内重复运行不会出问题。
常用参数
python scripts/trae_checkin.py --login # 强制重新引导登录(登录态过期时)
python scripts/trae_checkin.py --show-device # 只打印设备指纹,不签到
python scripts/trae_checkin.py --device-id ID # 手动指定设备 ID 跑一次
python scripts/trae_checkin.py --export-session sess.json # 导出登录会话(cookies+device_id)供无头服务器部署
python scripts/trae_checkin.py --session sess.json # 【零浏览器】直接用会话文件签到,不需要 Playwright/Chromium
python scripts/trae_checkin.py --import-session sess.json # 在无头服务器导入会话到浏览器 profile 后签到(需 Chromium)
无头服务器 / 面板(如呆呆面板)
首次登录需要「有头浏览器 + 真人输入」,无显示器的 Linux 服务器(Docker 面板、无头 VPS)
默认跑不通引导登录。改用「本机登录、服务器复用」,有两种模式:
模式一 · 零浏览器(首选,服务器无需 Chromium)
GetUserToken 实测可直接用 cookie 走纯 HTTP 换取 JWT,不依赖浏览器页面上下文。
因此服务器侧只需 Python 标准库:
- 在有显示器的机器上登录一次:
python scripts/trae_checkin.py --login。 - 导出会话:
python scripts/trae_checkin.py --export-session sess.json
(仅导出trae.cn相关 cookie 与device_id,不含任何明文 Token)。 - 把
sess.json传到服务器(放在持久卷上),每天直接运行:
python scripts/trae_checkin.py --session /持久卷路径/sess.json
全程纯 HTTP、无窗口、无 Chromium。
模式二 · 无头 Chromium(备选,需要装浏览器)
把会话导入浏览器 profile 后复用:
- 同上导出
sess.json并传到服务器。 export TRAE_PROFILE_DIR=/持久卷路径/trae_browser_profilepython scripts/trae_checkin.py --import-session sess.json- 之后每日
python scripts/trae_checkin.py纯无头运行。
模式二需要在容器内 playwright install chromium 并补齐系统库(libnss3 等),
模式一不需要,因此面板环境优先用模式一。
> 两种模式的会话 cookie 都有有效期(数周量级)。失效时报错明确,届时在仍登录的机器上
> 重新 --export-session 覆盖即可。
详见 @references/api-notes.md 与 README「在 Linux 无头服务器 / 面板部署」。
设备指纹
接口要求带客户端设备头,其中 x-device-id 决定成败。脚本会自动从本机 Trae
客户端日志里提取并缓存,无需手工配置:
[ICubeDeviceRegisterService] (init) resolve device_id: <数字>
日志位置:Windows %APPDATA%\Trae CN\logs\<session>\sharedprocess.log
(macOS / Linux 见 references/api-notes.md)。
探测不到时,先启动一次 Trae 桌面客户端再重试,或用 --device-id 手动指定。
排障
遇到失败、想了解接口细节、错误码含义或环境踩坑,读
@references/api-notes.md。
最关键的坑:claim 返回 9004 并不代表"今天已签到",它表示请求没通过
校验(通常是设备头缺失)。只有 status 里 checked_in: false 且 claim 返回
非零,才是真的签到失败,必须如实报失败,不能当成成功。
定时执行
脚本可安全重复运行,适合挂定时任务。配置时注意:
- 用脚本的绝对路径,并允许其在所在目录写入(浏览器 profile 和日志都在这)
- 按退出码判断是否成功:
0成功,1失败 - Windows 计划任务建议用
python.exe而非pythonw.exe,便于排查
关于作者
本技能由 TOTORO(totorosir)开发维护;相关更新、用法答疑与实战笔记发布于公众号 龙猫科技说。