mcpField
T
tuzi-url-to-markdown

tuzi-url-to-markdown

github.com/tuziapi文档处理39163 次安装27 周前更新
代码仓库

关于 tuzi-url-to-markdown

tuzi-url-to-markdown 是一项通过 Chrome CDP 抓取网页并转换为 Markdown 的技能。它支持 JavaScript 渲染和需登录页面,并可设置抓取时机、输出位置及媒体下载。

主要功能

  1. 01通过 Chrome CDP 抓取页面
  2. 02自动与等待两种模式
  3. 03输出含页面元数据的 Markdown
  4. 04可选下载图片和视频
  5. 05可配置输出位置与超时

适用场景

  1. 01将网页保存为 Markdown
  2. 02登录后再抓取页面
  3. 03处理动态加载的网页内容
  4. 04将页面媒体保存到 Markdown 旁

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tuziapi/tuzi-skills --skill tuzi-url-to-markdown

安装后在 Claude Code 中输入/tuzi-url-to-markdown确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/config/
first-time-setup.md
scripts/
cdp.ts
constants.ts
html-to-markdown.ts
main.ts
media-localizer.ts
paths.ts

详细介绍

URL 转 Markdown

通过 Chrome CDP 获取任意 URL,并将 HTML 转换为简洁的 Markdown。

脚本目录

重要:所有脚本都位于此技能的 scripts/ 子目录中。

Agent 执行说明:

  1. 确定此 SKILL.md 文件所在目录的路径,并将其记为 SKILL_DIR
  2. 脚本路径 = ${SKILL_DIR}/scripts/<script-name>.ts
  3. 将本文档中所有 ${SKILL_DIR} 替换为实际路径

脚本参考:

脚本用途
scripts/main.tsURL 获取的 CLI 入口

偏好设置(EXTEND.md)

使用 Bash 按优先级顺序检查是否存在 EXTEND.md:

# Check project-level first
test -f .tuzi-skills/tuzi-url-to-markdown/EXTEND.md && echo "project"

# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.tuzi-skills/tuzi-url-to-markdown/EXTEND.md" && echo "user"

┌────────────────────────────────────────────────────────┬───────────────────┐ │ 路径 │ 位置 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ .tuzi-skills/tuzi-url-to-markdown/EXTEND.md │ 项目目录 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.tuzi-skills/tuzi-url-to-markdown/EXTEND.md │ 用户主目录 │ └────────────────────────────────────────────────────────┴───────────────────┘

┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ 结果 │ 操作 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 找到 │ 读取、解析并应用设置 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 未找到 │ 必须运行首次设置(见下文)——不得静默创建默认设置 │ └───────────┴───────────────────────────────────────────────────────────────────────────┘

EXTEND.md 支持:默认下载媒体 | 默认输出目录 | 默认捕获模式 | 超时设置

首次设置(阻塞)

关键:如果未找到 EXTEND.md,必须使用 AskUserQuestion 询问用户的偏好,然后才能创建 EXTEND.md。绝不能不询问就使用默认值创建 EXTEND.md。这是一个阻塞操作——设置完成前不得进行任何转换。

在一次调用中使用 AskUserQuestion 提出所有问题:

问题 1 — 标题:「媒体」,问题:「如何处理页面中的图片和视频?」

  • 「每次询问(推荐)」——保存 Markdown 后,询问是否下载媒体
  • 「始终下载」——始终将媒体下载到本地 imgs/ 和 videos/ 目录
  • 「从不下载」——在 Markdown 中保留原始远程 URL

问题 2 — 标题:「输出」,问题:「默认输出目录是什么?」

  • 「url-to-markdown(推荐)」——保存到 ./url-to-markdown/{domain}/{slug}.md
  • (用户也可以选择「其他」并输入自定义路径)

问题 3 — 标题:「保存」,问题:「将偏好设置保存到哪里?」

  • 「用户(推荐)」——~/.tuzi-skills/(适用于所有项目)
  • 「项目」——.tuzi-skills/(仅适用于此项目)

