ホーム / 全スキル / コンテンツ制作 / canghe-url-to-markdown
コンテンツ制作 · freestylefly/canghe-skills

canghe-url-to-markdown

Chrome CDPを使用して任意のURLを取得し、Markdownに変換します。ページ読み込み時の自動キャプチャと、ユーザー入力待機(ログインが必要なページ向け)の2つのモードに対応しています。Webページを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.
処理内容:静的なHTTPスクレイピングではなく、実ブラウザを用いてJSレンダリングの問題を解決します。

2つの取得モードを提供: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を起動します(OSごとの一般的なインストールパスを走査、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フロントマター付きの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のパス、データディレクトリ、プロファイルディレクトリはすべて環境変数で上書き可能です。

skills/canghe-url-to-markdown/SKILL.md
| `URL_CHROME_PATH` | Custom Chrome executable path |
処理内容:Chromeが見つからない場合や独立したプロファイルを指定する必要がある場合に対応します。変数はすべてパス類であり、認証情報ではありません。

2コア機能

01任意のURL(JSレンダリングページを含む)をMarkdownとして取得
02auto / wait の2つの取得モード
03完全なJSレンダリングのサポート
04ドメイン/タイトルに応じた出力パス生成と競合解決
05自動スクロールによる遅延読み込みトリガー後の取得
06YAMLメタデータ付きMarkdownの出力
07環境変数によるChrome / データディレクトリ / プロファイルのカスタマイズ
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メタデータ)
監査ノート: 判定対象は本スキル自身のディレクトリです。5つのローカルスクリプト(main/cdp/html-to-markdown/paths/constants)が連携し、ローカルChrome + CDPを用いてユーザー指定のURLを読み込み、HTMLをMarkdownに変換してディスクに保存します。通常のリクエスト(対象URLおよび127.0.0.1デバッグポート)は存在しますが、外部通信先はユーザー指定で予期可能なため青ではありません。認証情報/Cookieの読み取り、リバースエンジニアリング、なりすまし、バイパス、セキュリティダウングレード、任意コード実行は行わないため、橙/赤ではありません。同リポジトリの上流であるbaoyu-url-to-markdown(YouTube InnerTubeのリバースエンジニアリング、平文での認証情報保存、デバッグセッションの乗っ取りにより赤判定)と比較して、本フォークは汎用的な取得ツールであり、サイトアダプターや認証情報の保存がないため、黄に引き下げられています。

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モードで取得タイミングをユーザーに委ねることで、ログイン状態、遅延読み込み、ペイウォールのあるページにも対応できます。
  • クラウド依存のない完全ローカル動作で、アーカイブしやすいYAMLメタデータ付きの自己完結型Markdownを出力します。
  • 環境変数やEXTEND.mdでパス、ディレクトリ、モード、タイムアウトを調整可能であり、独立プロファイルによりユーザーのメインブラウザに干渉しません。
  • 最適な用途: Webページ(特に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.