Monitorloser Modus in Chrome

Peter Kvitek
Peter Kvitek

Mit dem monitorlosen Modus von Chrome können Sie den Browser in einer unbeaufsichtigten Umgebung ausführen. ohne sichtbare UI. Im Prinzip kann Chrome auch ohne Chrome ausgeführt werden.

Der monitorlose Modus ist eine beliebte Wahl für die Browserautomatisierung. Projekte wie Puppeteer oder ChromeDriver:

Monitorlosen Modus verwenden

Übergeben Sie das Befehlszeilen-Flag --headless, um den monitorlosen Modus zu verwenden:

chrome --headless

Alten monitorlosen Modus verwenden

Bisher war der monitorlose Modus eine separate, alternative Browserimplementierung die als Teil desselben Chrome-Binärprogramms ausgeliefert wurden. Wurde nicht geteilt Chrome-Browsercode in //chrome

In Chrome gibt es jetzt einen einheitlichen Modus für den monitorlosen Modus und den Heads-Modus.

Der monitorlose Modus teilt Code mit Chrome.

Der alte monitorlose Modus ist vorerst weiterhin verfügbar mit:

chrome --headless=old

In Puppeteer

So verwenden Sie den monitorlosen Modus in 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();

In Selenium WebDriver

So verwenden Sie den monitorlosen Modus in Selenium WebDriver:

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

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

// …

await driver.quit();

Weitere Informationen sowie Beispiele zur Verwendung anderer Sprachbindungen finden Sie im Blogpost des Selenium-Teams.

Befehlszeilen-Flags

Die folgenden Befehlszeilen-Flags sind im monitorlosen Modus verfügbar.

--dump-dom

Das Flag --dump-dom gibt das serialisierte DOM der Landingpage in stdout aus. Beispiel:

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

Dies unterscheidet sich vom Drucken des HTML-Quellcodes, curl Damit du die Ausgabe von --dump-dom abrufen kannst, parst Chrome zuerst den HTML-Code in ein DOM wandeln, alle <script> ausführen, die das DOM ändern könnten, und wandelt dieses DOM wieder in einen serialisierten HTML-String um.

--screenshot

Mit dem Flag --screenshot wird ein Screenshot der Landingpage erstellt und unter dem Namen screenshot.png im aktuellen Arbeitsverzeichnis. Dies ist besonders nützlich in mit dem Flag --window-size kombinieren.

Beispiel:

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

--print-to-pdf

Das Flag --print-to-pdf speichert die Zielseite als PDF-Datei mit dem Namen output.pdf in im aktuellen Arbeitsverzeichnis. Beispiel:

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

Optional können Sie das Flag --no-pdf-header-footer hinzufügen, um den Druckvorgang wegzulassen Kopfzeile (mit dem aktuellen Datum und der aktuellen Uhrzeit) und Fußzeile (mit URL und Seite) Nummer).

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

Nicht: Die Funktion hinter dem Flag --no-pdf-header-footer war zuvor verfügbar mit dem Flag --print-to-pdf-no-header. Möglicherweise müssen Sie den alten Flag-Namen, falls Sie eine frühere Version verwenden.

--timeout

Das Flag --timeout definiert die maximale Wartezeit (in Millisekunden), nach der Der Inhalt der Seite wird von --dump-dom, --screenshot und --print-to-pdf, auch wenn die Seite noch geladen wird.

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

Das Flag --timeout=5000 weist Chrome an, mit dem Drucken bis zu 5 Sekunden zu warten in der PDF-Datei. Daher dauert die Ausführung dieses Vorgangs höchstens 5 Sekunden.

--virtual-time-budget

--virtual-time-budget fungiert als „Vorspulen“ für zeitabhängigen Code (z. B. setTimeout/setInterval). Dadurch wird der Browser gezwungen, so schnell wie möglich, während die Seite den Eindruck erweckt, dass die die Zeit tatsächlich vergeht.

Sehen Sie sich diese Demo an, um die Verwendung zu veranschaulichen. Inkrementierungen, Protokolle und Anzeigen von Zählern pro Sekunde mit setTimeout(fn, 1000). Hier ist der entsprechende Code:

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

Nach einer Sekunde enthält die Seite „1“. nach zwei Sekunden, „2“ usw. So erfassen Sie den Status der Seite nach 42 Sekunden und speichern sie als PDF:

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

--allow-chrome-scheme-url

Das Flag --allow-chrome-scheme-url ist für den Zugriff auf chrome://-URLs erforderlich. Dieses Flag ist ab Chrome 123 verfügbar. Beispiel:

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

Fehlerbehebung

Da Chrome im monitorlosen Modus praktisch unsichtbar ist, mag es kompliziert klingen. ein Problem zu lösen. Es ist möglich, die monitorlose Chrome-Version ähnlich wie Headful Chrome.

Starten Sie Chrome im monitorlosen Modus mit der --remote-debugging-port-Befehlszeilen-Flag.

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

Damit wird eine eindeutige WebSocket-URL für stdout ausgegeben, zum Beispiel:

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

In einer Chrome-Instanz können wir dann Remote-Debugging in Chrome DevTools ausführen, um eine Verbindung herzustellen zum monitorlosen Ziel hinzu und sehen Sie es sich an.

  1. Gehen Sie zu chrome://inspect und klicken Sie auf die Schaltfläche Konfigurieren....
  2. Geben Sie die IP-Adresse und die Portnummer aus der WebSocket-URL ein.
    • Im vorherigen Beispiel habe ich 127.0.0.1:60926 eingegeben.
  3. Klicken Sie auf Fertig. Es sollte ein Remote-Ziel mit allen zugehörigen Tabs und anderen aufgeführten Zielen.
  4. Klicken Sie auf inspect, um auf die Chrome-Entwicklertools zuzugreifen und die Remote-Version zu prüfen. Monitorloses Ziel mit Livestream der Seite.

Mit den Chrome-Entwicklertools kann eine monitorlose Zielseite geprüft werden

Feedback

Wir freuen uns auf Ihr Feedback zum monitorlosen Modus. Wenn auf Probleme stoßen, melden Sie den Fehler.