首页 / 全部技能 / 内容创作 / canghe-url-to-markdown
内容创作 · freestylefly/canghe-skills

canghe-url-to-markdown

Fetch any URL and convert to markdown using Chrome CDP. Supports two modes - auto-capture on page load, or wait for user signal (for pages requiring login). Use when user wants to save a webpage as markdown.

L4 高权限 · 分级授权与审计V1 已固定执行命令联网读写文件Dual-pass Audit
Author freestyleflyGitHub freestylefly/canghe-skills ↗License MIT(仓库根 LICENSE)Commit dd0bf35595
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

1实现原理 · 为什么它能做到

核心机制是驱动本机真实 Chrome(CDP)加载任意 URL,再把渲染后的 HTML 转成干净 markdown。

skills/canghe-url-to-markdown/SKILL.md
Fetches any URL via Chrome CDP and converts HTML to clean markdown.
这里在做什么:用真实浏览器解决 JS 渲染问题,而非静态 HTTP 抓取。

提供两种抓取模式:auto(网络空闲即抓)与 --wait(用户按键信号后再抓)。

skills/canghe-url-to-markdown/SKILL.md
- Two capture modes: auto or wait-for-user
这里在做什么:对登录态/懒加载/付费墙页面,把抓取时机交给用户。

wait 模式会打印提示并阻塞等待 stdin 换行,收到后触发提取。

skills/canghe-url-to-markdown/scripts/main.ts
console.log("Page opened. Press Enter when ready to capture...");
这里在做什么:用 readline 等用户确认页面就绪,再执行 CDP 提取脚本。

脚本自己拉起 Chrome(按平台枚举常见安装路径,可用 URL_CHROME_PATH 覆盖)。

