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: Chromium, Debian, Google chrome, Headless, Microsoft edge, Mozilla firefox, Ubuntu, Vivaldi, Xorg
Kategorien: Linux, Ubuntu
Kommentare
Keine Kommentare
Kommentare