mcpField
A
authenticated-web-scraper

authenticated-web-scraper

github.com/rysweet数据与数据库76120 次安装21 周前更新
代码仓库

关于 authenticated-web-scraper

authenticated-web-scraper 是面向 WSL2 环境的技能,借助用户已登录的 Windows Edge,通过 CDP 抓取需要认证的网站内容。适合提取内网文档、页面结构和链接,并按导航层级爬取。

主要功能

  1. 01复用 Edge 用户登录会话
  2. 02通过 CDP 提取文本和 HTML
  3. 03收集页面链接并按层级爬取
  4. 04输出页面内容与清单 JSON
  5. 05从 WSL2 调用 Windows 侧脚本

适用场景

  1. 01镜像需要企业认证的文档站点
  2. 02抓取需 2FA 或 SSO 的页面
  3. 03提取页面文本、HTML 和链接
  4. 04按站点导航整理页面内容

安装

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

$npx skills add https://github.com/rysweet/amplihack --skill authenticated-web-scraper

安装后在 Claude Code 中输入/authenticated-web-scraper确认已加载。

附带文件scripts/launch_edge_debug.mjsscripts/scrape_site.mjs

详细介绍

经过身份验证的网页抓取器

用途

通过 Chrome DevTools Protocol(CDP)利用用户的 Windows Edge 浏览器,抓取需要身份验证的网站(2FA、SSO、企业登录)的内容。专为 WSL2 环境设计,因为 Playwright/Puppeteer 无法直接访问 Windows 浏览器端口。

使用场景

  • 镜像企业身份验证保护下的内部文档网站
  • 抓取需要 2FA/SSO 且无法自动化的网站内容
  • 从经过身份验证的网页中提取结构化内容(文本、HTML、链接)
  • 遍历网站导航树,并按可配置的深度跟进链接

架构

WSL2                          Windows
┌─────────────────┐           ┌──────────────────────┐
│ Claude Code     │           │ Edge Browser          │
│                 │  kill     │ (user's profile)      │
│ 1. Kill Edge ───┼──────────>│                       │
│                 │  launch   │                       │
│ 2. Launch Edge ─┼──────────>│ --remote-debug:9222   │
│                 │           │ --debug-addr:0.0.0.0  │
│ [User auths     │           │                       │
│  in browser]    │           │ CDP WebSocket on :9222│
│                 │  cmd.exe  │                       │
│ 3. Run scraper ─┼──────────>│ node scraper.mjs      │
│                 │           │ connects localhost:9222│
│ 4. Read output <┼───────────│ writes to C:\Temp\... │
└─────────────────┘           └──────────────────────┘

关键要点:WSL2 无法直接访问 Windows 的 localhost:9222。抓取脚本必须通过 cmd.exe /c "node script.mjs" 在 Windows 端运行。

快速开始

用户要求抓取经过身份验证的网站时:

  1. 结束现有 Edge 进程,并使用调试标志重新启动
  2. 用户在有界面浏览器中完成身份验证
  3. 将抓取脚本复制到 Windows 临时目录,并通过 cmd.exe 运行
  4. 脚本连接 CDP、浏览页面并提取内容
  5. 从共享文件系统(/mnt/c/Temp/...)读取结果

核心工作流

阶段 0:先决条件
  • Windows 上必须安装 Node.js(cmd.exe /c "where node")
  • Windows 端需安装 ws npm 包(cmd.exe /c "cd C:\Temp && npm install ws")
  • 必须安装 Edge 浏览器(检查 /mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe)
阶段 1:启动 Edge 并启用远程调试
import { execSync, spawn } from "child_process";

// CRITICAL: Kill ALL Edge processes first, otherwise debug flags are ignored
execSync('cmd.exe /c "taskkill /F /IM msedge.exe /T"');
await sleep(3000);

const EDGE = "/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe";
spawn(
  EDGE,
  [
    "--remote-debugging-port=9222",
    "--remote-debugging-address=0.0.0.0",
    "--remote-allow-origins=*",
    targetUrl,
  ],
  { detached: true, stdio: "ignore" }
).unref();
阶段 2:验证 CDP 和用户身份验证
# Verify CDP is running (must query from Windows side)
powershell.exe -Command "Invoke-RestMethod -Uri http://localhost:9222/json/version"

告知用户完成身份验证,然后确认他们可以看到内容。

阶段 3:通过 CDP 抓取

编写 Node.js 脚本,以便:

  1. 查询 http://localhost:9222/json/list,获取打开的页面
  2. 通过 WebSocket(ws 包)连接目标页面
  3. 使用 Runtime.evaluate 提取 DOM 内容
  4. 使用 Page.navigate + Page.enable 进行爬取
  5. 为每个页面保存 .txt(纯文本)、.html(完整内容)、_links.json

在 Windows 端运行:

cp script.mjs /mnt/c/Temp/scraper.mjs
cmd.exe /c "cd C:\Temp && node scraper.mjs C:\Temp\output" 2>&1
阶段 4:遍历导航
  1. 从初始页面提取侧边栏/导航链接
  2. 筛选同域页面(跳过锚点链接)
  3. 访问每个导航页面,提取内容和链接
  4. 跟进发现的链接,深入一层(去重)
  5. 写入包含页面清单的摘要 JSON

CDP 命令参考

// Navigate to a page
await cdpSend(ws, "Page.navigate", { url });

// Extract text content
await cdpSend(ws, "Runtime.evaluate", {
  expression: 'document.querySelector("main").innerText',
  returnByValue: true,
});

// Extract links as JSON
await cdpSend(ws, "Runtime.evaluate", {
  expression:
    'JSON.stringify([...document.querySelectorAll("a[href]")].map(a => ({href: a.href, text: a.textContent.trim()})))',
  returnByValue: true,
});

// Get full HTML
await cdpSend(ws, "Runtime.evaluate", {
  expression: "document.documentElement.outerHTML",
  returnByValue: true,
});

关键细节

  • 必须先结束 Edge 进程:如果 Edge 已在运行,新实例会加入现有进程,并忽略 --remote-debugging-port
  • WSL2 网络:WSL2 使用自己的网络堆栈;WSL 中的 127.0.0.1 无法访问 Windows。脚本必须通过 cmd.exe 在 Windows 上运行
  • 礼貌爬取:页面加载之间增加 2 秒延迟
  • 身份验证持久化:Edge 使用用户的默认配置文件和已保存的会话
  • 输出路径:脚本中使用 Windows 路径(C:\Temp\...),并从 WSL 通过 /mnt/c/Temp/... 读取

集成方式

  • 适用于任何由企业身份验证保护的文档网站(SSO、SAML、FIDO2 等)
  • 输出可交由其他技能进行分析、摘要整理或知识库构建
  • 可与 investigation-workflow 和 knowledge-builder 技能配合使用

评论

支持 Markdown