WorkMaster 是一套统一部署的高校招聘日历网站。服务器定时采集南京、上海、苏州及周边 33 所高校公开发布的校园宣讲会和招聘会,所有访问者共享同一份数据;点击日期可查看按时间排列的日程,点击活动可继续查看岗位、专业、学历、薪资、参展企业以及学校原文。
推荐使用 Docker 单实例运行,宝塔负责域名、HTTPS 和 Nginx 反向代理。完整步骤见 deploy/baota/README.md。
cp deploy/.env.example .env
docker compose up -d --build容器仅监听宿主机 127.0.0.1:8765,网页、API、SQLite 与定时采集由同一实例提供。51.LA 通过 NEXT_PUBLIC_51LA_TRACKING_SRC、NEXT_PUBLIC_51LA_ID 和 NEXT_PUBLIC_51LA_CK 在构建时接入。
运行环境要求:Windows 10/11、Python 3.11+、Node.js 22 LTS 与 npm。
最简单的方式:双击项目根目录的 WorkMaster.cmd。首次打开时它会自动安装依赖、初始化数据库,随后启动服务并打开浏览器;以后再双击会直接打开。需要停止后台服务时,双击 Stop WorkMaster.cmd。
也可以在 PowerShell 中手动运行:
cd C:\Users\hansh\PycharmProjects\Github\WorkMaster
.\setup.ps1
.\start.ps1安装脚本会创建 backend\.venv、安装前后端依赖、安装 Playwright Chromium 并初始化 SQLite。启动完成后会自动打开 http://127.0.0.1:3000。首次同步需要逐一读取 33 个来源,页面可以正常使用,数据会随着进度陆续出现。
停止程序:
.\stop.ps1如果暂时不需要 13 个动态/独立站点的浏览器后备采集,可使用 .\scripts\setup.ps1 -SkipBrowser 跳过 Chromium。
桌面版适用于 Windows 10/11 64 位。将 release/WorkMaster-Setup-1.0.2-x64.exe 发给朋友即可安装;也可发送 release/WorkMaster-Portable-1.0.2-x64.zip,完整解压后双击 WorkMaster.exe。免安装版必须保留同目录的 _internal 文件夹。无需管理员权限,无需另装 Python、Node.js、Chrome 或 WebView2。
程序内置初始数据、Chromium 采集与窗口运行环境、OCR 模型。启动时及运行期间每 30 分钟自动更新,右上角“更新数据”可手动同步并查看实时进度;日历每 15 秒自动读取最新结果。关闭软件后停止采集,重开后自动恢复。每位朋友拥有独立数据库,如需共享同一份实时数据,可使用上面的服务器部署方式。
发布版把个人数据库和日志保存在 %LOCALAPPDATA%\WorkMaster,升级或卸载软件不会覆盖历史招聘数据。构建发布版使用:
.\scripts\build-release.ps1构建使用 backend/.venv 和已安装的前端依赖,自动准备对应版本的 Chromium,输出安装包、免安装包及 SHA256SUMS.txt。现有数据库通过 SQLite 在线备份生成分发缓存,不需要停止正在使用的开发服务。
如需更改桌面版设置,新建 %LOCALAPPDATA%\WorkMaster\settings.env,填写 WORKMASTER_SYNC_INTERVAL_MINUTES=30 等配置后重启。招聘数据自动更新;程序本身升级需下载新版安装包。使用同一 Windows 账户安装新版会沿用原有数据库,不会以旧缓存覆盖较新的活动及岗位信息。详细说明随软件一同分发。
- 七列月历显示时间、学校缩写和企业/活动名称,密集日期折叠为“另有 N 场”。
- 当天日程按开始时间排序,时段重叠时并列显示,时间待定活动单独分区。
- 支持城市、学校、活动类型、线上/线下、活动状态与关键词组合筛选。
- 详情页保留学校原始链接,展示结构化岗位、正文、联系方式和招聘会参展企业。
- 每 30 分钟增量同步;“立即更新”通过 SSE 显示实时进度,重复点击不会创建重复任务。
- 单个来源失败不影响其他来源,历史数据继续可查;界面可查看 33 个来源的健康状态。
- 活动连续三次从成功响应中消失时标记“可能撤下”,取消活动保留而不删除。
- SQLite 开启 WAL 与 FTS5;远程 HTML 经白名单清洗,海报岗位可用 RapidOCR 提取并标注需核对。
- 仅绑定
127.0.0.1,无账号、收藏、提醒、云端部署或后台 Windows 服务。
江苏 91job 子站使用其公开 JSON 接口,独立就业站优先解析公开 HTML,页面内容依赖 JavaScript 时再使用 Playwright。程序不登录、不提交验证码,也不绕过访问限制。
| 区域 | 学校 |
|---|---|
| 南京 | 南京大学、东南大学、河海大学、南京航空航天大学、南京理工大学、南京农业大学、南京师范大学、南京工业大学、南京邮电大学、南京信息工程大学、南京林业大学、中国药科大学、南京医科大学、南京中医药大学、南京财经大学、南京审计大学 |
| 上海 | 上海交通大学、复旦大学、同济大学、华东师范大学、华东理工大学、东华大学、上海大学、上海财经大学、上海外国语大学、上海理工大学 |
| 周边 | 苏州大学、西交利物浦大学、昆山杜克大学、常州大学、江南大学、江苏大学、扬州大学 |
学校与入口配置集中在 backend/app/crawlers/schools.py。每条活动都保留 source_url,可从详情页直接打开官方原文。
- 启动时抓取最近 30 天至未来 120 天,之后每 30 分钟刷新一次。
- 浏览默认窗口之外的月份时,后端会在没有其他任务运行的情况下请求该日期范围。
- 以
(source_key, source_event_id)去重;相同企业在不同学校的活动分别保留。 - 学校明确写明取消/延期时标记“已取消”;连续三次消失时标记“可能撤下”。
- 结构化岗位优先于正文解析;只有海报图片时使用 OCR,并显示“请以原文为准”。
- 上游没有提供的字段显示“来源未提供”,程序不推测内容。
首次安装会把 .env.example 复制为 .env。常用项目:
WORKMASTER_SYNC_INTERVAL_MINUTES=30
WORKMASTER_MAX_SOURCE_CONCURRENCY=4
WORKMASTER_INITIAL_PAST_DAYS=30
WORKMASTER_INITIAL_FUTURE_DAYS=120
WORKMASTER_ENABLE_OCR=true
NEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8000/api/v1如果本机代理使用自签名证书导致所有 HTTPS 请求失败,可临时设置 WORKMASTER_TLS_VERIFY=false 后重启。只有在确认网络环境可信时才这样做。
后端:
cd backend
.\.venv\Scripts\python.exe -m ruff check app tests
.\.venv\Scripts\python.exe -m mypy app
.\.venv\Scripts\python.exe -m pytest前端:
cd frontend
npm run lint
npm run typecheck
npm test
npm run buildAPI 文档位于 http://127.0.0.1:8000/docs。主要接口为:
GET /api/v1/calendarGET /api/v1/events/{id}GET /api/v1/schoolsGET /api/v1/sources/healthPOST /api/v1/syncGET /api/v1/sync/{run_id}/stream
- 数据库:
backend/data/workmaster.db - 后端日志:
logs/backend.log、logs/backend-error.log - 前端日志:
logs/frontend.log、logs/frontend-error.log - 脱敏原则:日志只记录来源标识和错误摘要,不保存登录信息(采集本身也不使用登录信息)。
页面显示“本地服务未连接”时,先运行 .\stop.ps1 再运行 .\start.ps1,随后检查 logs 中的错误日志。页面显示部分来源异常时,历史数据仍可使用,可点击顶部状态条查看具体学校。
重建数据:
.\scripts\reset-data.ps1
.\start.ps1重置脚本不会直接销毁数据库,而会把旧文件归档为 backend\data\workmaster-backup-时间.db。数据库、缓存、日志、依赖与 .env 均已排除在 Git 之外。
WorkMaster/
├─ backend/ FastAPI、SQLite、采集器、调度器、迁移与测试
│ ├─ app/crawlers/ 91job 与独立就业站适配器
│ └─ app/services/ 时间解析、岗位/OCR、同步与持久化
├─ frontend/ Next.js、FullCalendar、响应式界面与测试
├─ scripts/ 安装、启动、停止、数据重置脚本
├─ WorkMaster.cmd 双击运行器(首次运行会自动安装)
├─ Stop WorkMaster.cmd 双击停止后台服务
├─ setup.ps1 安装入口
├─ start.ps1 启动入口
└─ stop.ps1 停止入口
上游就业网站可能改版或临时限制访问。WorkMaster 会展示最近一次成功数据和来源健康状态,但无法保证第三方网站持续可用;做求职决策前请在详情页打开学校原文核对。
后端、前端、采集器和部署边界的详细说明见 docs/ARCHITECTURE.md。
本项目采用 MIT License。第三方网站内容及标识仍归各自权利人所有。
