SuperAPI AI 工具集

authenticated-web-scraper

通用与其它

查看项目

更新于 10-15 13:46

技能介绍

用途

Authenticated Web Scraper 用于抓取需要认证的网站内容,例如带 2FA、SSO 或企业登录的站点。它借助 Chrome DevTools Protocol(CDP)调用用户 Windows 上的 Edge 浏览器完成抓取,专为 WSL2 环境设计,因为 Playwright/Puppeteer 在 WSL2 中无法直接访问 Windows 浏览器端口。

适用场景

  • 镜像位于企业认证之后的内部文档站点
  • 抓取需要 2FA/SSO、难以自动化的网站内容
  • 从已认证网页中提取结构化内容(文本、HTML、链接)
  • 爬取站点导航树并按可配置深度跟随链接

架构说明

环境分为 WSL2 与 Windows 两侧:

  1. WSL2 侧首先终止 Edge 进程,
  2. 然后以调试参数启动 Edge(--remote-debugging-port=9222、--remote-debugging-address=0.0.0.0 等),
  3. 用户在浏览器中完成认证,
  4. 通过 cmd.exe 在 Windows 侧运行抓取脚本 scraper.mjs,脚本连接 localhost:9222,
  5. 输出写入 C:\Temp...,由 WSL2 侧读取结果。

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

快速开始

当用户要求抓取认证网站时:

  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

关键:必须先杀掉所有 Edge 进程,否则调试参数会被忽略。随后以 detached 方式启动 Edge,并传入调试端口、调试地址、允许来源以及目标 URL 等参数。

阶段 2:验证 CDP 与用户认证

需在 Windows 侧查询调试端点以验证 CDP 正在运行,例如通过 PowerShell 请求 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(完整 HTML)和 _links.json

在 Windows 侧运行,例如将脚本复制到 C:\Temp 后通过 cmd.exe 执行,输出目录一并传入。

阶段 4:爬取导航

  • 从初始页面提取侧边栏/导航链接
  • 过滤为同域页面(跳过锚点链接)
  • 访问每个导航页面,提取内容与链接
  • 跟随发现的链接,深度一层并去重
  • 写入包含页面清单的汇总 JSON

CDP 命令参考

  • 导航:Page.navigate,传入 url
  • 提取文本:Runtime.evaluate,表达式如 document.querySelector("main").innerText,returnByValue: true
  • 提取链接:Runtime.evaluate,用 JSON.stringify 将 a[href] 映射为 {href, text} 数组,returnByValue: true
  • 获取完整 HTML:Runtime.evaluate,表达式 document.documentElement.outerHTML,returnByValue: true

关键细节

  • 必须先杀 Edge:若 Edge 已在运行,新实例会加入既有进程并忽略 --remote-debugging-port
  • WSL2 网络:WSL2 有独立网络栈,其中的 127.0.0.1 无法到达 Windows,脚本必须通过 cmd.exe 在 Windows 上运行
  • 克制爬取:页面加载之间加入 2 秒延迟
  • 认证持久化:Edge 使用用户默认配置文件及其已保存会话
  • 输出路径:脚本中使用 Windows 路径(C:\Temp...),在 WSL 侧通过 /mnt/c/Temp/... 读取

集成方式

  • 可配合任何位于企业认证(SSO、SAML、FIDO2 等)之后的文档站点使用
  • 输出可交给其他技能进行分析、摘要或构建知识库
  • 适合与 investigation-workflow 和 knowledge-builder 技能搭配使用

限制

资料未提供具体的收费、价格与性能指标;实际可用性取决于 Windows 侧 Node.js、ws 包与 Edge 的安装情况,以及用户能否在浏览器中完成认证。