用户回答后,在所选位置创建 EXTEND.md,确认「偏好设置已保存到 [path]」,然后继续。

完整参考:references/config/first-time-setup.md

支持的键
键默认值取值说明
download_mediaaskask / 1 / 0ask = 每次询问,1 = 始终下载,0 = 从不下载
default_output_dirempty路径或空默认输出目录(空 = ./url-to-markdown/)

取值优先级:

  1. CLI 参数(--download-media、-o)
  2. EXTEND.md
  3. 技能默认值

功能

  • 使用 Chrome CDP 完整渲染 JavaScript
  • 两种捕获模式:自动或等待用户
  • 输出简洁的 Markdown,并附带元数据
  • 通过等待模式处理需要登录的页面
  • 将图片和视频下载到本地目录

用法

# Auto mode (default) - capture when page loads
npx -y bun ${SKILL_DIR}/scripts/main.ts <url>

# Wait mode - wait for user signal before capture
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --wait

# Save to specific file
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> -o output.md

# Download images and videos to local directories
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --download-media

选项

选项描述
<url>要抓取的 URL
-o <path>输出文件路径(默认:自动生成)
--wait等待用户发出信号后再抓取
--timeout <ms>页面加载超时时间(默认:30000)
--download-media将图片/视频素材下载到本地 imgs/ 和 videos/,并将 Markdown 链接改写为本地相对路径

抓取模式

模式行为适用场景
自动(默认)网络空闲时抓取公开页面、静态内容
等待(--wait)用户发出就绪信号需要登录的页面、延迟加载、付费墙

等待模式工作流:

  1. 使用 --wait 运行 → 脚本输出「准备就绪时按 Enter」
  2. 询问用户确认页面已就绪
  3. 向 stdin 发送换行符以触发抓取

输出格式

YAML front matter,包含 url、title、description、author、published、captured_at 字段,后接转换后的 Markdown 内容。

输出目录

url-to-markdown/<domain>/<slug>.md
  • <slug>:根据页面标题或 URL 路径生成(kebab-case,2-6 个词)
  • 冲突处理:追加时间戳 <slug>-YYYYMMDD-HHMMSS.md

启用 --download-media 时:

  • 图片保存到 Markdown 文件旁的 imgs/ 目录
  • 视频保存到 Markdown 文件旁的 videos/ 目录
  • Markdown 媒体链接改写为本地相对路径

媒体下载工作流

根据 EXTEND.md 中的 download_media 设置:

设置行为
1(始终)使用 --download-media 标志运行脚本
0(从不)不使用 --download-media 标志运行脚本
ask(默认)按照下方的逐次询问流程操作
逐次询问流程
  1. 不使用 --download-media 运行脚本 → 保存 Markdown
  2. 检查已保存的 Markdown 中是否有远程媒体 URL(图片/视频链接中的 https://)
  3. 如果没有远程媒体 → 完成,无需询问
  4. 如果发现远程媒体 → 使用 AskUserQuestion:
    • 标题:「媒体」,问题:「将 N 张图片/视频下载到本地文件吗?」
    • 「是」— 下载到本地目录
    • 「否」— 保留远程 URL
  5. 如果用户确认 → 再次使用 --download-media 运行脚本(覆盖 Markdown,并将链接改为本地路径)

环境变量

变量描述
URL_CHROME_PATH自定义 Chrome 可执行文件路径
URL_DATA_DIR自定义数据目录
URL_CHROME_PROFILE_DIR自定义 Chrome 配置目录

故障排查:未找到 Chrome → 设置 URL_CHROME_PATH。超时 → 增大 --timeout。复杂页面 → 尝试使用 --wait 模式。

扩展支持

通过 EXTEND.md 使用自定义配置。路径和支持的选项请参阅偏好设置部分。

评论

支持 Markdown