内容
# Wanfang Skills for Claude Code
[English](#english) | [中文](#中文)
仿照 [cookjohn/cnki-skills](https://github.com/cookjohn/cnki-skills) 的结构,让 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 通过 Chrome DevTools MCP 操作 [万方数据](https://www.wanfangdata.com.cn) 的技能集。
> 万方官方还提供了开放 API ([wanfangdata/wfdata-open-skills](https://github.com/wanfangdata/wfdata-open-skills))。如果你拿到了 `AppKey` + `APPCODE`、不需要 PDF 下载、也不在乎 Zotero 推送,那条路更稳;这个仓库覆盖 API 没开放的浏览器侧能力(机构 IP 走 IP 网关下载、目录浏览、引用导出等)。
---
<a id="中文"></a>
## 中文
### 前置要求
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI 已安装
- Chrome 浏览器(PDF 下载需在 Chrome 里手动登录或走机构 IP)
- [Zotero](https://www.zotero.org/) 桌面端(可选,用于导出)
- Python 3(可选,运行 Zotero 推送脚本)
### 技能列表
| 技能 | 功能 | 调用方式 |
|------|------|----------|
| `wanfang-search` | 关键词检索,返回结构化结果 | `/wanfang-search 人工智能` |
| `wanfang-advanced-search` | 高级检索:题名/作者/刊名/年份/资源类型 | `/wanfang-advanced-search 题名=深度学习 年份=2020-2025` |
| `wanfang-parse-results` | 重新解析当前结果页 | `/wanfang-parse-results` |
| `wanfang-navigate-pages` | 翻页与排序 | `/wanfang-navigate-pages next` |
| `wanfang-paper-detail` | 提取论文详细信息(摘要、关键词、基金等) | `/wanfang-paper-detail` |
| `wanfang-journal-search` | 按名称、ISSN、CN 号查找期刊 | `/wanfang-journal-search 计算机学报` |
| `wanfang-journal-index` | 查询期刊核心收录、影响因子 | `/wanfang-journal-index 计算机学报` |
| `wanfang-journal-toc` | 浏览期刊目录 | `/wanfang-journal-toc 计算机学报 2025 01` |
| `wanfang-download` | 下载论文 PDF/CAJ | `/wanfang-download` |
| `wanfang-export` | 推送到 Zotero 或输出 GB/T 7714 引用 | `/wanfang-export zotero` |
### 智能体
**`wanfang-researcher`** — 统一调度全部 10 个技能。检测到滑块/字符验证码会暂停并提示手动完成,支持"检索 → 筛选 → 导出到 Zotero"等复合工作流。
### 安装方法
#### 1. 安装 Chrome DevTools MCP 服务器(关键:必须加 `--browser-url`)
⚠️ **常见坑**:`chrome-devtools-mcp` 默认会自己 spawn 一个 Chrome 实例,**不会**用你已经打开的 Chrome。要让 MCP 接到你登录过万方的 Chrome,必须在 args 里加上 `--browser-url=http://127.0.0.1:9222`。
如果用 marketplace 插件方式安装(`claude-plugins-official/chrome-devtools-mcp`),需要手动改它的 `plugin.json`:
```json
// ~/.claude/plugins/cache/claude-plugins-official/chrome-devtools-mcp/<ver>/.claude-plugin/plugin.json
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@<ver>",
"--browser-url=http://127.0.0.1:9222"
]
}
}
}
```
如果用 `claude mcp add` 手工加,加 `--` 后面带上参数:
```bash
claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --browser-url=http://127.0.0.1:9222
```
改完后 **重启 Claude Code**(或 `/reload-plugins` 如果你的版本支持热重启 MCP)让新配置生效。
#### 2. 安装 Wanfang 技能
复制到 Claude Code 的全局技能目录:
```bash
# Windows PowerShell
git clone https://github.com/<your-fork>/wanfang-skills.git
Copy-Item -Recurse skills "$env:USERPROFILE\.claude\"
Copy-Item -Recurse agents "$env:USERPROFILE\.claude\"
```
或加到某个项目下:
```bash
git clone https://github.com/<your-fork>/wanfang-skills.git /tmp/wanfang-skills
cp -r /tmp/wanfang-skills/skills/ your-project/.claude/skills/
cp -r /tmp/wanfang-skills/agents/ your-project/.claude/agents/
```
#### 3. 启动 Chrome 远程调试
```bash
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222
```
#### 4. 启动 Claude Code
```bash
claude
```
技能和智能体会自动加载。输入 `/wanfang-search 深度学习` 验证是否正常。
### 工作原理
所有技能通过 Chrome DevTools MCP 的 `evaluate_script` 异步执行 JavaScript:
- **单次异步脚本** — 取代多步骤的 snapshot → click → wait_for 模式
- **直接 URL 导航优于点击** — 万方详情链接经常打开新标签页,直接 `navigate_page` 省 2-3 次工具调用
- **批量导出** — 从结果页一次抓多条记录,无需逐篇进详情页
- **验证码感知** — 检测到 Geetest 滑块或字符验证码时自动暂停并提示
### Selectors 验证状态
**全部 10 个 SKILL.md 的 selectors 均已 2026-06-16 在 `wanfangdata.com.cn` 真实页面上实测通过**(测试环境为已登录的机构 IP 会话)。每个 SKILL.md 顶部都带 `selectors-verified: 2026-06-16` 标记,末尾的 **Verified selectors** 表列出实测选择器、坑点、resource-type 变种。
| 技能 | 验证目标 URL | 关键坑点 |
|------|--------------|----------|
| wanfang-search | `s.wanfangdata.com.cn/paper?q=` | title 不是 `<a>`;`.authors` 类同时承载作者和日期;`.stat-item.download` 重复 |
| wanfang-paper-detail | `d.wanfangdata.com.cn/periodical/{id}` | 关键词 innerText 无分隔符,必须读 `.itemKeyword > a`;`.publish.list` 是重复块 |
| wanfang-journal-search | `s.wanfangdata.com.cn/magazine?q=` | 真实路由是 `/magazine` 而非 `/perio` 或 `/journal` |
| wanfang-journal-index | `c.wanfangdata.com.cn/magazine/{id}` | `.value.title` attr 保全文;h1 与 tag 粘连需反向剥离 |
| wanfang-journal-toc | `.../{id}?publishYear=&issueNum=` | paper id 不在 DOM,按 `{mag}{yyyy}{mm}{seq:03d}` 合成;section header 内联 |
| wanfang-export | `.export-page` 在线渲染 | 9 种格式同时展开,按内容前缀识别;推 Zotero 默认走 EndNote(BibTeX 主键有空格) |
| wanfang-download | `a.download.buttonItem[href]` | href 直接读,不用点击;URL 是 `oss.wanfangdata.com.cn/file/download/perio_{id}.aspx` |
| wanfang-advanced-search | `?q=Field:value AND ...` | URL 接 Solr/PQ 表达式,9 种 resource type 各有路径 |
| wanfang-parse-results | inherited from search | 按 `location.pathname` 分流 |
| wanfang-navigate-pages | `?p=N&o={field,order}` | sort 是 URL-encoded JSON;只有 3 种排序(无"下载" sort) |
如果 Wanfang 改版导致 selectors 失效,每个 SKILL.md 末尾的表格清单可作为修订的最小诊断范围。修订后请同步更新 frontmatter 的 `selectors-verified:` 日期,并提个 PR。
### 项目结构
```
skills/
├── wanfang-search/SKILL.md # 关键词检索
├── wanfang-advanced-search/SKILL.md # 高级检索
├── wanfang-parse-results/SKILL.md # 解析当前结果页
├── wanfang-navigate-pages/SKILL.md # 翻页与排序
├── wanfang-paper-detail/SKILL.md # 论文详情提取
├── wanfang-journal-search/SKILL.md # 期刊查找
├── wanfang-journal-index/SKILL.md # 期刊收录与影响因子
├── wanfang-journal-toc/SKILL.md # 期刊目录浏览
├── wanfang-download/SKILL.md # PDF/CAJ 下载
└── wanfang-export/ # 引用导出 / Zotero
├── SKILL.md
└── scripts/
└── push_to_zotero.py # Zotero Connector API 客户端
agents/
└── wanfang-researcher.md # 编排全部 10 个技能
```
---
<a id="english"></a>
## English
Claude Code skills that let Claude interact with [Wanfang Data (万方数据)](https://www.wanfangdata.com.cn) through Chrome DevTools MCP, modeled after [cookjohn/cnki-skills](https://github.com/cookjohn/cnki-skills).
> If you have Wanfang open-platform credentials (`AppKey` + `APPCODE`) and don't need PDF download or Zotero push, the official [wfdata-open-skills](https://github.com/wanfangdata/wfdata-open-skills) is the more stable path. This repo covers the browser-side capabilities the official API doesn't expose.
### Prerequisites
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI installed
- Chrome browser (manual login or institutional IP for downloads)
- [Zotero](https://www.zotero.org/) desktop app (optional, for export)
- Python 3 (optional, for Zotero push script)
### Skills
| Skill | Description | Invocation |
|-------|-------------|------------|
| `wanfang-search` | Keyword search with structured result extraction | `/wanfang-search 人工智能` |
| `wanfang-advanced-search` | Filtered search: title, author, journal, year, resource type | `/wanfang-advanced-search 题名=深度学习 年份=2020-2025` |
| `wanfang-parse-results` | Re-parse current results page | `/wanfang-parse-results` |
| `wanfang-navigate-pages` | Pagination & sort | `/wanfang-navigate-pages next` |
| `wanfang-paper-detail` | Extract full paper metadata | `/wanfang-paper-detail` |
| `wanfang-journal-search` | Find journals by name, ISSN, or CN | `/wanfang-journal-search 计算机学报` |
| `wanfang-journal-index` | Check journal core indexing & impact factor | `/wanfang-journal-index 计算机学报` |
| `wanfang-journal-toc` | Browse issue table of contents | `/wanfang-journal-toc 计算机学报 2025 01` |
| `wanfang-download` | Download paper PDF/CAJ | `/wanfang-download` |
| `wanfang-export` | Push to Zotero or output GB/T 7714 citation | `/wanfang-export zotero` |
### Agent
**`wanfang-researcher`** — orchestrates all 10 skills. Detects Geetest slider / character captchas (pauses for manual resolution), manages tabs, and runs multi-step workflows like "search → filter → export to Zotero".
### Selectors verification
All 10 SKILL.md files were live-tested on `wanfangdata.com.cn` on 2026-06-16 from a logged-in institutional-IP session. Each SKILL.md carries a `selectors-verified: 2026-06-16` header and a `Verified selectors` table at the end with the actual selectors used, gotchas, and resource-type variants.
If Wanfang's frontend changes and selectors break, the per-skill table is your minimum diagnostic scope. After fixing, bump the `selectors-verified:` date in the frontmatter and send a PR.
---
## License
MIT