Agent skill · Audited from source
boss-zhipin-scraper
skill · eatmoreduck/boss-zhipin-scraperMIT licenceAudited 25 Oct 2026 · source 12e625b41d98
Is it safe? With care — CAUTION, grade B (89/100). We read this skill's source at commit 12e625b41d98 and observed filesystem and network access and no hard-coded secrets. The audit raised 8 findings, 0 critical or high. What it does: Scrape BOSS直聘 (job listing site) via Chrome CDP. Searches jobs by keyword/city/filters, fetches JD details, outputs structured JSON/CSV with plaintext salary, and can summarize scraped results into a job-market prompt.…
Cite
Cite this page
ModelsAtlas. “boss-zhipin-scraper (eatmoreduck/boss-zhipin-scraper)”. Retrieved 25 Oct 2026. https://modelsatlas.com/skills/eatmoreduck/boss-zhipin-scraper
Trust audit
Audit 0.4.1 · source read 25 Oct 2026
CAUTION means the audit found things worth knowing before you trust this skill. Grade B is shared by 13,985 of 14,816 audited skills.
What the source does
- FilesystemDeclared2 observations
- NetworkDeclared8 observations
- ShellNone observedNo commands run in the source
- DependenciesNot pinnedSome versions float
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 1 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | WARN | 7 |
L2 Instructions | Prompt injection, authority framing, hidden directives | PASS | 0 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (8)
MEDIUMNetwork egressnet.raw_ip · scripts/boss_cdp_raw.py:373
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=10)- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · scripts/boss_cdp_raw.py:2462
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=5)- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · scripts/boss_cdp_raw.py:2548
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=2)- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInsecure cryptocrypto.weak_hash · scripts/boss_cdp_raw.py:1954
j['job_id'] = hashlib.md5(key.encode()).hexdigest()[:16]
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · .github/ISSUE_TEMPLATE/question.yml:9
有问题?先看看 [README](../../README.md) 和 [常见问题](../../README.md#常见问题) 是否已有答案。
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · scripts/boss_cdp_raw.py:601
body = base64.b64decode(body).decode("utf-8", errors="replace")- Why
- No further detail recorded for this rule.
- Fix
- —
LOWSupply chainsupply.unpinned · requirements.txt
websocket-client, requests
- Why
- 2 requirement(s) not pinned with ==
- Fix
- pin exact versions
INFOInventory / provenanceinv.oversize · cover.png
cover.png
- Why
- 1863502 bytes not read
- Fix
- —
Audit 0.4.1 · source sha 12e625b41d98 · 25 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publishereatmoreduck GitHub userOwner of the repository this skill is read from
- Source foldereatmoreduck/boss-zhipin-scraperThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdict12e625b41d98A new audit runs when the source changes
- Repository statusNot archivedPushed today
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Scrape BOSS直聘 (job listing site) via Chrome CDP. Searches jobs by keyword/city/filters, fetches JD details, outputs structured JSON/CSV with plaintext salary, and can summarize scraped results into a job-market prompt.…
---
name: boss-zhipin-scraper
description: "Scrape BOSS直聘 (job listing site) via Chrome CDP. Searches jobs by keyword/city/filters, fetches JD details, outputs structured JSON/CSV with plaintext salary, and can summarize scraped results into a job-market prompt. Optional --company locally filters results by company name (boss_name substring) with no extra request. Use when user wants to search/analyze jobs on BOSS直聘 or zhipin.com."
version: 2.3.1
author: eatmoreduck
license: MIT
platforms: [macos, linux]
metadata:
hermes:
tags: [scraper, jobs, career, cdp, chrome, zhipin, boss直聘]
---
# BOSS直聘职位抓取工具 v2.3
通过 Chrome CDP 协议抓取 BOSS直聘 (zhipin.com) 职位数据,输出结构化 JSON/CSV(含明文薪资),并可对已抓取结果生成聚合摘要和求职材料优化提示词。
## 前置条件
- Chrome 浏览器已安装
- Python 3.10+
- 用户已登录 zhipin.com(或愿意手动登录)
## 脚本位置
本 skill 的脚本在 skill 目录下:
- `scripts/boss_cdp_raw.py`:抓取主脚本
- `scripts/job_summary.py`:抓取后摘要和提示词脚本
**运行任何命令前,必须先确定脚本的绝对路径。**
用以下方式找到脚本(macOS 自带的 `readlink` 不支持 `-f`,用 Python 解析路径更通用):
```bash
# 方法 1:已知 skill 安装目录(推荐,macOS/Linux 通用)
SKILL_DIR="$(python3 -c "import os,sys;print(os.path.dirname(os.path.realpath(sys.argv[1])))" "$0")"
SCRIPT_PATH="$SKILL_DIR/scripts/boss_cdp_raw.py"
SUMMARY_PATH="$SKILL_DIR/scripts/job_summary.py"
# 方法 2:搜索 hermes skills 目录
SCRIPT_PATH=$(find ~/.hermes/skills -name "boss_cdp_raw.py" -type f 2>/dev/null | head -1)
SUMMARY_PATH=$(find ~/.hermes/skills -name "job_summary.py" -type f 2>/dev/null | head -1)
```
如果找不到脚本,说明 skill 未正确安装,需要重新安装。
## 依赖安装(首次使用必须执行)
脚本依赖 `websocket-client` 和 `requests`。在用户项目的 venv 中安装:
```bash
uv add websocket-client requests
# 或
pip install websocket-client requests
```
## 自动化流程
当用户要求搜索/抓取 BOSS直聘 职位时,**严格按以下顺序执行**:
### 第 1 步:检查环境
```bash
python3 "$SCRIPT_PATH" --check --cdp-port 9222
```
检查三项:Python 依赖 → CDP 连通性 → 登录态。
- **全部通过** → 跳到第 3 步
- **CDP 不通** → 继续第 2 步
- **依赖缺失** → 先装依赖(见上方依赖安装),再重新 --check
- **未登录** → 告诉用户打开 Chrome 登录 zhipin.com,然后重新 --check
### 第 2 步:启动专用浏览器 CDP(仅在 --check CDP 不通时)
```bash
python3 "$SCRIPT_PATH" --setup-chrome --cdp-port 9222
```
这会自动完成:
1. 创建或复用持久隔离 Chrome profile
- `~/.boss-zhipin-scraper/chrome-profile`
2. 只关闭使用该隔离 profile 的旧 BOSS CDP Chrome,不关闭用户主 Chrome
3. 以 CDP 模式启动 Chrome(`--remote-debugging-port=9222`)
4. 等待 CDP 端口就绪(最多 30 秒)
5. 打开 BOSS 登录页并等待登录完成,直到搜索接口返回明文 `salaryDesc`
默认不复制主 Chrome 的 Cookie、密码、历史记录或扩展;首次启动和后续重复启动都只是创建或复用该专用 profile。首次使用时告诉用户:请在弹出的 BOSS 专用 Chrome 浏览器中访问 zhipin.com 并登录。脚本会等待登录完成并确认接口能返回明文薪资。该专用 profile 是持久目录,机器重启后登录态仍保留,重复运行 `--setup-chrome` 不会清空它。
仅装 Microsoft Edge(未装 Chrome)的机器,可改用 Edge 启动(与 `--setup-chrome` 共用同一隔离 profile):
```bash
python3 "$SCRIPT_PATH" --setup-edge --cdp-port 9222
```
仅当用户明确要求从主浏览器手动导入 BOSS 登录态时,可使用:
```bash
python3 "$SCRIPT_PATH" --setup-chrome --copy-login-state --cdp-port 9222
```
`--copy-login-state` 在 `--setup-chrome` 下从主 Chrome 导入、在 `--setup-edge` 下从主 Edge 导入,每次运行都会覆盖隔离 profile 内对应的 Cookie 相关文件;日常启动不要加这个参数。它只复制 `Local State` 和 `Default/Cookies*`、`Default/Network/Cookies*` 这类 Cookie 数据库相关文件,不复制密码库或完整 profile。不要默认使用该参数,也不要告诉用户首次启动会自动导入主浏览器登录态。
等用户确认后,重新运行 `--check` 验证。
### 第 3 步:运行抓取
```bash
# 基础搜索
python3 "$SCRIPT_PATH" --keyword "关键词" --city 城市 --pages 3 --output ~/.boss-zhipin-scraper/job-result/jobs.json
# 带 CSV 输出
python3 "$SCRIPT_PATH" --keyword "关键词" --city 城市 --pages 3 --format csv --output ~/.boss-zhipin-scraper/job-result/jobs.json
# 带详情 + 分析报告
python3 "$SCRIPT_PATH" --keyword "关键词" --city 城市 --pages 3 --detail --max-details 8 --analysis --format csv --output ~/.boss-zhipin-scraper/job-result/jobs.json
# 抓取后摘要 + 求职材料优化提示词(默认读取最新抓取结果)
python3 "$SUMMARY_PATH" --top 15
# 真实浏览器/API smoke test(不写结果文件)
python3 "$SCRIPT_PATH" --smoke-test --cdp-port 9222
# 合并多次抓取(去重)
python3 "$SCRIPT_PATH" --keyword "关键词" --city 北京 --pages 3 --merge ~/.boss-zhipin-scraper/job-result/jobs.json --output ~/.boss-zhipin-scraper/job-result/jobs_merged.json
# 按公司名本地过滤(boss_name 子串,不额外请求;多家用逗号分隔)
python3 "$SCRIPT_PATH" --keyword "关键词" --city 上海 --pages 3 --company "字节跳动,阿里巴巴" --analysis
# 对已有结果按公司做摘要
python3 "$SUMMARY_PATH" --company "字节跳动,SHEIN" --top 15
```
默认输出到 `~/.boss-zhipin-scraper/job-result/` 目录,`--format csv` 会给列表和详情都额外生成 `.csv` 文件。`--smoke-test` 只验证真实 Chrome/CDP 能否拿到 API 明文薪资,不写结果文件。
抓取结束后专用 Chrome 不会自动关闭(默认保留登录态,方便连跑多条)。确认不再使用时收尾:
```bash
# 关闭 BOSS 专用 Chrome(只关隔离 profile,不碰主 Chrome)
python3 "$SCRIPT_PATH" --stop-chrome --cdp-port 9222
# 或:让本次抓取正常结束就自动关闭
python3 "$SCRIPT_PATH" --keyword "关键词" --city 城市 --pages 3 --close-chrome
```
`--stop-chrome` 按 `--user-data-dir` 精准匹配,绝不按端口/进程名 kill,因此不会误伤用户主 Chrome。`--close-chrome` 默认关闭,且只在抓取成功路径触发,异常/登录失败不关闭以保留登录态。
摘要脚本只读取 `boss_jobs_*.json` 和 `boss_details_*.json`,不读取本地简历文件,不引入 PDF 依赖,也不给个人与岗位做分数判断。需要指定文件时使用:
```bash
python3 "$SUMMARY_PATH" \
--input ~/.boss-zhipin-scraper/job-result/boss_jobs_20260625_1200.json \
--details ~/.boss-zhipin-scraper/job-result/boss_details_20260625_1200.json \
--top 15
```
## 参数速查
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--keyword` | AI Agent | 搜索关键词 |
| `--city` | 上海 | 城市名(中文)或 9 位代码;没传时默认上海,无法识别的城市名会报错退出 |
| `--company` | - | 按公司名本地过滤(`boss_name` 子串,逗号或顿号分隔多家,不区分大小写)。不改搜索请求;过滤在 `--merge` 之后、详情与分析之前。`is_new` 自动基准同时要求公司过滤条件一致。`job_summary.py` 接受同一参数 |
| `--pages` | 3 | 抓取页数(上限 10,每页 30 条) |
| `--output` | ~/.boss-zhipin-scraper/job-result/... | 列表输出路径 |
| `--detail-output` | ~/.boss-zhipin-scraper/job-result/... | 详情输出路径 |
| `--format` | json | 输出格式: json / csv;csv 同时导出列表和详情 CSV |
| `--detail` | 开启(默认) | 抓取详情页 JD |
| `--no-detail` | - | 不抓取详情页(关闭默认行为) |
| `--max-details` | 全部 | 详情页数量上限 |
| `--analysis` | 关闭 | 输出分析报告 |
| `--allow-dom-fallback` | 关闭 | API 无数据时允许降级 DOM 提取;默认关闭,薪资可能不可信 |
| `--merge FILE` | - | 合并已有 JSON(按 job_id 去重) |
| `--cdp-port` | 9222 | CDP 端口 |
| `--setup-chrome` | 关闭 | 一键启动 Chrome CDP(持久隔离 profile) |
| `--setup-edge` | 关闭 | 一键启动 Microsoft Edge CDP(与 `--setup-chrome` 共用隔离 profile) |
| `--browser` | chrome | 搭配 `--setup-chrome` 选择浏览器(chrome/edge);与 `--setup-edge` 显式冲突时以 `--setup-edge` 为准并提示 |
| `--copy-login-state` | 关闭 | 手动导入主浏览器(`--setup-chrome` 取主Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit 12e625b
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git pip install -r requirements.txt # 或 uv sync pip install -r requirements.txt # or: uv sync npx skills add eatmoreduck/boss-zhipin-scraper
git clone https://github.com/eatmoreduck/boss-zhipin-scraper git -C boss-zhipin-scraper checkout 12e625b41d98
Commands as the repository documents them: shown, never run by us. Our verdict covers commit 12e625b41d98 only.
Works in which agents?
What its own text says, not a test
| Agent | Status | More |
|---|---|---|
| Claude Code | Mentioned in its text, not tested | Skills for Claude Code · About Claude Code |
| Codex | Mentioned in its text, not tested | Skills for Codex · About Codex |
| Cursor | Mentioned in its text, not tested | Skills for Cursor · About Cursor |
| Gemini CLI | Mentioned in its text, not tested | Skills for Gemini CLI · About Gemini CLI |
| OpenClaw | Mentioned in its text, not tested | Skills for OpenClaw · About OpenClaw |
Audit history
Every audit, every source change
- !CAUTION B 89 / 100
first audit · source
12e625b41d98
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/eatmoreduck/boss-zhipin-scraper/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All automation skills →egonex-ai/understand-anything
Use when you need to generate an onboarding guide for new team members joining a project
egonex-ai/understand-anything
Use when you need a deep-dive explanation of a specific file, function, or module in the codebase
egonex-ai/understand-anything
Extract business domain knowledge from a codebase and generate an interactive domain flow graph. Works standalone (lightweight scan) or derives from an existing /understand knowledge graph.
egonex-ai/understand-anything
Launch the interactive web dashboard to visualize a codebase's knowledge graph
egonex-ai/understand-anything
Use when you need to ask questions about a codebase or understand code using a knowledge graph
Lum1104/Understand-Anything
Use when you need to ask questions about a codebase or understand code using a knowledge graph
Add this badge to your README
[](https://modelsatlas.com/skills/eatmoreduck/boss-zhipin-scraper/)
<a href="https://modelsatlas.com/skills/eatmoreduck/boss-zhipin-scraper/"><img src="https://modelsatlas.com/skills/eatmoreduck/boss-zhipin-scraper/badge.svg" alt="ModelsAtlas: CAUTION B"></a>
Questions about boss-zhipin-scraper
What does the boss-zhipin-scraper skill do?
Is boss-zhipin-scraper safe to install?
What can boss-zhipin-scraper access on my machine?
Which assistants does boss-zhipin-scraper work with?
How current is this page?
Sources
- github.com/eatmoreduck/boss-zhipin-scraper — the audited source at commit 12e625b41d98 and every finding aboveObserved · 25 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the boss-zhipin-scraper skill do?
- Is boss-zhipin-scraper safe to install?
- What can boss-zhipin-scraper access on my machine?