下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/koseninfo--boss-job-poster.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @koseninfo/boss-job-poster。自动将用户提供的 JD 解析为职位字段,并通过 RPA(CDP 操控本地 Edge)
阅读全文 (展开查看完整说明)
概述
BOSS直聘岗位自动发布器(人工登录 + Cookie 持久化版)
核心架构
- JD 解析(由 WorkBuddy 完成):用户提供 JD(文本或文件),Agent 提取
职位名称 / 职位描述 / 职位类型 / 是否驻外 / 经验要求 / 最低学历 / 薪资范围 /工作地址 8 个字段,并归一化到 BOSS 下拉枚举(见下文「JD 解析指南」)。
- RPA 填充(由脚本完成):
boss_post_cdp.py启动 Edge(调试端口 9222),
登录 BOSS 企业端(第一次人工登录,Cookie 持久化),进入「职位管理 → 发布职位」表单,按标签关键字逐项定位控件并填充,最后点击发布并检测发布结果。
- 安全门禁:仅当真正登录成功且表单出现后才填充/发布;未登录绝不操作。
- 结果落盘:结束写入
~/.zhipin_job_poster/completion.json,由对话层汇报。
⚠️ BOSS 专属说明(务必先读):BOSS 直聘 DOM 改版频繁。脚本中所有 JS 选择器常量
见
scripts/boss_post_cdp.py顶部与references/job_form_selectors.md(2026-08 实测,已验证可用)。改版后通常只需调整这些字符串常量,流程逻辑(
fill_all/publish)无需改动。
⚠️ 2026-08 实测关键坑(踩过,已修复在脚本内)
- 职位类型「推荐职位」对话框陷阱:点「职位类型」输入框前必须先于职位名称/描述填写。
若已先填了名称/描述,点击会弹出 job-recommend-position-select-dialog(推荐职位)而非职类树.position-selecter,导致无法选职类。fill_all 已按「薪资 → 职类 → 名称 → 描述」顺序规避。
- 薪资是动态表单:设职类后「薪资范围」会变成可选的「薪资详情」,无法再强制填。故**薪资必须
在职类之前填**(_fill_salary 先 idx=0 最低、再 idx=1 最高)。
- 发布按钮被 DIV 包裹:真实按钮是
BUTTON.btn-sure-v2(文本「保存并发布」),被
DIV.btns.btn-publish 包裹;朴素选择器会命中 DIV,坐标点击静默失败。PUBLISH_COORD_JS已优先取 <button>,并对含混结果用 PUBLISH_CLICK_JS 做 JS .click() 兜底。
- Windows 路径坑:
--job-json必须传带盘符的C:/Users/...,勿用/c/Users/...(原生
Python 会误解为 C:c...)。
WorkBuddy 对话层执行流程
执行顺序(必须):Phase 1 解析 JD → Phase 2 展示并确认字段 → Phase 3 写 JSON
→ Phase 4 运行脚本(内部含登录+填充+发布)→ Phase 5 读 completion.json 汇报。
Phase 1:解析 JD
用户提供 JD 后,按「JD 解析指南」提取并归一化 8 个字段。若 JD 以文件形式给出(.txt/.md/.docx),先读取其内容再解析。解析不确定的枚举字段(如经验/学历/薪资),优先采用 JD 中明示的值;缺失时留空(脚本会跳过空值并在汇报中标注),不要臆造。
Phase 2:展示并确认字段
用 AskUserQuestion 或对话内表格向用户展示解析结果,重点确认 4 个下拉枚举(职位类型 / 经验要求 / 最低学历 / 薪资范围)是否贴合 JD,以及「是否驻外」是否需勾选。用户确认或修正后再继续。
Phase 3:写入职位 JSON
将确认后的字段写入一个临时 JSON(例如工作区 job_post.json),结构同assets/job_fields_template.json:
{
"job_title": "Java开发工程师",
"job_desc": "(岗位职责/任职要求/福利,分条)",
"job_type": "全职",
"abroad": false,
"experience": "3-5年",
"education": "本科",
"salary": "15-20K",
"address": "北京市朝阳区建国路88号SOHO现代城A座12层"
}路径用带盘符的 Windows 风格(
C:/Users/...),勿用 git-bash 风格/c/...,否则原生 Python 会误解路径。
Phase 4:运行发布脚本
首次运行建议后台运行(run_in_background),因人工登录会阻塞等待:
cd <skill_dir>/scripts && python boss_post_cdp.py --job-json "C:/Users/.../job_post.json" --login-timeout 600python:使用 WorkBuddy 管理的 Python 解释器(原生 Windows Python)。- 必须用带盘符的 Windows 路径作
--job-json参数(如C:/Users/<你的用户名>/.../job_post.json),
勿用 /c/Users/...,否则原生 Python 会报「文件未找到」。
- 首次运行脚本自动
pip install依赖(aiohttp / numpy / Pillow),并自动启动 Edge(调试端口 9222)。 - 第一次:脚本打开 BOSS 企业登录页,用户在 Edge 中完成登录(滑块/扫码均可),
成功后脚本自动保存 Cookie;之后运行自动登录(Cookie 存于 ~/.zhipin_job_poster/cookies.json)。
- 演练/核对:加
--no-publish仅填充不点击发布。 - 完全重置:
boss_post_cdp.py --reset(清 Cookie/配置/Edge profile)。
Phase 5:读取结果并汇报
脚本退出后读取 ~/.zhipin_job_poster/completion.json:
{"completed": true, "login_ok": true, "navigated": true,
"fields_filled": {"salary":"min:picked:40k max:picked:50k",
"job_type":"category:销售经理/主管",
"job_title":"filled:资深销售经理/大客户总监",
"job_desc":"filled:【岗位职责】...",
"recruit_type":"社招全职", "abroad":"境内岗位",
"experience":"picked:5-10年", "education":"picked:本科",
"address":"addr_selected"},
"publish_clicked": true, "publish_success": true,
"job_title": "资深销售经理/大客户总监",
"message": "岗位已出现在职位管理列表(视为发布成功)"}completed == true 时弹「✅ 职位发布成功」并附字段填充明细;completed == false时弹「❌ 任务未完成」并说明原因(未登录 / 表单未出现 / 发布被 BOSS 校验拦截)。若 publish_success == false 但 navigated == true,提示用户到「职位管理」人工核对。
JD 解析指南(8 字段 + 枚举归一化)
| 字段 | JSON key | 解析要点 | 枚举/格式 |
|---|---|---|---|
| 职位名称 | job_title | 取 JD 标题或首行岗位名 | 自由文本 |
| 职位描述 | job_desc | 合并「职责 + 要求 + 福利」为分条文本 | 自由文本 |
| 职位类型 | job_type | 招聘类型:全职/兼职/实习等(注意:这是「招聘类型」,不是三级「职类树」) | 全职/兼职/实习/临时/劳务派遣/其他 |
| 是否驻外 | abroad | JD 含「驻外/外派/出差常驻」→ true | 布尔;未提及则忽略该字段 |
| 经验要求 | experience | 折算为区间 | 经验不限/应届生/1年以内/1-3年/3-5年/5-10年/10年以上 |
| 最低学历 | education | 取最低门槛 | 学历不限/初中及以下/中专/中技/高中/大专/本科/硕士/博士 |
| 薪资范围 | salary | 解析「X-YK」为数字区间,脚本转成 Xk/Yk 选下拉 | 形如 40-50K(脚本取数字 40/50 → 40k/50k,选项文本为小写 k) |
| 工作地址 | address | 详细地址(门牌号级);若 BOSS 未保存该精确地址,会退选同城市同区已认证地址 | 自由文本 |
| 城市 / 区 | city / district | 工作地址弹窗中按城市+区过滤已认证地址 | 如 深圳 / 南山区 |
⚠️ 职类(三级树,如 销售/销售管理/销售经理-主管)与「招聘类型」(全职/兼职)是两回事。
当前脚本把职类硬编码为
CATEGORY_PATH、招聘类型固定社招全职、驻外固定境内岗位,面向「销售类社招全职」岗位。通用化改造见
references/job_form_selectors.md§8。枚举完整取值与动态薪资细节见该文件。脚本对下拉选项做包含/相等模糊匹配。
可用参数(boss_post_cdp.py)
| 参数 | 说明 |
|---|---|
--job-json PATH | 解析好的职位字段 JSON 文件(必填) |
--non-interactive | 非交互模式(WorkBuddy 中必须使用) |
--no-publish | 仅填充表单、不点击发布(演练/核对) |
--no-auto-edge | 不自动管理 Edge(已手动以调试模式启动时用) |
--login-timeout SEC | 人工登录等待超时(秒),默认 300 |
--reset | 重置所有状态到首次使用(清 Cookie/配置/Edge profile) |
目录结构
boss-job-poster/
├── SKILL.md # 本文件
├── scripts/
│ ├── boss_post_cdp.py # 核心 CDP 自动化(登录+导航+填充+发布+结果)
│ ├── config_manager.py # 配置/ Cookie 持久化(~/.zhipin_job_poster/)
│ └── anti_detect.py # 反检测脚本(可选、非致命,复制自 boss-resume-downloader)
├── references/
│ └── job_form_selectors.md # BOSS 发布表单选择器与枚举参考(2026-08 实测)
└── assets/
└── job_fields_template.json # 8 字段 JSON 模板故障排除
CDP 连接失败
- 确保 Edge 已关闭:
taskkill /F /IM msedge.exe - 重新运行
boss_post_cdp.py(自动以调试模式启动 Edge) - 浏览器访问
http://127.0.0.1:9222/json/version验证
登录超时 / 未进入已登录态
- 人工登录务必在弹出的 Edge 窗口中完成(含滑块/扫码),真正进入招聘者后台。
- 等待超时(默认 5 分钟)脚本退出
completed=false,重跑即可(Cookie 通常已保存)。 - Cookie 失效:删除
~/.zhipin_job_poster/cookies.json后重跑,重新走人工登录。
未检测到发布表单(navigated=false)
- 首要排查:
JOB_MANAGE_URL与发布页路径是否随版本变化。先在浏览器手动走
「职位管理 → 发布职位」,把真实 URL 抄下替换 boss_post_cdp.py 的 JOB_MANAGE_URL(2026-08 实测为 https://www.zhipin.com/web/chat/job/list;旧 /web/boss/job/ 会重定向)。
- 表单入口:脚本用
PUBLISH_BTN_COORD_JS在job_v2/listiframe 内定位.publish-btn
并坐标点击。若按钮 class 改了,改这个常量即可。
- 用 F12 核对表单行标签是否含
职位名称/职位类型/经验/学历/薪资/工作地址/职位描述,
FORM_READY_JS 需至少命中其一(input[placeholder*="职位名称"] / .publish-edit-form-row / .btn-publish)。
某字段填充失败(fields_filled 显示 no_row / no_uiselect / no_opt / no_leaf / no_radio)
- 多半是选择器与当前页面不符:用 F12 核对
references/job_form_selectors.md中
的关键字,按实际 class/文本修正 boss_post_cdp.py 顶部的 *_JS 常量:
- 文本:
SET_TEXT_JS;下拉:OPEN_UISELECT_JS/OPEN_UISELECT_INDEX_JS+UISELECT_OPTION_COORD_JS; - 职类树:
OPEN_POS_MODAL_JS/CLICK_POS_TEXT_JS/POS_LEAF_COORD_JS; - 地址:
OPEN_ADDR_MODAL_JS/ADDR_PICK_RADIO_COORD_JS;发布:PUBLISH_COORD_JS/PUBLISH_CLICK_JS。 - 职类/地址弹窗是父文档级 modal(
.position-selecter/.boss-dialog.job-addre),
坐标在父文档 viewport 直接取;若误当作 iframe 内坐标处理会点偏。
- 顺序问题:确认「薪资先于职类、职类先于名称/描述」(见 SKILL.md 顶部关键坑)。
发布被 BOSS 校验拦截(publish_success=false)
completion.json的message会带回 BOSS 的 toast 文本(如「请完善必填项」)。- 常见原因:城市未选、薪资/经验/学历等必填项未命中下拉、地址不够详细(需门牌号级)。
- 脚本不会因单个字段失败而崩溃,会如实记录每个字段结果,便于定位。
⚠️ 触发 BOSS 风控
- 症状:列表/表单不渲染、自动登录后很快掉线。
- 处理:关闭调试 Edge(
taskkill /F /IM msedge.exe),删除 `~/.zhipin_job_poster/
cookies.json 与 edge_profile/` 目录,重跑走人工登录一次即可恢复。
与 boss-resume-downloader 共用端口冲突
- 两者都硬编码调试端口 9222。若之前运行过简历下载器且 Edge 仍开着,先关掉它
再运行本技能,避免抢占同一浏览器实例。