Skip to content
holyxingPublic

About

基于浏览器扩展的自动化求职与简历投递助手,支持 BOSS 直聘、猎聘的岗位筛选、批量发起沟通与操作记录追踪,配套后台统计、历史记录管理及报表查看,简历发送由用户确认。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Auto JB

Auto JB · 本机求职工作台

English · 中文扩展使用说明 · English extension guide

License: MIT Stars

海投不难,难的是投完还记得投过谁。

Auto JB 把 BOSS 直聘和猎聘的岗位筛选、发起沟通、投递记录收进一个只在本机运行的工作台:扩展逐岗判断相关性、按岗位 ID 自动去重、每一步动作都记进本地账本;简历发送永远由你本人确认——它只负责点击并记录,不冒充送达。

它解决的是海投的三个真实麻烦:

  • 重复投递:同一个岗位隔几天又刷到,点没点过全靠记忆 → 按岗位 ID 建账本,点过的永不重复点,结果不确定的永不自动重试;
  • 逐岗判断耗人:几百个岗位逐个看"跟 AI 和产品相不相关" → 扩展逐岗读取标题与职责做初判(只看相关性,不按薪资、职级、经验误杀),你只做复核;
  • 复盘无据:投递散落在两个 App 里,投了什么、为什么投全无记录 → 每一次判断依据与动作都存进本机 PostgreSQL,工作台按平台只读回看。

核心能力:双平台共用一个 Chrome 扩展 · 逐岗相关性判断 · 点击间隔 5–120 秒可控 · 任务可暂停/恢复/续接 · 提供本地样本页,先在虚构岗位上验证全流程再上真实站点 · 数据不出本机。

⚠️ 真实站点上的点击会发出平台的默认招呼语,请先用本地样本页跑通流程;是否使用、如何使用由你自行把握平台规则与账号风险。

三分钟跑起来 → 见下方「启动」;扩展的安装与按钮说明见 扩展使用说明。


以同一个 Chrome 扩展适配 BOSS 与猎聘职位页,FastAPI + PostgreSQL 保存任务、判断依据与动作账本,React 工作台按招聘平台只读展示历史结果。默认入口分别为 BOSS 北京搜索页 和 猎聘北京搜索页;对岗位逐项判断是否同时与 AI 和产品相关,不按精确职位名称、职级、薪资或个人匹配分筛掉岗位。搜索页之外的相关岗位不在本轮发现范围内。

BOSS 以点击“立即沟通”、猎聘以打开职位明细后真实点击右上角“聊一聊”并观察页面响应为任务完成点,后续会话与简历由人工确认。 扩展记录“已点击·待人工确认”,不宣称站内消息送达或简历已发送。只读扫描仍可单独使用;历史结果未知的岗位不会自动重试。旧版猎聘 DOM 点击记录未核实实际沟通,保留去重并人工核对。安装和灰色按钮说明见 扩展使用说明,猎聘当前验收边界见 猎聘接入与验收状态。

启动

需要 Docker Compose、Node.js 22+、uv;Python 依赖由 uv 管理。

uv run python scripts/setup.py
npm ci
npm run build
docker compose up -d --build --wait

访问 http://127.0.0.1:17830 。在本机 .env 查看 AUTOJB_ADMIN_TOKEN,输入登录界面。初始化脚本生成随机凭证并限制文件权限,不打印令牌。不要提交、截图或分享 .env。

也可以用 scripts/auto-jb.sh start、restart 或 stop。stop 只暂停容器,不删除数据库卷。

扩展连接地址固定为 127.0.0.1:17830;不要单独修改 AUTOJB_PORT。PostgreSQL 仅在 Compose 网络内提供服务,不映射宿主端口。docker compose stop 暂停本项目,docker compose up -d --wait 重新启动;不要删除数据库卷,删除账本会失去历史去重依据。

