網頁抓下來只剩「載入中」?Lightpanda 實測:加一個選項就抓全,記憶體少六倍
重點摘要
- 自製 JavaScript 特價頁:curl 與 Lightpanda 預設都只抓到「載入中…」,加 --wait-until networkidle 後三項特價全部抓到。
- 同一頁單程序最大記憶體:Lightpanda 約 36MB,Chromium 156 約 223MB。
- 連抓 20 次本機小頁:Lightpanda 13.5 秒、Chromium 6.1 秒,單頁速度沒有贏;官方 9 倍速數據未驗證。
- Debian 12(glibc 2.36)無法直接執行官方 Linux 二進位,需要 glibc 2.38 以上(錯誤訊息實測)。
- 結論: 吃記憶體少很多,但要記得等網頁跑完;單頁速度在本測試沒贏過 Chromium。
- 適合: 需要同時抓大量網頁、把網頁轉成 Markdown 給 AI、機器記憶體有限的人。
- 不適合: 只偶爾抓一頁、需要完整瀏覽器行為,或不能接受 AGPL-3.0 授權的人。
| 實測項目 | 結果 |
|---|---|
| 預設 fetch(load) | 只抓到「載入中…」 |
| --wait-until networkidle | 三項特價全出現 |
| 單程序記憶體 | 36MB 對 223MB |
| 連抓 20 次 | 13.5 秒對 6.1 秒 |
| 同時 10 個 RSS 加總(粗估) | 約 0.3GB 對 5GB |
想把店家每週的特價頁自動存成文字,用 curl 抓下來,卻只看到一行「載入中…」。原因是價格不在原始 HTML 裡,網頁打開後由 JavaScript 才填進去,curl 不會執行它。這時需要一個會真的跑網頁的瀏覽器,但一般的 Chrome 動輒佔好幾百 MB。Lightpanda 是專門給程式與 AI 使用的無頭瀏覽器,用 Zig 從頭寫成,號稱比 Chromium 輕、快很多。我自己做了一個測試頁,實際比較。
測試環境與方式
- 設備:Mac mini M4 Pro(12 核、64GB),在 Linux 環境(Debian 12,aarch64)測試。
- 受測版本:Lightpanda 1.0.2(AGPL-3.0),對照 Chromium 156(Debian 套件)。
- 測試頁:自製「小林商店 本週特價」。HTML 裡只有「載入中…」,300 毫秒後由 JavaScript 讀取
/deals.json,填入雞蛋 10 顆 NT$65、鮮奶 936ml NT$89、吐司 NT$45 三項。
下載與踩雷
curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/1.0.2/lightpanda-aarch64-linux
chmod a+x lightpanda
./lightpanda version
我的測試環境 glibc 是 2.36,直接執行出現 GLIBC_2.38 not found。官方說明只提到 Linux 版連結 glibc,不適用 Alpine 這類 musl 系統。我的做法是下載 Debian 較新的 libc6 套件解開,用它附的載入器執行;如果你的系統夠新,或改用官方 Docker 映像,就不會碰到。macOS 版另有 lightpanda-aarch64-macos,本次沒測。
跑起來:預設會抓不到
curl -s localhost:8080/ | grep 載入中
lightpanda fetch --dump markdown http://localhost:8080/
兩者都只得到「載入中…」。Lightpanda 預設在頁面 load 事件就轉出文字,JavaScript 還沒填完。
加上等待選項
lightpanda fetch --dump markdown --wait-until networkidle http://localhost:8080/

輸出變成標題加三項特價。--wait-until done 與 --wait-script "document.querySelectorAll('#deals li').length>0" 也都抓得到。我也用官方範例頁 demo-browser.lightpanda.io/campfire-commerce 試過,能轉出商品名稱、價格與說明。
與 Chromium 比較
| 項目 | Lightpanda 1.0.2 | Chromium 156 |
|---|---|---|
| 單程序最大記憶體(同一頁) | 約 36MB | 約 223MB |
| 同時 10 個(ps RSS 加總,粗估) | 約 0.3GB/10 個程序 | 約 5GB/175 個程序 |
| 連抓 20 次(本頁) | 13.5 秒 | 6.1 秒 |
| 單次(本頁) | 約 0.7 秒 | 約 0.3 秒 |

判讀時請注意:
- 記憶體:單程序用
/usr/bin/time的最大常駐記憶體。同時 10 個是用ps加總 RSS,共享記憶體會重複計算,Chromium 的數字會偏高,所以只當粗估。 - 速度:這個小頁面上 Lightpanda 沒有比較快。其中一部分是
networkidle要多等一小段時間。官方 README 的「快 9 倍、省 16 倍記憶體」是在 AWS m5.large 上抓 933 個真實網頁的結果,我沒有重做這個測試,不能驗證。 - 本次只測一個自製頁與一個官方範例頁,沒測真實網站的反爬蟲、Puppeteer/Playwright 連線。
結論
遇到內容由 JavaScript 載入的頁面,記得加 --wait-until networkidle(或 --wait-script),否則會像一般 curl 一樣只拿到空殼。記憶體省很多是真的;如果你要同時抓很多頁、機器記憶體吃緊,值得試。偶爾抓一兩頁,現成的 Chromium 就夠,單頁速度我沒測到優勢。
- 適合:要同時抓大量頁面、想把網頁轉成 Markdown 餵給 AI、機器資源有限的人。
- 不適合:只偶爾抓一頁、需要完整瀏覽器行為(截圖、複雜互動)、或介意 AGPL-3.0 授權的商用情境。
專案連結:https://github.com/lightpanda-io/browser(授權 AGPL-3.0)