Chrome Headless 指令列參考資料

Mathias Bynens
Mathias Bynens
Peter Kvitek
Peter Kvitek

無頭模式和無頭 Shell 提供下列指令列旗標。

--dump-dom

--dump-dom 旗標會將目標網頁的序列化 DOM 列印至 stdout。例如:

chrome --headless --dump-dom https://developer.chrome.com/

這與列印 HTML 原始碼不同,後者可使用 curl 執行。為了提供 --dump-dom 的輸出內容,Chrome 會先將 HTML 程式碼剖析為 DOM,執行可能變更 DOM 的任何 <script>,然後將該 DOM 轉換回 HTML 的序列化字串。

--screenshot

--screenshot 標記會擷取目標網頁的螢幕截圖,並儲存為目前工作目錄中的 screenshot.png。與 --window-size 旗標搭配使用時,這項功能特別實用。

例如:

chrome --headless --screenshot --window-size=412,892 https://developer.chrome.com/

--print-to-pdf

--print-to-pdf 旗標會將目標網頁儲存為 PDF,並在目前的工作目錄中命名為 output.pdf。例如:

chrome --headless --print-to-pdf https://developer.chrome.com/

您可以視需要新增 --no-pdf-header-footer 旗標,省略列印頁首 (包含目前日期和時間) 和頁尾 (包含網址和頁碼)。

chrome --headless --print-to-pdf --no-pdf-header-footer https://developer.chrome.com/

--timeout

--timeout 標記會定義最長等待時間 (以毫秒為單位),之後即使網頁仍在載入,--dump-dom--screenshot--print-to-pdf 也會擷取網頁內容。

chrome --headless --print-to-pdf --timeout=5000 https://developer.chrome.com/

--timeout=5000 旗標會告知 Chrome 最多等待 5 秒,再列印 PDF。因此,這項程序最多需要 5 秒才能完成。

--virtual-time-budget

--virtual-time-budget 可做為任何時間相關程式碼 (例如 setTimeout/setInterval) 的「快轉」功能。這會強制瀏覽器盡快執行網頁的任何程式碼,同時讓網頁認為時間確實流逝。

如要瞭解如何使用,請參考這個示範,其中每秒都會遞增、記錄及顯示計數器,並使用 setTimeout(fn, 1000)。相關程式碼如下:

<output>0</output>
<script>
  const element = document.querySelector('output');
  let counter = 0;
  setInterval(() => {
    counter++;
    console.log(counter);
    element.textContent = counter;
  }, 1_000);
</script>

一秒後,網頁會顯示「1」;兩秒後,顯示「2」,依此類推。 以下說明如何擷取 42 秒後的頁面狀態,並儲存為 PDF:

chrome --headless --print-to-pdf --virtual-time-budget=42000 https://mathiasbynens.be/demo/time

--allow-chrome-scheme-url

如要存取 chrome:// 網址,必須使用 --allow-chrome-scheme-url 旗標。 這個旗標自 Chrome 123 版起開放使用。範例如下:

chrome --headless --print-to-pdf --allow-chrome-scheme-url chrome://gpu