Repository navigation
Releases: handsomekai924/boss-automatic-delivery
Release list
v1.2.3
v1.2.2
新增
- 行业数据改走接口:优先调行业接口拉取行业树,接口不可用时自动降级回内置行业表。
- 级联选择器保留滚动位置:切换父级时不再丢失各列浏览位置,勾选 / 清空也不会跳回顶部。
修复
- SQLite 连接并发安全:改为每线程独立连接,多线程并发读写不再串线。
- 「版本更新」圆点不显示:进入设置页后圆点按缓存正确绘制,忽略版本后立即熄灭。
v1.2.1
新增
- 侧边栏仓库徽章:Gitee / GitHub 各挂一个星标徽章,点开对应仓库页——想 star、想提 issue 不用再翻 README
修复
-
【致命】1.2.0 的发行 zip 少了
_internal\base_library.zip,装完程序根本起不来make_zip.py为了不把 dist 里的残留物打进去,按后缀一刀切跳过*.zip——但 PyInstaller 的 onedir 布局里_internal\base_library.zip装的是整个 stdlib(含encodings),被顺手丢了- 症状:双击 exe 直接闪退 / 报
No module named 'encodings' - 改法:跳过规则给
base_library.zip开白名单(KEEP_ZIP_NAMES);打完包自我核对一遍REQUIRED_MEMBERS(BossAutoDelivery.exe+_internal/base_library.zip),缺了就把坏包删掉并拒绝发货——坏包留在dist\里迟早被当成好包发出去 apply_update.bat加第三道守卫:解压后缺base_library.zip就停在原地报错,不许换文件。残缺包换上去比不更新还糟(旧的能用胜过没有),所以守卫必须排在删安装目录之前- 校验放宽到「一层子目录包着也算」:真出过
BossAutoDelivery\布局,按根路径硬比会误判成缺文件
-
更新永远卡在 85%「closing old app」:
spawn_bat原来用DETACHED_PROCESS起 bat,cmd 完全没有控制台,bat 里任何管道都会永久挂死——tasklist ... | findstr ...正好是「等旧进程退出」循环的第一句,更新一声不响停在 85%;同一环境下tasklist重定向出来是空的、pause也会挂住。改用CREATE_NO_WINDOW——给一个真实存在只是没窗口的控制台,管道 /tasklist/pause全部正常;失败原因看update.log(「系统设置 → 版本更新」能就地看) -
更新完成后标签页被关掉,用户手上一个页面都不剩:重启的 exe 带
--no-browser不会再开浏览器,而window.close()对「用户自己开的、没有历史记录」的标签页照关不误(try/catch也拦不住,浏览器只打一条 console 警告)。改成自动刷新到新版本:- 延迟 1.5 秒再刷,让用户看清更新到了哪一版;按钮从「知道了」换成「立即刷新」
- 刷新前用
sessionStorage记「这页处理过哪一版的回执」,防「看到回执 → 刷新 → 又看到回执 → 再刷新」无限刷(回执是进程内缓存的,不记标记必死循环) sessionStorage被浏览器禁了就降级为提示手动 F5——宁可让用户自己刷,也不能刷不完- 每个标签页拿到回执都统一刷新,不只是发起更新的那个,保证手上这页一定不跑旧代码
改进
- 发行 zip 打完自我核对关键成员,坏包自动删掉;打包脚本、bat 守卫、创建标志都有回归用例钉着
升级说明
- 别再下载 / 分发
BossAutoDelivery-1.2.0.zip——那个包是残缺的,解压后 exe 起不来。已经下过的请改下BossAutoDelivery-1.2.1.zip - 1.2.0 的用户没法用「立即更新」升上来:1.2.0 自己生成的 bat 有挂死 bug,会卡在 85% 一动不动(安装目录不会被动,旧程序还能用)。请手动下载
BossAutoDelivery-1.2.1.zip,解压到任意目录,再把旧安装目录里的data\拷进去(简历 / 登录态 / 职位全在boss.db里) - 行为变化:更新完成后不再关标签页,改为自动刷新到新版本(停留约 1.5 秒让你看清版本号,也可点「立即刷新」)
- 从 1.2.1 起「立即更新」恢复正常,而且换文件前会多一道
base_library.zip守卫 - 数据库无迁移、无新表、无新列
- 源码用户:
git pull即可,无额外步骤
测试
- 新增打包用例(
base_library.zip必须进包 / 好包自检通过 / 缺件拒绝发货并删坏包)、bat 第三道守卫(缺base_library.zip停在原地不换)、spawn_bat创建标志(必须CREATE_NO_WINDOW、不许DETACHED_PROCESS) - 前端契约同步「更新完成只刷新不关页」:旧断言还在盯
window.close(),已改成盯location.reload()+sessionStorage防循环 + F5 兜底 - 当前全套 1206 项通过、4 项跳过
v1.2.0
新增
-
应用内自动更新(v1.1.1 的「检测 + 提示」补完下半截)
-
发现新版本的弹窗里多了**「立即更新」**;四个出口变成:立即更新 / 前往 Gitee / 前往 GitHub / 忽略此版本
-
更新全流程:
下载 zip(弹窗上有百分比)─► 校验 zip 能解开、里面有 BossAutoDelivery.exe ─► 生成 %TEMP% 下的 apply_update.bat(黑窗会短暂出现,是正常的) ─► bat 先验后删:zip 不在 / 解压不出 exe 就退出,安装目录一个文件都不动 ─► 停服务 ─► 换程序文件(保留 data\)─► 按原来的端口重启 -
目录语义:
BossAutoDelivery.exe+_internal\是程序文件,升级时整换;data\是用户数据(boss.db/chrome_profile\/logs\),升级时一个字节都不动 -
全程 WebSocket(
/api/system/update/ws)推进度;换文件那几秒页面会断开,新服务起来后自动接上,显示「更新完成,可以关闭此标签页了」 -
失败的话黑窗停在原因上按任意键关闭,日志在
%TEMP%\BossAutoDelivery-update\update.log——把它发出来就能定位 -
只在装在本地目录里的 exe 上提供:源码跑请用
git pull,在压缩包预览里跑请先解压——这两种情况弹窗里不会出现「立即更新」 -
打包形态变了:从单文件 exe(onefile)改成 onedir + 发行 zip(
BossAutoDelivery-x.y.z.zip)。单文件 exe 会把自己解到%TEMP%再跑,升级时没法就地替换,也没法让data\跟着安装目录走;onedir 启动快,而且换得动自己 -
packaging\build.bat每次先清空dist\再打,避免旧布局残留被发出去;打包前用find_spec预检hiddenimports,缺segno/uvicorn/python-docx直接报错,不再出「双击闪退」或「二维码裂图」 -
README 补了「发版清单」:改
__version__→ 打 zip → 在 Gitee 建 Release(版本判断只认 Gitee)→ zip 作附件挂上(BossAutoDelivery开头、.zip结尾)→ 别勾「预发布」(会被跳过)
-
-
系统设置 → 「版本更新」页签(更新出问题不用再翻
%TEMP%)- 普通用户不知道
%TEMP%\BossAutoDelivery-update\在哪,以前更新失败只能干瞪眼。现在系统设置里多了第三个页签「版本更新」,日志就摆在网页上 - 五个按钮:检查更新(强制走一次 Gitee,出结果 toast)/ 立即更新(有新版且装在本地目录里才出现)/ 打开更新窗口(复用原有的「发现新版本」弹窗,含更新说明、忽略、下载链接)/ 刷新日志 / 复制诊断信息
- 就地看更新过程日志:
update.log与progress.log的尾部(默认 64 KB,超长只取尾部并丢掉残行)直接显示在页面上;文件不存在 / 被别的进程锁住都当数据处理(永远 200,页面上写明原因),不会弹一个看不懂的接口错误 - 出错时一张截图就是一份反馈:错误横幅里直接写「当前版本 vX · 安装方式(源码运行 / 压缩包临时运行 / 安装版)+ 失败原因」,完整日志紧挨在下面;点「复制诊断信息」得到一份可直接贴进微信 / 邮件的纯文本(导出时间 / 版本 / 安装方式 / 目录 / 上次检查结果 / 忽略版本 / 最近更新阶段 + 两份日志尾部),浏览器拦剪贴板时退化成弹框手动 Ctrl+C
- 每 5 分钟自动检测(后端守护线程打 Gitee,与打开几个网页无关);前端每分钟只读缓存,发现没提醒过的新版就 toast 一句「发现新版本 vX,到『系统设置 → 版本更新』看看」,并在页签标题上点一个小圆点
- 轻提示,不重复弹窗:首屏那个「发现新版本」弹窗仍且只弹一次;挂机期间绝不再弹窗,同一版本也只 toast 一次;点过「忽略此版本」的版本连 toast 都没有(忽略水位线继续生效)
- 新接口
GET /api/system/update/log:回日志尾部 + 一份只读缓存的诊断信息(不打 Gitee,诊断页不会卡 8 秒);更新完成回执done.json只给真正的消费方,看日志不会把它吃掉
- 普通用户不知道
-
抓取任务历史档案(抓取从内存对象变成可追溯记录)
- 新表
crawl_tasks(任务条件 / 统计 / 时间)+crawl_task_jobs(任务 ↔ 岗位归属);fetch_pages加task_id,页级流水挂到任务上 - 「职位匹配 → 抓取任务」目录里能回看每一次抓取:条件、统计、带回了哪些岗位(点开看本批岗位列表)
- 对本批岗位一键发起匹配:不必再「一键匹配全部」(全库)或手动翻页勾选;工作台会显示匹配范围条(
抓取任务 #xxxx · N 个职位),可一键清掉范围 - 抓取记录只进不删;正在跑的任务也会出现在列表里(带 live 进度)
- 命令行 / 任务参数都带
crawl_task_id,批量匹配可以限定到某一次抓取
- 新表
-
30 天招呼语发送冷却(重抓岗位不再重复骚扰同一位 HR)
jobs表加last_greeted_at,以岗位为粒度记发送史(以前只记在analysis快照的delivered_at里,跨分析完全失效)- 判定口径:
可发送 ⇔ now - 最近发送时间 ≥ 30 天;恰好 30 天整允许再发;「最近发送时间」取岗位维度last_greeted_at与本条分析delivered_at中较晚者——上线前已发出的岗位也算数 - 发送前统一校验,冷却中跳过并标
30 天内已发送(MM-DD);发送成功后双写岗位维度与条目维度 - 重抓 UPSERT 不会覆盖
last_greeted_at(发送史不被下一次抓取抹掉) - 匹配结果卡片 / 发送清单上的状态会带冷却信息(待发 / 冷却中 / 已发送 / 失败原因)
- 30 天窗写死常量(
GREET_COOLDOWN_DAYS),不进配置——以后要调再进deliver_config
-
职位匹配页拆成四个目录(消除一屏塞满的状态)
-
沿用「系统配置」的左右目录范式,长页变控制台:
目录 内容 匹配工作台(默认) 简历选择 + 解析状态、匹配范围条、一键匹配当前范围 / 匹配选中、批量匹配任务面板、双栏(岗位列表 | 匹配结果) 批量发送 当前分析上下文条、一键发送全部 / 选中、评分阈值(自动保存)、批量投递任务面板、发送清单 抓取任务 历史抓取档案分页、任务详情、本批岗位列表、一键匹配本批 分析历史 analysis列表载入 / 删除(不再是夹在中间的 200px 小窗) -
匹配主流程(岗位 → 结果)首屏就是工作区;匹配结果卡片、详情弹窗(分析 / 职位信息 / 招呼语手改 / 重新生成 / 重新匹配 / 单条发送)全部保留
-
页面状态(简历、勾选、当前分析、两个长任务)收进各自的子模块,后续加功能不用再往一页上堆
-
-
启动时登录态自检(首屏状态不再需要手动刷新)
GET /api/auth/status只看库里有没有凭证,不问服务端——凭证过期后照样报「已登录」,点「开始抓取」才撞见失效。现在启动时拿库里的凭证打一次用户信息接口验真伪- 四态结论:
valid(服务端认,顺手刷 user)/expired(服务端明说失效 → 清掉库里那份)/absent(本来就没登录,不发请求)/unknown(网络不通 / 别的错 → 不动库,断网不该把好凭证抹掉) - 「是不是真的失效」有判据:话术里明说了登录问题才算;
getUserInfo回个「系统繁忙」不会清库 - CLI 启动流程改为等自检出结果再开浏览器(上限 20s,超时先开别干等)——网页一打开看到的会话状态就是定论
- 首页卡片跟随
boss:session事件更新;/api/响应加Cache-Control: no-store,防浏览器缓存旧状态
修复
- 未登录时采集接口返回 500:
create_client()抛的JobApiError现在转成UpstreamError(502);app 层加JobError全局兜底,不再漏 500;「本地没有登录态」的提示改成指向**「登录」页**,错误文案去掉重复的「失败」前缀 - 二维码图片加载失败无提示:裂图变成把服务端的
message显示出来,不再静默;WebError顺手补日志(5xx warning / 4xx info),报问题时有迹可循 - 打包漏依赖:
segno显式进boss_web.spec的hiddenimports,打包前预检缺了直接报错;requirements.txt补 UTF-8 声明
改进
- 黑名单规则列表每行加状态指示圆点(绿 = 启用带发光、灰 = 停用),
title提示当前状态 - 职位列表分页按钮在没有下一页 / 加载中时会禁用,不再点空
- 设置导航栏 sticky 偏移修正,长列表滚动时目录不再被页头盖住
升级说明
- 数据库自动迁移,不用手动改表:首次启动会补
crawl_tasks/crawl_task_jobs两张表,以及jobs.last_greeted_at、fetch_pages.task_id两列(CREATE TABLE IF NOT EXISTS不会补列,靠_migrate_columns())。旧数据不回填——历史抓取不补档案,只对升级后的新抓取生效 - 打包形态变了:从 v1.1.x 的单文件 exe 换成 zip 解压版。旧的
BossAutoDelivery.exe(onefile)没法就地升到 1.2.0——那上面没有「立即更新」按钮,也没有可替换的_internal\。请去 Releases 下一次BossAutoDelivery-1.2.0.zip,解压后把旧data\拷进新安装目录(简历 / 登录态 / 职位全在boss.db里)。从这一版起才吃得到「立即更新」 - 行为变化一:30 天发送冷却。以前「已发不重发」只在同一条分析内有效,跨分析会把同一岗位再发一遍;现在 30 天内发过的岗位,再抓到 / 再匹配 / 一键发送一律跳过。想立刻再发同一岗位的,等 30 天或手动改库里的
last_greeted_at - 行为变化二:启动会自检登录态。服务端确认过期会清掉本地登录态(首页如实显示未登录);断网 / 系统繁忙不会动库。首屏比以前多等最多几秒才出结论
- 行为变化三:后台每 5 分钟自动检测版本。挂机时发现新版只 toast 一句 + 「版本更新」页签点个小圆点,不会再弹窗;同一版本只提醒一次,点过「忽略此版本」的连 toast 都没有
- 源码用户:
git pull+pip install -r requirements.txt即可,无额外步骤;打包用户注意packaging\build.bat会先删整个dist\,要留档先拷走
测试
- 新增抓取任务档案(落库 / 任务↔岗位归属 / 重抓不覆盖发送史 / 冷却判定)、登录态自检(四态 / 不误清库)、应用内更新(下载 / 校验 / 先验后删 / 失败留日志)、版本更新页签(日志尾部截断 / 读失败不抛 / 诊断不打 Gitee / 周期检测守护线程 / 前端轻提示不重复弹窗)、打包脚本预检、前端契约等用例;当前全套 1202 项通过、4 项跳过
- 更新流程不打真网:zip 校验与
apply_update.bat生成都在假环境里跑;Gitee 拉发行版沿用 v1.1.1 的离线夹具;看日志 / 复制诊断也不会去访问 Gitee
v1.1.2
新增
-
求职期望流采集(第三条检索路径,与「关键词搜索」并列)
-
四档形态,对齐站点前端
getFormData()的四个分支:档位 主参数 站点对应 推荐 city+encryptExpectId+mixExpectType推荐 tab(混合期望) 兼职 jobType=1903+encryptExpectId兼职 tab 我的期望 encryptExpectId指定期望 tab 临时期望 expectInfo(JSON 串)「快速添加」的临时检索 -
期望流不带关键词:站点点期望 tab 时会删掉
query,这是站点行为不是我们省略;要关键词就走搜索流的「期望 + 关键词」组合(搜索流新增encrypt_expect_id) -
筛选维度(城市 / 薪资 / 经验 / 学历 / 行业 / 规模,兼职态换成
payType/partTime)与搜索流共用同一套 code 与拼法 -
期望列表在线拉(
GET /api/collection/expects):期望 id 是账号维度的,不能写死;配置页下拉分三组(我的期望 / 推荐 / 兼职)+「临时期望(快速添加)」 -
采集来源在「系统配置 → 采集配置」里二选一(关键词搜索 / 求职期望);职位页摘要会写清当前走的是哪条流
-
命令行:
--expect与--filter互斥(两者都在选「这次走哪条检索」)python -m boss_jobs fetch --expect recommend # 推荐(混合)期望 python -m boss_jobs fetch --expect part_time # 兼职期望 python -m boss_jobs fetch --expect expect:<id> # 指定期望 python -m boss_jobs fetch --expect temp:<file.json> # 临时期望(expectInfo)
-
旧「推荐页」(special/zone)流已下线——那是站点删掉的路径,空条件不再兜底到它
-
-
APP 扫码登录(与「短信验证码」并列的第二条登录路径)
-
按站点真实协议走完整六步,不模拟界面:
captcha/randkey ─► qrcode/scan(长轮询) ─► getSecondKey ─► scanSecond(与 1 秒兜底赛跑) ─► getHeadImg ─► qrcode/scanLogin(长轮询) ─► qrcode/dispatcher -
两阶段二维码票据:起手
qrId就是码内容;手机扫过之后getSecondKey换发secondUuid,码内容跟着换——所以网页上扫码后二维码会更新一次,这是对的 -
登录态与短信一样,全靠
Set-Cookie(响应体里没有 token);dispatcher回完把 Cookie 落进本地状态库 -
命令行:
python -m boss_login qr,终端直接画二维码;还支持--svg/--png导出 -
网页:登录页顶上「短信登录 / APP 扫码」两个页签,扫码有独立面板(生成 → 等扫 → 已扫 → 完成),二维码用
GET /api/auth/qr/{id}/image现画 -
同一时刻只跑一条登录流,任务快照带
kind(sms/qr),前端按它分派界面,不靠状态字符串猜 -
二维码渲染依赖
segno(可选,已进requirements.txt);没装会明确报「请pip install segno」,不影响短信登录 -
跟滑块一样是人机协作:码是你自己用 BOSS APP 扫、自己点确认,不是绕过风控
-
v1.1.1
新增
-
版本更新检测
- 程序内写死当前版本号,启动后后台比一次 Gitee 发行版;开页面时直接用结果,不卡网络
- 版本判断只认 Gitee(GitHub 发版节奏可能不一致,以 Gitee 为准);GitHub 仅作为另一个下载入口
- 不用 Gitee 的
/releases/latest——它按发布时间挑,tag 顺序一乱就返回旧版(实测 v1.1.0 已发布时它还回 v1.0.0);改为拉列表自己比大小,跳过预发布 / 草稿
-
打开页面弹「发现新版本」
- 显示
当前 v1.x → 最新 v1.y与更新说明 - 四个出口:前往 Gitee 下载 / 前往 GitHub 下载 / 忽略此版本 / 取消
- 取消(含 Esc、点空白处)什么都不记,下次打开页面照样弹
- 忽略此版本 记进本地设置,这一版不再弹
- 显示
-
忽略是水位线,不是白名单:忽略 v1.2.0 再忽略 v1.3.0 ⇒ v1.3.0 及以下一律静音,v1.4.0 一发就重新提醒;不必担心被旧版本回头骚扰
-
控制台版本信息:启动后在横幅下按行补打
当前版本 v1.1.1 发行版本 v1.1.1 是否需要更新 否,已是最新有新版时追加 Gitee / GitHub 两行下载地址;检测失败也会把当前版本打全,并写明原因(不影响程序其它功能)
-
首页环境卡显示当前版本号;健康检查接口带上版本号,方便报问题时先说清「我这是哪一版」
改进
- 版本检测结果缓存 30 分钟,连续开多个页面不会反复撞 Gitee
- 检测接口挂了也不影响使用:前端静默跳过,不额外弹错误框;服务端返回 200 +
error字段,而不是让整页报错
升级说明
- 直接覆盖运行即可,本地设置库会自动新增「忽略的版本」字段
- 版本判断只打 Gitee;想要 GitHub 的包,在弹窗里点「前往 GitHub 下载」就行
- 从 v1.1.0 及以前升上来的包没有更新提示(那时还没这功能),升到本版后才会开始提醒
- 想让已经忽略过的版本重新提醒:删掉本地设置里的忽略记录即可(或者等下一次真正更新的版本)
测试
- 新增版本号解析 / 比较、Gitee 列表挑最新、忽略水位线、缓存、HTTP 接口、控制台文案、前端弹窗契约等用例
v1.1.0
新增
- 职位黑名单规则
- 支持公司名、JD 关键词两类规则,规则与命中记录分别落库(
blacklist_rules/blacklist_hits),可审计是谁在什么时候被哪条规则拦下 - 采集时两阶段过滤:先按公司名过滤,再补 JD 详情后做关键词过滤
- 命中的职位会打上
is_blacklisted/matched_rule_ids等标记,采集统计新增跳过数与命中数 - 全链路生效:匹配结果会冻结一份安全快照,命中黑名单或安全状态不完整的职位一律禁止自动投递
- 支持公司名、JD 关键词两类规则,规则与命中记录分别落库(
- 采集配置:搜索条件(城市 / 求职类型 / 薪资 / 经验 / 学历 / 行业 / 规模)从职位页迁到「系统配置 → 采集配置」,黑名单也在同一处管理;设置页改为 Tab 布局。原
/llm路由迁至/settings,旧地址仍可访问 - 简历解析截断自动重试:读取
finish_reason,输出被length截断时以 16384 tokens 上限自动重试一次;仍失败会明确提示「缩短简历或换更高输出上限的模型」,而不是返回半截 JSON
修复
- JD 抓取失败后无法重试:引入
jd_status区分「抓取失败」与「JD 为空」——失败的会进补抓名单、下次继续抓,空 JD 的不再反复撞接口
改进
- LLM
max_tokens按场景拆档:简历解析 8192、人岗匹配 4096、通用调用 2048,长简历不再被默认上限截断 - 打招呼话术的格式约束抽成独立模块统一维护,匹配与简历分析共用同一套规则,改一处两边同步
- 上传体积限制写进前端提示:Word / PDF ≤ 8MB,Markdown / 纯文本 ≤ 2MB
- 前端新增多选下拉、级联复选框组件,设置页交互重做
升级说明
- 数据库会自动新增黑名单相关表与职位安全标记字段,直接覆盖运行即可
- 旧的匹配分析结果没有安全快照,不会进入自动投递;重新匹配一次即可恢复正常投递
- 「AI 设置」入口改名为「系统配置」,收藏了
/llm的用户会自动跳转
测试
- 新增黑名单规则、爬虫过滤、投递策略、前端契约等用例共约 1300 行,JD 失败重试行为也有覆盖
v1.0.0
登录 → 找职位 → 简历匹配 → AI 写招呼语 → 一键投递,一条龙跑通。
登录、搜索、投递全部走站点真实接口与真实帧格式,不做前端界面模拟。
📦 下载
| 方式 | 适合谁 | 说明 |
|---|---|---|
| BossAutoDelivery.exe | 不想碰命令行 | Windows 单文件,双击即用,目标机器不需要 Python / venv / pip |
| Source code | 想改代码 / 用 macOS、Linux | 克隆后按 README 装依赖运行 |
打包版的数据是便携的,全在 exe 同目录:
data\boss.db ← 简历 / 登录态 / 职位 / AI 配置,全在这一个文件里
data\chrome_profile\ ← 取安全令牌用的 Chrome 工作目录
data\logs\boss.log ← 出问题时把这个文件发出来
换机器请整个文件夹一起拷,别只拷 exe,否则简历和登录状态会丢。
✨ 功能
| 环节 | 说明 |
|---|---|
| 登录 | 手机验证码登录。滑块验证是人机协作:脚本出图、你本人拖动官方组件,不绕过风控 |
| 筛选条件 | 城市 / 求职类型 / 薪资 / 经验 / 学历 / 行业 / 规模 7 个维度,优先打真实 wapi,接口挂了自动退回内置兜底表 |
| 找工作 | 分页抓取 + 即时清洗 + 入库,页间硬性节流。__zp_stoken__ 由真 Chrome(CDP)自动计算,不用手抄 Cookie |
| 简历解析 | 支持 .docx / .pdf / .md / .txt,提取基本信息、求职意向、工作经历、项目经历、教育经历、技能、自我评价 |
| 智能匹配 | 对选中职位并行调用 AI,产出匹配度、优缺点与个性化招呼语;支持重新匹配、单条重生成 |
| 一键投递 | 建会话后走 MQTT over WebSocket + protobuf 帧,把招呼语正文真正发出去 |
| Web 控制台 | FastAPI + 原生前端,登录 / 职位 / 简历 / 匹配 / AI 设置五页工作台,双光照主题 |
🖥 环境要求
- Windows 10/11(打包版)或 Python 3.10+(源码版,开发环境为 3.12)
- Chrome 浏览器 —— 抓
__zp_stoken__时需要走 CDP 拉起真浏览器 - 一个能收短信的手机号(登录用)
- 你自己的 OpenAI 兼容 AI 接口 Key(DeepSeek / Kimi / 本地 vLLM 都行),只存本地
data\boss.db,回显打码
⚠️ 首次运行注意
- 首次运行 Windows 可能弹「已保护你的电脑」(exe 未做代码签名)。点 更多信息 → 仍要运行。这是无签名 exe 的通病。
- 别在压缩包里直接双击。Windows 会先解压到临时目录,数据会写进
%TEMP%并在退出时清掉;程序检测到这种情况会在首页顶部弹红条提醒。 - 放在
C:\Program Files这类写不进去的目录时,数据会自动改存到%LOCALAPPDATA%\BossAutoDelivery\data\,首页会告诉你实际路径。 - 想核对打包是否完整,跑
BossAutoDelivery.exe --self-check,会打印资源根 / 前端目录 / 状态库 / 日志目录 / Chrome 检测结果。
🚀 快速开始
- 登录 —— 填手机号收码,滑块验证时按页面提示在浏览器里完成拼图
- AI 设置 —— 填 API Key / 接口地址 / 模型名,先「测试连接」再保存(页面上有分步图文引导)
- 找职位 —— 配置筛选条件,一键分页搜索,浏览 / 管理职位库
- 上传简历 —— 传
.docx/.pdf/.md/.txt,自动触发解析 - 看匹配 —— 选职位跑匹配,卡片弹窗里看分析、优缺点和招呼语
- 投递 —— 确认后一键投递
也可以走命令行:python -m boss_login login / python -m boss_jobs fetch / python -m boss_web,详见 README。
🚧 已知限制
- 打包版仅 Windows;macOS / Linux 请用源码方式运行
- 依赖站点实时接口与风控策略,上游改版可能导致功能临时失效(尤其
__zp_stoken__挑战与登录滑块流程) - 抓取刻意压到人手滚动的量级,没有并发和高速抓取,请勿调高频率压接口
- 未做自动更新,新版本需手动下载替换
🐞 出问题怎么办
把 data\logs\boss.log 发到 Issues 里。界面上的报错是翻译过的「人话」,StokenError 原文、上游 HTTP 响应体、requests 栈信息这类技术细节只进日志,不在界面上摆出来。
⚖️ 免责声明
本项目仅供学习与技术研究使用。使用即表示你同意:遵守 BOSS 直聘用户协议与相关法律法规,账号行为自负;不得用于批量骚扰、数据倒卖或任何商业牟利用途;请控制抓取频率,不要对目标站点造成压力。因使用本项目导致的任何账号限制、封禁
或法律后果,作者不承担责任。若平台方认为本项目不妥,联系即下架。
License
MIT