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

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

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

小夜