Chrome Gözetimsiz modu

Peter Kvitek
Peter Kvitek

Chrome Gözetimsiz moduyla, tarayıcıyı gözetimsiz bir ortamda çalıştırabilirsiniz. kullanıcı arayüzü olmadığından emin olun. Esasen, Chrome'u Chrome olmadan çalıştırabilirsiniz.

Gözetimsiz mod, aşağıdaki gibi projeler aracılığıyla tarayıcı otomasyonu için popüler bir seçenektir: Puppeteer veya ChromeDriver.

Gözetimsiz modu kullanma

Gözetimsiz modu kullanmak için --headless komut satırı işaretini iletin:

chrome --headless

Eski Gözetimsiz modu kullan

Eskiden gözetimsiz mod ayrı ve alternatif bir tarayıcı uygulaması aynı Chrome ikili dosyasının parçası olarak gönderilmiş olan değişiklikleri görürsünüz. Paylaşılmadı Chrome tarayıcı kodunun herhangi bir //chrome.

Chrome'da artık gözetimsiz ve gözetimli modlar birleştirilmiş.

Gözetimsiz mod, kodu Chrome ile paylaşır.

Şu an için eski Gözetimsiz modu aşağıdakilerle hâlâ kullanılabilir:

chrome --headless=old

Puppeteer'da

Puppeteer'da gözetimsiz modunu kullanmak için:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  headless: 'true', // (default) enables Headless
  // `headless: 'old'` enables old Headless
  // `headless: false` enables "headful" mode
});

const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');

// …

await browser.close();

Selenium-WebDriver'da

Selenium-WebDriver'da gözetimsiz modu kullanmak için:

const driver = await env
  .builder()
  .setChromeOptions(options.addArguments('--headless'))
  .build();

await driver.get('https://developer.chrome.com/');

// …

await driver.quit();

Diğer dil bağlamalarının kullanıldığı örnekler de dahil olmak üzere daha fazla bilgi için Selenium ekibinin blog yayınına bakın.

Komut satırı işaretleri

Aşağıdaki komut satırı işaretleri, gözetimsiz modda kullanılabilir.

--dump-dom

--dump-dom işareti, hedef sayfanın serileştirilmiş DOM'sini stdout'a yazdırır. Örneğin:

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

Bu işlem, HTML kaynak kodunu yazdırmadan farklıdır. curl Chrome, --dump-dom çıktısını sağlamak için önce HTML'yi ayrıştırır. bir DOM'ye aktarması için, DOM'yi değiştirebilecek herhangi bir <script> öğesini yürütür ve ardından bu DOM'yi, serileştirilmiş bir HTML dizesine geri dönüştürür.

--screenshot

--screenshot işareti, hedef sayfanın ekran görüntüsünü alır ve screenshot.png mevcut çalışma dizininde. Bu, özellikle de --window-size işaretiyle birlikte gösterilir.

Örneğin:

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

--print-to-pdf

--print-to-pdf işareti, hedef sayfayı output.pdf adlı bir PDF dosyası olarak kaydeder mevcut çalışma dizinine ekleyin. Örneğin:

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

İsteğe bağlı olarak, yazdırmayı atlamak için --no-pdf-header-footer işaretini ekleyebilirsiniz. üstbilgi (geçerli tarih ve saat ile) ve altbilgi (geçerli tarih ve saat ile) sayı).

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

Not: --no-pdf-header-footer işaretinin arkasındaki işlev daha önce sunuluyordu. --print-to-pdf-no-header işaretiyle kullanılabilir. Proje zaman çizelgesine eski bayrak adına (eski) denk geliyor.

--timeout

--timeout işareti, maksimum bekleme süresini (milisaniye cinsinden) tanımlar. Sayfanın içeriği --dump-dom, --screenshot ve --print-to-pdf (sayfa hâlâ yükleniyor olsa bile).

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

--timeout=5000 işareti, Chrome'a yazdırmadan önce 5 saniye kadar beklemesini bildirir PDF'de bulabilirsiniz. Dolayısıyla bu işlemin çalışması en fazla 5 saniye sürer.

--virtual-time-budget

--virtual-time-budget, "ileri sarma" işlevi görür zamana bağlı herhangi bir kod için (örneğin, setTimeout/setInterval). Tarayıcının, tarayıcı tarafından kodu mümkün olduğunca hızlı bir şekilde düzenleyerek, sayfanın zaman geçiyor.

Nasıl kullanıldığını göstermek için artımlar, günlük kayıtları ve her saniyede bir sayaç gösterir setTimeout(fn, 1000) kullanılıyor. İlgili kod aşağıda verilmiştir:

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

Bir saniye sonra sayfa "1" değerini içerir; iki saniye sonra, "2" vb. 42 saniye sonra sayfanın durumunu nasıl yakalayacağınız ve PDF olarak nasıl kaydedeceğiniz aşağıda açıklanmıştır:

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

--allow-chrome-scheme-url

chrome:// URL'ye erişmek için --allow-chrome-scheme-url işareti gerekir. Bu işaret, Chrome 123 sürümünde kullanıma sunulmuştur. Aşağıda bununla ilgili bir örnek verilmiştir:

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

Hata Ayıklama

Chrome, gözetimsiz modda etkili şekilde görünmez olduğundan kulağa karmaşık gelebilir. bir teknik daha var. Gözetimsiz Chrome'da hata ayıklamak için söylediğimiz başlık düzeyi Chrome'a benzer.

Chrome'u --remote-debugging-port komut satırı işareti.

chrome --headless --remote-debugging-port=0 https://developer.chrome.com/

Bu, stdout'a benzersiz bir WebSocket URL'si yazdırır. Örneğin:

DevTools listening on ws://127.0.0.1:60926/devtools/browser/b4bd6eaa-b7c8-4319-8212-225097472fd9

Dikkatli bir Chrome örneğinde, oluşturduğumuz Bağlanmak için Chrome Geliştirici Araçları uzaktan hata ayıklama denetlemesi gerekir.

  1. chrome://inspect sayfasına gidin ve Yapılandır... düğmesini tıklayın.
  2. WebSocket URL'sindeki IP adresini ve bağlantı noktası numarasını girin.
    • Önceki örnekte 127.0.0.1:60926 değerini girdim.
  3. Bitti'yi tıklayın. Uzak Hedef tüm sekmeleriyle birlikte görünür ve listelenen diğer hedefler.
  4. Chrome Geliştirici Araçları'na erişmek ve uzaktan kumandayı incelemek için inspect'yi tıklayın. Sayfanın canlı görünümü dahil gözetimsiz hedef.

Chrome Geliştirici Araçları, uzaktaki gözetimsiz hedef sayfayı inceleyebilir

Geri bildirim

Gözetimsiz mod hakkındaki geri bildiriminizi öğrenmek için sabırsızlanıyoruz. Eğer hata bildiriminde bulunun.