wps-doc-scraper — Claude Code skill: archive WPS and ProcessOn
This skill archives public WPS/KDocs documents and embedded ProcessOn mind maps as raw data, SVG or PNG, and Markdown. Useful when a link has to be saved without logging in.
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a claude-codeWhat wps-doc-scraper does
The skill handles kdocs.cn and wps.processon.com links. It identifies the URL type first: kdocs.cn/view/l/<share_id> goes through public link metadata, while ProcessOn pages yield file_id and group_id for the data API. Then scripts/wps_processon_extract.py downloads the API JSON, parses the embedded definition, and writes Markdown plus a manifest.
Visual documents keep their original artifact. A rendered SVG is saved whole as <title>-全画布.svg. When that SVG contains foreignObject, ImageMagick alone will mangle the text, so scripts/render_svg_tiles.py builds the PNG from square tiles through macOS Quick Look. That step is macOS-only.
Bundled references cover the ProcessOn API, browser-side SVG capture, and manifest fields. The rules are strict: no login, no saving into an account, no bypassing CAPTCHAs or permission walls. An HTTP 200 proves nothing on its own — payloads like 用户未登录 or an empty definition are treated as a login wall. Markdown here is a structural conversion, not a rewrite, and gaps get reported instead of smoothed over.
What it helps with
- save a public ProcessOn map as SVG and PNG
- pull the embedded
.pofdefinition into JSON - turn a KDocs document into Markdown without signing in
- tell a login wall apart from real page content
- build a capture manifest listing every artifact
Example prompts for the agent
- grab this kdocs.cn link and archive everything into ./archive
- download the map from wps.processon.com and convert it to Markdown
- render the SVG to PNG in tiles, the foreignObject text breaks
How to install wps-doc-scraper
1Skills CLI (Vercel)
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a claude-code2Manually: put the files in place
~/.claude/skills/wps-doc-scraper/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/wps-doc-scraper/
1Skills CLI (Vercel)
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a codex2Manually: put the files in place
.agents/skills/wps-doc-scraper/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a cursor2Manually: put the files in place
.cursor/skills/wps-doc-scraper/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install daymade/claude-code-skills wps-doc-scraper2Manually: put the files in place
.github/skills/wps-doc-scraper/SKILL.md1Skills CLI (Vercel)
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a gemini-cli2Platform CLI
gemini skills install https://github.com/daymade/claude-code-skills --path wps-doc-scraperManually: put the files in place
.devin/skills/wps-doc-scraper/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about wps-doc-scraper
How do I install wps-doc-scraper in Claude?
Run npx skills add daymade/claude-code-skills --skill wps-doc-scraper -a claude-code. The skill lands at ~/.claude/skills/wps-doc-scraper/SKILL.md.
What does wps-doc-scraper do?
It archives public WPS/KDocs documents and embedded ProcessOn maps: API JSON, the parsed definition, the original SVG or PNG, and Markdown. It never logs in or saves anything to an account.
What is needed for PNG rendering?
render_svg_tiles.py relies on macOS Quick Look, so the tiling step is built for macOS. For SVGs with foreignObject it is the way to get readable text in the image.
Source text
SKILL.md · MIT
---
name: wps-doc-scraper
description: Faithfully archive public WPS/KDocs/金山文档 links, especially embedded ProcessOn .pof mind maps and canvases, as raw source data, original SVG/PNG, and Markdown. Use when a user gives a kdocs.cn or wps.processon.com link and asks to scrape, save, download, 扒下来, 归档, or 转 Markdown without logging in or saving the document to an account.
---
# WPS Doc Scraper
## Overview
Archive WPS/KDocs public documents with source fidelity. Prefer unauthenticated data APIs, keep the raw payloads, capture the original visual artifact when the document is a canvas or mind map, and generate Markdown only as a structured representation of the source.
This is an extraction skill, not a writing skill. Do not use an LLM to rewrite, summarize, smooth, or infer missing document content unless the user explicitly asks for a separate analysis after the archive is complete.
## Workflow Decision Tree
1. Identify the URL type.
- `kdocs.cn/view/l/<share_id>` or `kdocs.cn/l/<share_id>`: read public link metadata first.
- `wps.processon.com/diagrams/view?...`: extract `file_id` and `group_id`, then use the ProcessOn data API.
- `wps.processon.com/wpsapi/diagrams/view/api?...`: treat as the source API directly.
- Other WPS/KDocs pages: collect public metadata, try official public export/download only when available, then use browser DOM capture as a fallback.
2. For ProcessOn `.pof` mind maps or canvases, run the API extractor:
```bash
python3 /path/to/wps-doc-scraper/scripts/wps_processon_extract.py \
--url "https://www.kdocs.cn/view/l/..." \
--output-dir "/path/to/archive-dir"
```
Expected outputs: `processon-api.json`, `processon-definition.json`, `capture-manifest.json`, and `<title>.md`.
3. Capture the original image.
- If the page exposes a rendered SVG, save the serialized full SVG as `<title>-全画布.svg`.
- If the SVG uses `foreignObject`, do not trust ImageMagick alone for text rendering. Use `scripts/render_svg_tiles.py` to make the PNG through macOS Quick Look square tiles.
```bash
python3 /path/to/wps-doc-scraper/scripts/render_svg_tiles.py \
--svg "/path/to/<title>-全画布.svg" \
--output "/path/to/<title>-全画布.png"
```
4. Validate the archive.
- Markdown is a structural conversion, not an editorial rewrite.
- The original image exists for visual documents.
- Raw JSON and manifest exist.
- No output text contains the Unicode replacement character `�`.
- Any failed or permission-limited path is recorded in the manifest or final response.
## Hard Rules
- Never log in, save to an account, copy into the user's cloud drive, or mutate the remote document unless the user explicitly requests it.
- Never bypass CAPTCHAs, paywalls, tenant restrictions, or permission walls. A public link that requires login is a hard boundary unless the user provides authorized access.
- Do not infer hidden nodes or missing text. Preserve what the API or rendered DOM actually exposes.
- HTTP 200 is not enough. Detect login-wall payloads such as `用户未登录`, empty definitions, and placeholder shells.
- Keep raw source artifacts before transformation: API JSON, parsed definition JSON, serialized SVG, screenshots or PNGs, and a capture manifest.
- For browser fallback, capture DOM/source data before screenshots when possible; screenshots alone are not a faithful text archive.
- Report extraction gaps plainly. Do not silently produce a polished Markdown file from partial data.
## Bundled Resources
### scripts/
- `wps_processon_extract.py`: deterministic extractor for public WPS/KDocs ProcessOn `.pof` mind maps. It resolves KDocs share metadata, downloads the ProcessOn data API JSON, parses the embedded definition, and writes Markdown plus a manifest.
- `render_svg_tiles.py`: macOS Quick Look based SVG-to-PNG renderer for full-canvas SVGs with `foreignObject` text. It renders square vertical tiles and stitches them into one PNG.
### references/
- `processon-mindmap-api.md`: endpoint pattern and payload shape for WPS-hosted ProcessOn files.
- `rendered-svg-capture.md`: browser-side process for extracting the rendered full-canvas SVG and producing a PNG.
- `capture-manifest.md`: minimum manifest fields and acceptance checks.
- `permission-and-failure-boundaries.md`: login walls, forbidden escalation, and failure reporting rules.
© daymade · MIT · daymade/claude-code-skills