skills/canghe-url-to-markdown/scripts/cdp.ts
export function findChromeExecutable(): string | null {
这里在做什么:定位浏览器可执行文件后 spawn,并以 --remote-debugging-port 暴露调试端口。

通过本机调试端口发现 CDP 端点(http://127.0.0.1:<port>/json/version)。

skills/canghe-url-to-markdown/scripts/cdp.ts
const res = await fetchWithTimeout(`http://127.0.0.1:${port}/json/version`, { timeoutMs: 5_000 });
这里在做什么:等待 Chrome 调试端口就绪,再建立 WebSocket CDP 连接。

HTML→markdown 用 sanitize + turndown,失败则回退纯文本抽取。

skills/canghe-url-to-markdown/scripts/html-to-markdown.ts
return turndown.turndown(sanitized);
这里在做什么:先净化 DOM 再转 markdown,尽量去掉脚本/样式等噪声。

输出为带 YAML front matter 的 md,落在 url-to-markdown/<domain>/<slug>.md,冲突时加时间戳。

skills/canghe-url-to-markdown/SKILL.md
YAML front matter with `url`, `title`, `description`, `author`, `published`, `captured_at` fields, followed by converted markdown content.
这里在做什么:把文件元数据与正文分离,便于归档与再加工。

Chrome 路径、数据目录与 profile 目录均可由环境变量覆盖。

skills/canghe-url-to-markdown/SKILL.md
| `URL_CHROME_PATH` | Custom Chrome executable path |
这里在做什么:应对 Chrome 未找到或需指定独立 profile 的场景;变量均为路径类,非密钥。

2核心能力

01抓取任意 URL(含 JS 渲染页)为 markdown
02auto / wait 两种抓取模式
03完整 JS 渲染支持
04按域名/标题生成输出路径并处理冲突
05自动滚动触发懒加载后再抓取
06输出带 YAML 元数据的 markdown
07环境变量自定义 Chrome / 数据目录 / profile
08EXTEND.md 偏好(输出目录/模式/超时)

3外部依赖

KindDependency / Endpoint
clibun / npx -y bun(运行 scripts/main.ts)
cli本机 Chrome/Chromium/Edge(由 cdp.ts 定位并 spawn,用 CDP 驱动)
network用户指定的目标 URL(浏览器真实加载该页面及其子资源)

4管控建议与判定依据

建议配套管控措施
面向 Agent
分级或逐次授权,建议在沙箱运行
面向管理者
审批流程、可回滚、全程审计
判定依据(文件路径与关键语句摘要)
  • scripts/: 执行本地脚本或命令: npx -y bun ${SKILL_DIR}/scripts/main.ts <url> [--wait] [-o out.md] [--timeo
  • 网络端点: 声明外部网络访问: 用户指定的目标 URL:浏览器真实加载该页面(含其子资源与页面自发请求)
  • 本地工作目录: 文件读写与工件输出: url-to-markdown/<domain>/<slug>.md(正文 + YAML 元数据)
审计说明: 。判级对象是本 skill 自身目录:五个本地脚本(main/cdp/html-to-markdown/paths/constants)协作,用本机 Chrome + CDP 加载用户指定的 URL 并把 HTML 转成 markdown 落盘。存在常规网络调用(目标 URL 与 127.0.0.1 调试端口),但外发对象由用户指定、可预期,故非蓝;不读任何凭证/cookie,不做逆向/冒充/绕过/安全降级/任意代码执行,故非橙/红。相较同仓上游 baoyu-url-to-markdown(判红:逆向 YouTube InnerTube、凭证明文落盘、调试会话接管),本 fork 为通用抓取,无站点适配器与凭证落盘,故降为黄。

5第二遍独立确认

  • [ok] 网络调用定位 — 风险扫描『網路請求』命中 cdp.ts 的 fetch/WebSocket 与 http://127.0.0.1:${port}/json/version;均为本机调试端口,目标页网络由 Chrome 自身发起。
  • [ok] 不读凭证 — 风险扫描『憑證/環境變數』命中项均为路径/目录类(URL_CHROME_PATH/URL_DATA_DIR/URL_CHROME_PROFILE_DIR/APPDATA/XDG_DATA_HOME)与 ${SKILL_DIR}/$HOME 文档文本,无密钥/cookie 读取。
  • [ok] 独立 profile 而非用户主 profile — paths.ts resolveUrlToMarkdownChromeProfileDir 指向用户数据根/canghe-skills/url-to-markdown/chrome-profile。
  • [ok] 无站点适配器/无冒充 — §1 清单只有 6 个文件,无 X/YouTube 等适配器;cdp.ts 无 InnerTube/UA 伪装类代码,与上游 baoyu-url-to-markdown 的红档成因不同。
  • [ok] 无安全降级 — 风险扫描『危險旗標/防護繞過』与『沙箱/未受控執行』均无命中;未见 remote-allow-origins=*/--no-verify 等。
  • [ok] 两模式与写盘路径属实 — main.ts 的 waitForUserSignal 打印 'Press Enter when ready to capture...';main.ts 以 writeFile(outputPath,...,'utf-8') 落盘。
  • [ok] 档位复核 — 有常规网络调用、无凭证、无绕过 → yellow;相较上游红档按证据差异降档,已在 reason 说明。
  • [ok] 元数据与 commit — commit=dd0bf355955b4c82b764740b4183c86a72ba0e0c,license=MIT(仓库根),installs=null。

6结论

  • 用真实 Chrome CDP 抓取,能拿到 JS 渲染后的内容,胜过纯 HTTP 抓取。
  • wait 模式把抓取时机交给用户,能处理登录态/懒加载/付费墙页面。
  • 完全本地、无云依赖,输出自包含的 markdown + YAML 元数据,便于归档。
  • 环境变量与 EXTEND.md 提供路径/目录/模式/超时可调,独立 profile 不干扰用户主浏览器。
  • 适合: 适合需要把网页(尤其是 JS 渲染或需登录后查看的页面)离线留存为 markdown 的知识工作者、研究者与内容搬运者,且能接受用本机 Chrome 抓取。
    不适合: 不适合在没有 Chrome 的环境或需要规避任何浏览器自动化的场景;不适合抓取含敏感登录信息或违反目标站点条款的页面;也不适合期待结构化多站点适配(如专站解析)的用户。
    Install Agent-Ready
    ① Verified Mirror 2026-10-10
    Option A · Direct DownloadDownload canghe-url-to-markdown.tar.gz
    sha256: bc953895075e756e…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit dd0bf35595.