关于 authenticated-web-scraper
authenticated-web-scraper 是面向 WSL2 环境的技能,借助用户已登录的 Windows Edge,通过 CDP 抓取需要认证的网站内容。适合提取内网文档、页面结构和链接,并按导航层级爬取。
主要功能
- 01复用 Edge 用户登录会话
- 02通过 CDP 提取文本和 HTML
- 03收集页面链接并按层级爬取
- 04输出页面内容与清单 JSON
- 05从 WSL2 调用 Windows 侧脚本
适用场景
- 01镜像需要企业认证的文档站点
- 02抓取需 2FA 或 SSO 的页面
- 03提取页面文本、HTML 和链接
- 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 端运行。
快速开始
用户要求抓取经过身份验证的网站时:
- 结束现有 Edge 进程,并使用调试标志重新启动
- 用户在有界面浏览器中完成身份验证
- 将抓取脚本复制到 Windows 临时目录,并通过
cmd.exe运行 - 脚本连接 CDP、浏览页面并提取内容
- 从共享文件系统(
/mnt/c/Temp/...)读取结果
核心工作流
阶段 0:先决条件
- Windows 上必须安装 Node.js(
cmd.exe /c "where node") - Windows 端需安装
wsnpm 包(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 脚本,以便:
- 查询
http://localhost:9222/json/list,获取打开的页面 - 通过 WebSocket(
ws包)连接目标页面 - 使用
Runtime.evaluate提取 DOM 内容 - 使用
Page.navigate+Page.enable进行爬取 - 为每个页面保存
.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:遍历导航
- 从初始页面提取侧边栏/导航链接
- 筛选同域页面(跳过锚点链接)
- 访问每个导航页面,提取内容和链接
- 跟进发现的链接,深入一层(去重)
- 写入包含页面清单的摘要 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