连接扩展与验证本地流程

  1. Chrome 打开 chrome://extensions,启用开发者模式,加载本项目的 dist/extension 文件夹。也可在工作台「连接设置」下载扩展 ZIP 后解压安装。打包成商店上传文件、以及 Chrome 网上应用店的注册、素材和审核说明见 Chrome 网上应用店发布。
  2. 工作台生成配对码,在扩展弹窗输入。配对码有效期 5 分钟,仅使用一次;扩展只保存设备令牌,不能获得管理员权限。
  3. 打开本地验证页面 http://127.0.0.1:17830/fixture ,打开扩展弹窗并选择该受控页面。界面明确标记“本地样本,不联系招聘方”。
  4. 在扩展内点击「只读取与判断」,检查 8 个样本的分类与详情。5 个明确纳入、2 个排除、1 个待复核。
  5. 在样本左侧选中北京 AI 产品总监,打开扩展弹窗。若测试附件,勾选发送站内简历,填写样本文件名 AI产品经理.pdf。
  6. 点击扩展内的「验证当前岗位」。成功证据分别验证 CONTACT 和 RESUME_SEND。随后「开始自动沟通与投递」会自动处理剩余明确岗位,无逐岗位审批。
  7. 扩展内可暂停、恢复、停止和续接,关闭弹窗不停止已启动任务。可切换样本的“只打开聊天”“等待对方”“会话错误”行为,验证异常。执行中直接操作受控页面会接管并暂停。

本地 fixture 使用虚构岗位且不发送任何外部消息。真实 BOSS 页面上的受控验证按钮会产生真实沟通,必须由用户启动明确任务。

搜索入口与点击间隔配置

在扩展弹窗的「搜索入口与点击间隔」中填写两站搜索 URL,设置点击间隔,然后点「保存设置」。BOSS URL 必须是 https://www.zhipin.com/web/geek/jobs、city=101010100;猎聘 URL 必须是 https://www.liepin.com/zhaopin/、city=010&dq=010。两站都必须有非空搜索词,可改关键词,但岗位最终仍按“北京且与 AI 和产品工作相关”判断;不能通过 URL 加经验、学历、薪资、行业等额外筛选。点击间隔为 5–120 秒的整数,默认 5 秒,两站共用;每轮启动时冻结在服务端,跨批次以新一轮设置核对历史点击。运行中的任务须先暂停或停止,已领取动作结束后再改搜索入口;旧批次须重新核对并续接。保存后使用弹窗的「打开配置的…搜索页」并刷新招聘页,让扩展重新校准。详细步骤和禁用按钮说明见 扩展使用说明。

真实 BOSS 职位页

扩展使用 boss-click-v1。已配对但没有在线职位页时,可在弹窗点击“打开配置的 BOSS 北京搜索页”。职位页加载后,可选“只读取与判断”“点击当前岗位一次”或“开始自动点击立即沟通”。后两者会真实点击,可能发出默认招呼。扩展先核对左侧卡片和右侧详情的岗位 ID、标题、公司、北京地点与 AI 产品职责;仅对明确符合范围且按钮是“立即沟通”的岗位点击一次。点击后记为“已点击·待人工确认”;不自动发送简历。发现的新岗位按 ID 去重;页面失去前台时暂停。正常批次结束只说明当前可见列表已扫描或本轮达到预算,不代表全站职位已处理。

已在真实页面看到左侧卡片链接与右侧“查看更多信息”链接共用岗位 ID;页面列表由整页滚动加载。左侧公司可能是用人公司,右侧则显示猎头机构,因此两者分别保存。修复列表签名后,前台只读批次发现 47 个不同岗位,并在两轮滚动没有新岗位时结束;初判 16 个符合范围,复核技术岗位误判并升级规则后为 14 个。本轮结束不表示已遍历全站。

真实 BOSS 仍没有会话送达及附件发送的自动核验。此前授权的单岗位验证曾点击“立即沟通”一次;由于缺少点击前消息 ID 基线,原账本保留 UNKNOWN 外部结果,不重试该岗位。当前新范围只记录扩展实际点击,不发送简历;会话和简历由人工确认。

消息页现有只读探针:选中会话后,扩展显示已送达消息数量和“发简历”入口状态。现场未见稳定会话 ID DOM 属性,因此探针在左侧会话与右侧消息标题的招聘人、公司、职位三项完全一致且列表内唯一时,可生成匿名名片指纹作为候选会话身份。弹窗可“记录当前会话消息基线(只读)”,随后只展示新增送达消息候选;账号、会话名片、消息 ID 仅在扩展会话存储中保存哈希,不保存聊天正文。名片不一致、重复或消息基线不完整时该按钮禁用。已在真实已存在的目标会话上记录只读基线,弹窗正确显示“未观察到新己方消息”;“发简历”仍提示“双方回复后可用”。名片指纹不是平台会话 ID;即使以后观测到新增消息,探针仍未将会话绑定到具体岗位或发送命令,不能作为 CONTACT 成功或解除旧 UNKNOWN 的证据,也不会触发发送。

