首页 / 全部技能 / 内容创作 / 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.

风险提醒:黄色 · 留意使用AI 侦查报告
作者 freestyleflyGitHub freestylefly/canghe-skills ↗许可 MIT(仓库根 LICENSE)commit dd0bf35595
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 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外部依赖

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

4风险提醒 风险提醒:黄色 · 留意使用

风险提醒:黄色 · 留意使用
  • 会加载任意用户给定 URL:若指向登录态页面,Chrome 会把该会话可见内容一并抓取;请避免敏感页面。
  • 依赖本机 Chrome 环境与版本:Chrome 未找到需手动设 URL_CHROME_PATH,复杂页面超时需调 --timeout 或改用 --wait。
  • 产物含外部不可信文本:抓取内容原样转 markdown 落盘,后续使用需自行审阅,勿盲目执行其中的代码块。
  • 仍属浏览器自动化:可能触发目标站的自动化检测/风控(本 skill 未做绕过,但行为特征与人工访问不同)。
风险提醒:黄色,留意使用。判级对象是本 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 的环境或需要规避任何浏览器自动化的场景;不适合抓取含敏感登录信息或违反目标站点条款的页面;也不适合期待结构化多站点适配(如专站解析)的用户。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-10-10
    方式 A · 人下载镜像包下载 canghe-url-to-markdown.tar.gz
    sha256: bc953895075e756e…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit dd0bf35595;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库freestylefly / freestylefly/canghe-skills
    本 skill commitdd0bf35595
    许可MIT(仓库根 LICENSE)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近