Tryb bez interfejsu graficznego w Chrome

Peter Kvitek
Peter Kvitek

Tryb bez interfejsu graficznego Chrome umożliwia uruchamianie przeglądarki w środowisku nienadzorowanym. bez widocznego interfejsu użytkownika. Możesz używać Chrome bez Chrome.

Tryb bez interfejsu graficznego jest często stosowany w automatyzacji przeglądarek w takich projektach jak: Puppeteer lub ChromeDriver.

Korzystanie z trybu bez interfejsu graficznego

Aby używać trybu bez interfejsu graficznego, przekaż flagę wiersza poleceń --headless:

chrome --headless

Używaj starego trybu bez interfejsu graficznego

Wcześniej tryb bez interfejsu graficznego osobnej implementacji alternatywnej przeglądarki które trafiały w ramach tego samego pliku binarnego Chrome. Nie udostępniono wszystkie fragmenty kodu przeglądarki Chrome //chrome

W Chrome dostępne są teraz ujednolicone tryby bez interfejsu graficznego i nagłówka.

Tryb bez interfejsu graficznego udostępnia kod Chrome.

Na razie stary tryb bez interfejsu graficznego jest nadal dostępny w przypadku:

chrome --headless=old

W Puppeteer

Aby użyć trybu bez interfejsu graficznego w aplikacji Puppeteer:

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();

W Selenium-WebDriver

Aby użyć trybu bez interfejsu graficznego w Selenium-WebDriver:

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

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

// …

await driver.quit();

Więcej informacji, w tym przykłady zastosowania innych wiązań językowych, znajdziesz w poście na blogu zespołu Sellenium.

Flagi wiersza poleceń

W trybie bez interfejsu graficznego dostępne są poniższe flagi wiersza poleceń.

--dump-dom

Flaga --dump-dom wyświetla zserializowany DOM strony docelowej do stdout. Na przykład:

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

Różni się to od drukowania kodu źródłowego HTML, którego można użyć curl Aby wyświetlić dane wyjściowe funkcji --dump-dom, Chrome najpierw analizuje kod HTML do DOM, wykonuje wszystkie polecenia <script>, które mogą zmieniać DOM, a następnie przekształca ten DOM z powrotem w zserializowany ciąg kodu HTML.

--screenshot

Flaga --screenshot powoduje wykonanie zrzutu ekranu strony docelowej i zapisanie go jako screenshot.png w bieżącym katalogu roboczym. Jest to szczególnie przydatne w przypadku: w połączeniu z flagą --window-size.

Na przykład:

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

--print-to-pdf

Flaga --print-to-pdf zapisuje stronę docelową jako plik PDF o nazwie output.pdf w w bieżącym katalogu roboczym. Na przykład:

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

Opcjonalnie możesz dodać flagę --no-pdf-header-footer, aby pominąć wydruk nagłówek (z bieżącą datą i godziną) i stopkę (z adresem URL i stroną), ).

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

Nie: funkcja dostępna za flagą --no-pdf-header-footer była wcześniej dostępna dostępny z flagą --print-to-pdf-no-header. Może być konieczne użycie starą nazwę flagi, jeśli jest używana poprzednia wersja.

--timeout

Flaga --timeout określa maksymalny czas oczekiwania (w milisekundach), po którym zawartość strony jest przechwytywana przez narzędzia --dump-dom, --screenshot oraz --print-to-pdf, nawet jeśli strona nadal się wczytuje.

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

Flaga --timeout=5000 informuje Chrome, że musi poczekać do 5 sekund przed rozpoczęciem drukowania plik PDF. Z tego powodu ten proces może potrwać maksymalnie 5 sekund.

--virtual-time-budget

Element --virtual-time-budget umożliwia „przejście do przodu” dla dowolnego kodu zależnego od czasu (np. setTimeout/setInterval). Wymusza wykonanie przez przeglądarkę kodu strony, jednocześnie dbając o to, aby strona uważała, która tak naprawdę upływa.

Aby zilustrować zastosowanie tej funkcji, spójrz na tę wersję demonstracyjną, przyrosty, dzienniki i wyświetlenie licznika co sekundę za pomocą funkcji setTimeout(fn, 1000). Oto odpowiedni kod:

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

Po sekundzie strona zawiera wartość „1”; po dwóch sekundach, „2” itd. Aby zapisać stan strony po 42 sekundach i zapisać ją jako plik PDF:

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

--allow-chrome-scheme-url

Flaga --allow-chrome-scheme-url jest wymagana, aby uzyskać dostęp do chrome:// adresów URL. Ta flaga jest dostępna od Chrome 123. Oto przykład:

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

Debugowanie

Chrome jest niewidoczny w trybie bez interfejsu graficznego, więc może brzmieć trudno aby rozwiązać problem. Można debugować Chrome bez interfejsu graficznego w sposób, przypominające upiorny Chrome.

Uruchom Chrome w trybie bez interfejsu graficznego za pomocą Flaga wiersza poleceń --remote-debugging-port.

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

Powoduje to wydrukowanie unikalnego adresu URL WebSocket do protokołu stdout, na przykład:

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

W przejrzystej instancji Chrome możemy następnie użyć funkcji Zdalne debugowanie w Narzędziach deweloperskich w Chrome, aby się połączyć do celu bez interfejsu graficznego i je sprawdzić.

  1. Przejdź na stronę chrome://inspect i kliknij przycisk Konfiguruj....
  2. Wpisz adres IP i numer portu z adresu URL WebSocket.
    • W poprzednim przykładzie mam wpisany ciąg 127.0.0.1:60926.
  3. Kliknij Gotowe. Powinny być widoczne wszystkie karty i cel zdalny. inne cele na liście.
  4. Kliknij inspect, aby otworzyć Narzędzia deweloperskie w Chrome i sprawdzić pilota. Cel bez interfejsu graficznego, z podglądem na żywo strony.

Narzędzia deweloperskie w Chrome mogą sprawdzać zdalną stronę docelową bez interfejsu graficznego

Prześlij opinię

Chętnie poznamy Twoją opinię na temat trybu bez interfejsu graficznego. Jeśli napotkanych problemów, zgłoś błąd.