校准配置入口位于扩展弹窗的开发者选项。它接受有限 DOM selector 和 @attribute 字段,不接受 JavaScript。当前 BOSS 点击任务仅使用内置 boss-click-v1 配置;自定义配置不能绕过点击门禁。聊天结果仍没有稳定岗位/会话绑定与可靠发送时间,点击时间不能当作平台发送时间。

当前本地样本支持同文档聊天区域与返回按钮。真实 BOSS 的跨文档跳转、多窗口、原生简历选择器、多步发送确认、RESUME_REQUEST 尚未接入。桌面控制器也尚未实现,仅在实测确有缺口时增加。

状态、暂停与恢复

  • CHAT_OPENED 只是打开聊天;CONTACT_INITIATED 才是已核实发起沟通。
  • SENT 是已核实附件发送;与开聊分开记录和计数。
  • 暂停撤销后续指令;已领取的短租约未到期时显示“停止请求中”。已发生的发送不会被撤回。
  • 请求超时、账号改变或回执丢失时保留 UNKNOWN。真实 BOSS 点击任务对未决岗位隔离跳过,不自动重试;其他岗位仍可开启新一轮。附件发送仍不开放。
  • 工作台按 BOSS/猎聘筛选历史记录,在岗位、批次和执行记录上明确标平台,不按当前打开的标签页筛选。本地测试产生的猎聘记录标为“猎聘 · 本地样本”,不计入默认真实平台统计。工作台只读;任务操作与人工核验登记在扩展中完成。
  • 扩展保留全部未决动作供人工核对。明确无效果的动作经人工登记后标记失败;系统不会自动重发,人工登记也不会解锁发送简历能力。
  • 同岗位去重跨批次保留;共享会话已有已确认附件时不重复发。任务到预算表示本轮结束,不表示平台所有岗位已处理。
  • 重新加载页面或配置改变会握手并暂停。对话、页面、账号须重新核对;动态虚拟列表锚点恢复目前需要人工协助。

Jev

默认禁用,不需要模型密钥即可运行明确规则路径。不确定岗位保留待复核,不偷偷切换供应商。

需要 Jev 时,在本机 .env 配置 AUTOJB_USE_JEV=true、TYPESAFE_API_KEY 和 TYPESAFE_MODEL,再重新创建 app 容器。适配按官方 /v1/systemone 与 Choice 契约实现,只发送标题及职责片段;模型选择限定类别和原文编号,不生成代码或 selector。当前仅有模拟接口测试,没有实际凭证调用验证;启用会向 Typesafe 发送这些必要职位片段并产生相应服务费用。首版尚无模型费用限额控制,不适合无人值守长时调用。

参考:Typesafe API、Choice primitive。

开发验证

uv sync --locked
uv run ruff check backend scripts/setup.py
uv run pytest -q
npm test
npm run build
npx playwright install chromium
npm run test:e2e

E2E 需要本项目 Docker 服务在线及本地 fixture 启用。测试用独立临时 Chromium 用户目录,加载真实扩展,经过 HTTP API 和 PostgreSQL,不访问用户的 Chrome 个人资料,也不访问 BOSS。截图保存于 .runtime/screenshots;历史测试账号和动作保留在本地数据库便于审计。

  • backend/auto_jb/:契约、规则/Jev、数据库、状态机、认证与 API。
  • extension/src/:页面观察、目标核对、有限点击、设备通信与接管。
  • web/src/:按平台查看的只读工作台、历史记录与配对。
  • fixtures/:本地双栏页面及异常分支。
  • backend/tests/、tests/unit/、tests/e2e/:单元与集成验证。

数据库目前采用首版建表,没有生产升级迁移机制。不要将此初版直接用于多人共享或公网部署。详细聊天内容没有全量采集,运行状态与必要岗位证据存储在本机数据库;截图按需生成,自动清理界面尚未实现。

开源许可

本项目采用 MIT License。

About

基于浏览器扩展的自动化求职与简历投递助手,支持 BOSS 直聘、猎聘的岗位筛选、批量发起沟通与操作记录追踪,配套后台统计、历史记录管理及报表查看,简历发送由用户确认。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages