Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

Screenshots von Webseiten auf der Server-Kommandozeile mit Firefox, Chrome, Chromium, Edge oder Vivaldi erstellen

Mitunter braucht man einen Screenshot bzw. ein Bildschirmfoto von einer Website auf der Kommandozeile in einem Script, um das Bild dann entsprechend weiterzuverarbeiten. Auch in Linux ist das relativ einfach mit den bereits vorhandenen Browsern und das funktioniert auch auf einem Webserver ohne installiertes Xorg.

Die einfachste Variante ist es einen der eventuell vorhandenen Browser im sogenannten headless-Modus zu nutzen. Dafür ist ist kein X-Server notwendig. Beim Firefox (Mozilla Firefox 94.0) landet man auf der Kommandozeile dann bei diesen Argumenten:

/usr/bin/firefox --headless --window-size=1920,1080 --screenshot screenshot.png https://linuxspicker.net/

--headless lässt den Browser ohne graphisches Interface laufen. --windows-size definiert die gewünschte Auflösung für den Schnappschuss. --screenshot löst den Schnappschuss aus und screenshot.png ist dann die Datei, in welche das Bildschirmfoto gespeichert wird. Zum Schluss kommt noch die URL der entsprechenden Website. Leider lassen sich so weder Javascript abschalten — Werbung oder/und Cookie-Hinweis — noch ein Screenshot ohne Bilder anfertigen.

Etwas mehr Optionen bieten die Browser der Chromium-Familie.

/usr/bin/chromium --headless --hide-scrollbars --window-size=1920,1080 --screenshot=screenshot.png --disable-gpu --disable-audio-output --run-all-compositor-stages-before-draw --virtual-time-budget=10000 --blink-settings=imagesEnabled=false https://linuxspicker.net/

Zusätzlich zu den übereinstimmenden Parametern zum Firefox gibt es beispielsweise die Möglichkeit per --blink-settings=imagesEnabled=false die Anzeige von Bildern abzuschalten. Früher soll auch das Kommandozeilenargument --disable-javascript funktioniert haben. Mit den aktuellen Browserversionen (Google Chrome 96.0.4664.45; Microsoft Edge 95.0.1020.53; Vivaldi 4.3.2439.71 stable; Chromium 90.0.4430.212 built on Debian 10.9, running on Debian 10.11) funktionierte das aber nicht. Die Parameter --run-all-compositor-stages-before-draw --virtual-time-budget=10000 sorgen dagegen dafür, dass das Rendern der Website im Rahmen des virtuellen Zeitbudgets abgewartet wird, was zu einer eventuell vollständigeren Darstellung führt. --virtual-time-budget ist in Millisekunden angegeben.

Weitere mögliche Einstellungen für blink finden sich in der Settings.json5 im Chromium-Quelltext.

Eine komplette?? Liste der Kommandozeilenargumente der Chromium-Browser findet sich hier.

In PHP lässt sich das dann ohne größere Schwierigkeiten per Shell-Kommando verwenden. Beispielsweise so:

$working_dir = "images/";
$screenshot = "screenshot.png";
$link = "https://linuxspicker.net/";

$screen = exec('/usr/bin/firefox --headless --window-size=1920,1080 --screenshot '. $working_dir.$screenshot .' '. $link, $screenshot_output, $screenshot_code);

In obigem Beispiel werden der Exit-Code in die Variable $screenshot_code und die Ausgabe des Kommandos in die Variable $screenshot_output geschrieben und lassen sich dann entsprechend auswerten. Die fertige Datei liegt dann im Verzeichnis images/screenshot.png und auf diese kann dann nachher zugegriffen und diese weiter verwendet werden. Beispielsweise das Bild ins jpeg- oder Webp-Format umwandeln. Das Ganze lässt sich natürlich auch mit shell_exec bewerkstelligen.


Stichworte: , , , , , , , ,
Kategorien: ,


Kommentare

Keine Kommentare

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.