本项目从本机 3CT 1.2.5 的 Electron 资源与 sourcemap 恢复业务源码,复用原有 window.ctAPI,生成独立桌面副本。原始程序目录保持不变。
| 副本 | 入口 | 特点 |
|---|---|---|
| 1CT(新版,推荐) | 启动1CT.exe(构建产物,不随仓库分发) |
极简白单窗口 + 独立图标;支持多成员(多人共用一台电脑刷各自的二课/校园跑/俱乐部);二课支持微信扫码登录(校园网外也能登),密码登录仍保留(校内网可用);首次启动引导 + 按版本只弹一次的更新公告;二课八模块缺口自动从学校官方接口同步(无需手填)+ 已报名二课列表(直连官网、自动分页)+ 官方报名列表签到状态回显(GetStuAllActApplyList 的 SignD/SignT)+ 每行官方签到/签退时段展示 + 最近 6 个官方签到/签退成功记录 + 官网已报名活动自动跟踪签到/签退 + 会话过期自动重登 + 签到成功可视化 + CSV 导出;校园跑每日执行时刻默认 19:00(可在运行页修改),窗口与里程每天自动随机(不用手填);窗口按钮齐全(最小化 / 最大化 / 退至后台);只保留三大模块 |
| 3CT-Auto(旧版) | 启动3CT自动版.exe(构建产物) |
右下角浮层 AutoPanel(暗色);单账号 |
1CT 与 3CT 完全独立:1CT 使用自己的 %APPDATA%\1CT 用户数据目录与独立单实例锁,可与 3CT / 3CT-Auto 同时运行、互不干扰(代价是首次启动需在 1CT 里重新登录)。需要回退到共用数据目录时加 --shared-user-data 或设 CT_SHARE_USER_DATA=1。1CT 构建:python desktop/install_1ct.py build --force,使用说明见 1CT 使用说明,打包细节见 打包说明。
本机已生成可运行副本。 日常请双击根目录的 启动3CT自动版.exe(构建产物),这是带图标、无命令窗口的图形入口。副本目录内也有同名入口;原来的 CMD 启动器 仅作为排错备用。
先退出原版(包括托盘)。在右下角 AutoPanel 选择模块、账号、校区和参数,先点“立即预览”,确认计划后取消“预览”并开启右上角开关;以后重开升级版会恢复上次启用状态。图形入口会清理仅对子进程生效的 Electron Node 模式环境变量,副本已运行时优先切回已有窗口,不强制重启。
需要从源码重新构建时使用:
python desktop/install.py build
python desktop/build_gui_launcher.py生成后先完全退出原版 3CT(包括托盘),再运行升级版。原版与升级版沿用同一用户资料与单实例锁,不可同时运行。本项目不关闭用户正在运行的原程序。
打开 AutoPanel 的“结果看板”,可查看全屏的“概览 / 二课补分 / 执行记录”。
- 二课补缺:按八个模块逐项比较最低要求与当前积分,已达标模块停止新增报名;已报名活动仍继续签到、签退。默认启用该策略,缺少可信成绩或成绩过期时暂停新增报名。
- 成绩导入:登录二课后,在“二课补分”点“使用截图初值”并确认绑定当前账号,或点“刷新分数”读取官方成绩。用户提供的初值合计分类缺口29.5分、6项未达标、2项达标;不跨模块抵扣富余分。截图初值是手工参考,不是实时成绩。
- 结果可视化:校园跑、俱乐部、二课按动作统计成功,展示成功趋势、已确认跑步距离及可筛选的执行明细。预览不计真实成功,提交成功不等于官方积分到账;看板不会据此自动加分。
- 历史保存:本地持久化,最多2000条 / 90天,默认按当前二课和校园跑账号组隔离;旧版本无明细的历史不能还原为完整新记录。
完整分析和操作步骤见 二课补分策略与看板指南。
- 二课登录:优先「微信扫码登录」——学校自 2026-04 起限制校园网外只能用扫码,所以校外 / 4G / 热点都走扫码;学号 + 密码只在校内网可用,失败时界面直接显示学校返回的原因,不再统一显示「登录失败」。
- 校园跑:首次选择账号、校区,此后每天到「每日执行时刻」(默认 19:00,运行页可改)调用原程序上报能力,无需每天点击;窗口与里程自动随机。
- 俱乐部:按关键词筛选当天活动,在每日报名上限内自动报名,再于活动时间窗内签到、签退;签到窗口默认 15 分钟(可配置),坐标只回传学校下发的签到点,避免把记录落到别的校区。
- 签到失败会有界重试(默认 2 分钟一次、最多 3 次),一次被学校拒绝不会锁死整天;结果不确定(超时/断网)仍立即锁定,防止重复提交。失败原因写进日志与记录,也可在运行页「清除今日失败锁定」后立刻再试。
- 二课:按关键词报名并持续关注已报名活动;签到/签退窗口开始后优先使用志愿者图库里的有效二维码;没有可用二维码时默认改走官方
StuSaveSignIn无码直签兜底(不需要二维码,2026-10-17 实测可正常落库)。 - 二维码默认采用「延迟 2 分钟、重试间隔 2 分钟、最多 3 次」,不每次调度都查询图库,不越过官方截止时间。
首次默认关闭;配置好后点「启动」即真实执行(预览模式已在 1.2.0 下线,不再有预览/真实开关)。电脑必须保持唤醒、应用保持运行;睡眠、关机、程序完全退出时不会执行,不宣称后台云运行。
- 有效二维码依赖上传者;但本版已不再强依赖:无可用二维码时走官方无码直签兜底(可用
ek.noQrFallback=false关闭)。二课拍照、定位+拍照及验证码签到仍未必具备自动提交所需材料,不应把“需人工”显示为已完成。 - 上游服务可能改变字段、时间窗、登录要求或风控;离线测试通过不等同于真实平台已接受操作。俱乐部若遇到「上游没下发签到点」,默认不会用活动地点坐标硬签(那可能记到别的校区),可在配置里显式打开
club.allowActivityCoords。 - 提交结果未知时停止自动重投,需先在原平台核查,以防重复报名或打卡。
- 使用须符合学校和平台规定;账号由程序内部正常使用,不导出、打印密码或 token。
python -m unittest discover -s tests -v
python -m unittest discover -s reverse -p "test_*.py" -v
node --test desktop/test-automation.cjs本次「签到失败有界重试 + 失败原因落盘与展示 + 清除今日失败锁定 + 俱乐部窗口/坐标修正」已验证:Python 293 项、Node 引擎/积分/成员/统计 379 项、界面浏览器断言 364 项、打包后 Electron 冒烟 32+45 项,合计 1113 项全部 0 fail。原始 ASAR 未改,重建后的 app.asar 通过 verify(哈希 / 注入清单 / 启动器 / 图标全过);无控制台图形入口保留。真实账号只读端到端已验证:官网「报名/完成列表」签到状态(SignD/SignT)、每个已报名活动的签到/签退时段(两行完整显示)、最近 6 个官方签到/签退成功记录均在 1CT 二课页正确显示,未提交任何签到/报名写请求。验证方式:node desktop/test-1ct-shell.cjs(界面 347 条)、node tests/packaged-1ct-smoke.cjs、node tests/packaged-1ct-renderer.cjs;证据 JSON 与截图只留在本机 artifacts/,不随仓库分发。
当前二课自动签到以扫码方式(SignWay=1)为主,并内置无二维码兜底:志愿者未上传二维码时调用官方 StuSaveSignIn(SignWay=1、空照片/定位)完成签到/签退,实测官方记录会更新为「已签到/已签退」。拍照、定位+拍照、验证码方式仍需人工;二课会话过期时也需要重新登录。无二维码时的兜底已内置,不需要额外配置。
辅助 Python 调度模块提供配置校验、离线预览、持久化去重及依赖测试,不是桌面一键操作的必需入口。未配置业务适配器时,Python CLI 不能假装真实业务成功。