PuppeteerSharp 网页抓取流水线:在 .NET 里跑通无头 Chrome 爬虫

前言

在 .NET 里抓网页,常见痛点是:请求发出去了,拿到的只是一堆空壳 HTML。页面数据靠 JavaScript 在浏览器里渲染,HttpClient 拿不到。更麻烦的是站点上了 Cloudflare,脚本一跑就被挑战页挡住。自己搭一套无头浏览器方案,要处理浏览器启动、页面导航、等待策略、反爬伪装、数据序列化,成本不低。

下面介绍的 PuppeteerSharp 网页抓取流水线,就是把这套流程打包成一个可直接启用的 Skill,面向 .NET 环境。

这是什么

PuppeteerSharp 网页抓取流水线是一个面向 .NET 的网页抓取 Skill,坐标 @user_3c6cb52e/puppeteer-scraping-pipeline,版本 1.0.0,来源 community,分类 data-analysis,由 user_3c6cb52e 发布。

它解决的问题是:在 .NET 项目里用无头 Chrome 抓取 JavaScript 渲染的 SPA 页面,并把结果序列化成结构化数据。

在 SkillHub 上的评分为 100000,下载 803 次(以 SkillHub 页面数据为准)。

核心功能

依据 Skill 简介,它提供三项能力:

  1. 使用 PuppeteerSharp 构建无头 Chrome 爬虫管道。PuppeteerSharp 是 Node 端 Puppeteer 的 .NET 移植版,直接驱动真实浏览器内核,不是模拟 HTTP 请求。
  2. 处理 JavaScript 渲染的 SPA。页面在浏览器里完成渲染后再取数据,单页应用也能抓到内容。
  3. 通过 stealth 插件绕过 Cloudflare 挑战。让无头浏览器的行为特征更接近真实用户,降低被风控拦截的概率。
  4. 通过 Newtonsoft.Json 序列化导出结构化数据。抓到的字段按对象结构输出,便于后续入库或转存。

安装与启用

该 Skill 标注 requires_api_key=false,启用不需要 API Key。

官方资料没有给出统一的安装命令。不同客户端的启用方式如下,均为通用做法,具体以对应客户端文档为准:

Cursor:在项目根目录放置 SKILL.md 描述文件,或在对话中通过 /skills 命令搜索该 Skill 名称后启用。

Codex CLI:在项目里维护 SKILL.md,通过技能目录加载;也可在命令行用技能管理命令查找并启用。

Claude Code:把 SKILL.md 放进项目的 .claude/skills 目录,或在对话中按名称启用。

启用后,在对话中说明要抓取的页面和目标字段即可。

典型用法

官方简介给出的典型链路是:用 PuppeteerSharp 启动无头 Chrome,导航到目标页面,等待 SPA 渲染完成,按需取字段,再用 Newtonsoft.Json 序列化导出。

下面是按这条链路写出的参考流程,具体 API 以 PuppeteerSharp 官方文档为准:

// 1. 启动无头 Chrome,加载 stealth 插件以降低被 Cloudflare 拦截的概率
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true,
    Args = new[] { "--disable-blink-features=AutomationControlled" }
});

// 2. 打开目标 SPA 页面,等待渲染完成
using var page = await browser.NewPageAsync();
await page.GoToAsync("https://example.com/app", WaitUntilNavigation.Networkidle0);

// 3. 取页面数据
var data = await page.EvaluateFunctionAsync<string>("() => document.body.innerText");

// 4. 用 Newtonsoft.Json 序列化导出
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
File.WriteAllText("result.json", json);

第 1 步完成浏览器启动和 stealth 配置,第 2 步等待页面渲染,第 3 步取数据,第 4 步序列化落盘。经过上面的步骤,抓取结果就是一份结构化 JSON。

适用场景与注意

适合谁:

  1. 在 .NET 技术栈里做数据采集,需要抓 SPA 或受 Cloudflare 保护站点的开发团队。
  2. 想省去自建无头浏览器管线成本,直接复用现成流水线的工程师。

限制和坑:

  1. 依赖 PuppeteerSharp 和无头 Chrome,运行环境需要能装浏览器内核。
  2. stealth 插件只是降低被识别的概率,不保证绕过所有反爬。
  3. 官方资料只给出能力描述,没有提供完整脚本和配置字段清单,接入前需要按实际项目补齐。
  4. 数据导出用 Newtonsoft.Json,项目里需引用对应 NuGet 包。

结尾

这条流水线的价值在于:把 .NET 无头浏览器抓取的常见环节——SPA 渲染等待、stealth 伪装、JSON 导出——收敛到一套流程里,省去重复搭轮子的工作。如果你的场景正好是 .NET 抓 JS 渲染页面,可以从这里起步。

官方地址:https://api.skillhub.cn/user_3c6cb52e/puppeteersharp-web-scraping-pipeline

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