การอ้างอิงบรรทัดคำสั่ง Chrome Headless

Peter Kvitek
Peter Kvitek

แฟล็กบรรทัดคำสั่งต่อไปนี้ใช้ได้ในโหมด Headless และ Headless Shell

--dump-dom

แฟล็ก --dump-dom จะพิมพ์ DOM ที่ซีเรียลไลซ์ของหน้าเป้าหมายไปยัง stdout เช่น

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

ซึ่งแตกต่างจากการพิมพ์ซอร์สโค้ด HTML ที่คุณอาจทำด้วย curl หากต้องการแสดงเอาต์พุตของ --dump-dom Chrome จะแยกวิเคราะห์โค้ด HTML เป็น DOM ก่อน จากนั้นจะเรียกใช้ <script> ที่อาจเปลี่ยนแปลง DOM แล้ว เปลี่ยน 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 เพื่อละเว้นส่วนหัวของการพิมพ์ (ที่มีวันที่และเวลาปัจจุบัน) และส่วนท้าย (ที่มี URL และหมายเลขหน้า) ได้ด้วย

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 วินาที หน้าจะมี "1" หลังจากผ่านไป 2 วินาทีจะมี "2" และอื่นๆ วิธีจับภาพสถานะของหน้าหลังจากผ่านไป 42 วินาทีและบันทึกเป็น PDF มีดังนี้

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

--allow-chrome-scheme-url

คุณต้องใช้แฟล็ก --allow-chrome-scheme-url เพื่อเข้าถึง URL chrome:// แฟล็กนี้ใช้ได้ตั้งแต่ Chrome 123 เป็นต้นไป ตัวอย่าง

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