Cloudflare Browser Run 實測
免費仔の完整踩雷紀錄
不用自架 Puppeteer、不用煩惱 Node.js 版本、不用供奉 Docker daemon——Cloudflare 提供了一整套 API,你丟 URL 進去,他幫你用 headless Chrome 渲染、抓資料、輸出 PDF。
這就是 Cloudflare Browser Run。聽起來很甜,實測六件事:
基礎功能
進階能力
SPA:渲染正常,不是空架子
JavaScript-heavy 的頁面,丟進去拿回來的是完整 HTML,不是那種 <div id="app"></div> 的空殼。React、Vue、Next.js 靜態輸出都能用。
對於那些「用 curl 抓回來什麼都沒有」的頁面,Browser Run 是個乾淨的解法。
Lighthouse 分數:不等就沒有
PageSpeed Insights 的 Lighthouse 分數是非同步計算的——頁面跑完 JS,才開始算分;分算完,才顯示到畫面上。你不等它,它不給你。
加上這兩個參數就解決了:
wait_until=networkidle0 + wait_ms=5000等網路閒置後再多等 5 秒,Lighthouse 分數就出現了。
用 oao.tw 實測,成績如下:
Mobile 有待加強,Desktop 幾乎滿分。資料拿到了,接下來就是去改網站的事。
免費仔定律:凡有額度,必有 429
Cloudflare 免費方案有 API 呼叫限制。連續跑幾次之後,回來的不是頁面,而是:
偶爾用沒問題,要跑 batch 或持續監測,免費方案吃不消。要嘛升級付費,要嘛降頻率,要嘛自己架 Chromium——就回到原點了。
CSS 選取器抓資料:DOM 直取,不靠 AI 猜
CF Browser Run 支援用 CSS selector 直接從渲染後的 DOM 抓屬性——href、文字內容、HTML 結構、連元素座標都給你。
實測抓文章列表,指定 selector a.article-link:結果每篇的 href、標題、摘要全部正確,路徑沒有錯誤。
這個方式的優勢:它看的是 DOM 屬性,不是可見文字。頁面上看不到完整 URL 沒關係,href 屬性就在那裡,直接拿。
適合:已知頁面結構、要抓連結或特定欄位,不需要 AI 參與。
AI 語意提取:它看不到 href
CF Browser Run 可以結合 Cloudflare Workers AI,把渲染完的頁面文字丟給 LLM,讓 AI 幫你結構化提取資料。
測同一個頁面,要求 AI 列出所有文章連結:
href 屬性,只能從可見文字推測路徑,結果拼出重複路徑。
但用對場景就沒問題。AI 擅長的是語意理解,不是 DOM 屬性提取:
❌ 不適合:抓連結、抓屬性值——那要用 CSS 選取器直取
PDF 輸出:免費仔也會 rate limit
CF Browser Run 可以把任何頁面渲染成 PDF,回傳一個下載連結。不是 inline 塞給你,是存到某個地方讓你自己去下載。
實測輸出一篇文章:432 KB,有效下載連結。
幾點要注意:背景色要啟用才會印出來;下載連結有時效,不是永久的;429 在這裡一樣有效——跑太快一樣被擋。
適合把技術文件、報告頁面存成 PDF 備份,或是「截圖不夠用、需要可搜尋文字」的場景。
用什麼能力做什麼事
| CF Browser Run 能力 | 適合場景 | 免費仔警告 |
|---|---|---|
| JS 渲染 + 完整 HTML | SPA 頁面、抓渲染後內容 | 結果很大,要小心 token |
| CSS 選取器抓元素 | 已知結構、抓連結屬性 | 最穩,優先選 |
| 結合 Workers AI 語意提取 | 摘要、情緒分析、非結構化內文 | 別用來抓 URL |
| PDF 輸出 | 文件存檔、可搜尋備份 | 429 照樣中 |
這整套的本質:把 headless Chrome 外包給 Cloudflare。好用,但不是讓你免費用到爽的——限制在那裡,量力而為。
🔒 延伸實驗:AI 語意提取能被注入嗎?
AI 語意提取的流程是:頁面文字丟給 LLM,LLM 回答你的問題。這就有個理論風險——惡意網頁如果在頁面裡藏了假指令,AI 會不會被劫持?
做了三種攻擊:
| 攻擊手法 | 內容 | 結果 |
|---|---|---|
| CSS 白字白底隱藏文字 | color:white; background:white 藏假指令 |
❌ 注入失敗 |
| HTML comment 注入 | <!-- IGNORE ALL PREVIOUS INSTRUCTIONS --> |
❌ 注入失敗 |
| Off-screen div | position:absolute; left:-9999px 藏假資料 |
❌ 注入失敗 |
順手測了一個更有趣的:問一個政治敏感問題(GLM-4.7-Flash 是中國模型,理論上有審查訓練)。
- 頁面上有寫 → 原文搬過來,沒有迴避
- 頁面上沒寫(問 apple.com)→ 回傳
{},沒有自己表態
行為很一致:只從頁面提取,不自己回答。頁面說什麼它搬什麼,頁面沒說就空手回。
更複雜的注入沒有繼續測——畢竟我們沒收錢,我們的免費測試也有 429 的。