# Search

> 用确认后的关键词，经 CDP 驱动真实 Chrome 检索 Google Scholar，输出结构化结果。

- Skill: `cookiemoonpie/search` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cookiemoonpie/search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cookiemoonpie/search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: CookieMoonPie (https://skillmd.com/u/cookiemoonpie)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cookiemoonpie/search

---


# 检索（CDP 通道）

用确认后的关键词跑 `scripts/cdp_search.py`。

## 前置

- Chrome 已按 `docs/SETUP.md` 以持久 profile + 调试端口 9222 启动。
- `websocket-client` 已装（`python -c "import websocket"` 通过即可）。

## 期刊目录（可选）

- 若用户给定了期刊目录（如"只检索 TR-B / TS / EJOR"），把期刊名写进 `journals.txt`（一行一个），检索时加 `--journals journals.txt`，脚本会用 Scholar 的 `source:"期刊名"` 操作符**限定在目录内各期刊**。
- 若用户没给目录，**默认检索全部期刊**（不加 `--journals`）。
- 注意：`source:` 是模糊子串匹配，个别结果可能串刊，manage 步会再按期刊名复核。

## 时间范围（可选）

- 若用户给定了时间范围（如"近三年""2023 至今"），检索时加 `--from-year 2023 --to-year 2026`（对应 Scholar 的 `as_ylo`/`as_yhi`，可只给一端）。
- 若没给，**默认检索全部文献**（不加年份参数）。

## 步骤

1. 把用户确认后的检索式写进 `queries.json`（字符串数组，或 `[{"q":"...","pages":3}]` 指定每条页数）。
2. （若有期刊目录）把期刊名写进 `journals.txt`。
3. 运行：
   ```bash
   # 无目录、无年份（全部期刊、全部文献）
   python scripts/cdp_search.py --queries queries.json --out results.jsonl --pages 2
   # 限定目录 + 限定年份
   python scripts/cdp_search.py --queries queries.json --out results.jsonl --pages 2 \
       --journals journals.txt --from-year 2023 --to-year 2026
   ```
   - `--pages N`：每条检索式翻几页（每页 10 条）；默认 2，总请求数 = 检索式数 × 期刊数 × N（目录大时请减少检索式或页数）。
   - `--throttle S`：相邻请求间隔秒数，默认 8（太密会触发验证码）。
   - `--profile DIR` / `--port 9222`：对应 SETUP.md 里启动 Chrome 的参数。
4. 若脚本打印 `[captcha]`：让用户在 Chrome 窗口里手动过验证码，脚本会自动继续等待（默认最多 240s）。
5. 脚本输出 `results.jsonl`，每行一条：`title / meta / citedby / snippet / href / cid / query / page / journal`。

## 注意

- 若 Chrome 没启动，脚本会报错并提示先按 SETUP.md 启动。
- 检索式之间脚本自动去重（按 Scholar 的 cluster id）。

