Posts Tagged ‘Chromium’

Mittwoch, 27. März 2024

Headless Chrome verrät sich über seinen User Agent

Headless Chrome eignet sich wunderbar, wenn man Web-Seiten mittels über Cron Jobs aufgerufenen bash-Scripts automatisiert abrufen möchte.

In meinem Anwendungsfall sende ich mir an Werktagen um 9:00 Uhr jeweils das Mittagsmenu des örtlichen Metzgers per Email zu.

Dies tat ich bis vor einigen Wochen mittels wget, doch serverseitig hat irgendwas geändert, und das CMS und/oder der Serverbetreiber haben nun eine Landeseite vorgeschaltet, die überprüft, ob ein „realer“ Benutzer oder ein Bot auf die Seite zugreift.

Anstelle des gewünschten Seiteninhalts bekam ich so seither nur noch eine HTML-Seite mit viel komprimiertem JavaScript-Code zu sehen, welcher höchstwahrscheinlich für die Erkennung und Weiterleitung verantwortlich ist.

Headless Chrome half hier:

chromium --proxy-auto-detect --temp-profile --disable-gpu --headless --virtual-time-budget=5000 --dump-dom "https://www.mittagsmenu.com/" > "/tmp/mittagsmenu.html"

Die Option --virtual-time-budget=5000 ist super, denn sie gaukelt vor, dass nach dem Laden 5 Sekunden vergangen sind. Genug, um die Landeseite aufzurufen, die Checks durchlaufen zu lassen, und dann den tatsächlichen gewünschten Inhalt anzuzeigen.

Das funktionierte wunderschön bis vor einigen Tagen, als kein Menu mehr via Email eintraf. Irgendwie kam auch Headless Chrome nicht mehr über die Landeseite hinaus. Doch wieso?

Bald einmal kam ich darauf: Wird Headless Chrome wie oben aufgerufen, identifiziert sich der Browser als Headless laufender Chrome (!):

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/96.0.4664.110 Safari/537.36

Kein Wunder entdeckte und blockierte die Bot-Abwehr den Zugriff.

Zum Glück war die Lösung des Problems ganz einfach:

chromium --proxy-auto-detect --temp-profile --disable-gpu --headless --virtual-time-budget=5000 --dump-dom --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" "https://www.mittagsmenu.com/" > "/tmp/mittagsmenu.html"

… und seither funktioniert das Script wieder wie gewünscht. Das Argument --user-agent="" war alles, was es dazu brauchte.

Selenium headless: How to bypass Cloudflare detection using Selenium half mir dabei auf die Sprünge.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 10. Februar 2020

Raspberry Pi zeigt ständig „Can’t update Chromium“ Overlay an

Mein Dashboard zu Hause läuft auf einem Raspberry Pi 3 mit Debian Buster 10.2. Der RPi lädt beim morgendlichen Neustart um Punkt 05:00 Uhr den Chromium-Browser, welcher die Web-Site mit dem Dashboard aufruft.

Seit ein paar Tagen zeigt Chromium oben rechts ein Layover mit folgender Meldung an:

Can’t update Chromium

Chromium couldn’t update to the latest version, so you’re missing out on new features and security fixes.

(da ich selber kein Photo des Dashboards angefertigt habe, verlinke ich hier auf einen Screenshot eines anderen Benutzers aus dem Internet)

Da Debian kein Update von Chromium anbietet, hilft ein apt-get upgrade chromium hier leider nicht weiter.

Das Symptom behebt man, indem man Chromium mit einem zusätzlichen Kommandozeilenargument startet — nachfolgend ein Auszug aus /home/pi/.config/lxsession/LXDE-pi/autostart:

...
@chromium-browser --no-default-browser-check --check-for-update-interval=604800 --disable-pinch --incognito --kiosk

Den Tipp mit --check-for-update-interval=604800 (Eintrag in der Liste der Kommandozeilenargumente) habe ich auf Stack Overflow in der Frage Disable “chrome is out of date” notification gefunden.

Da man als verantwortungsvoller SysAdmin entweder Debian unattended-upgrades respektive cron-apt (Vergleich) eingerichtet hat, oder sich zumindest automatisiert über Paket-Aktualisierungen informieren lässt, ist diese Symptombekämpfung vertretbar.

Die Entwickler von Chromium könnten sich meiner bescheidenen Meinung nach überlegen, ob es nicht besser wäre, nur dann eine Meldung anzuzeigen, wenn auch tatsächlich ein Update verfügbar ist. Denn die Meldung erscheint rein basierend auf dem Alter der Applikation, nicht basierend darauf, ob eine neue Version verfügbar ist:

there’s background process that checks the build date against the current time, and will start to complain if it’s more than 12 weeks ago.

Quelle: Debian Bug report logs – #943668 Getting „Can’t update Chromium“ notifications

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 22. Juni 2015

Raspberry Pi 2 einrichten (6/n): Automatisch in einen Web-Browser starten

Da ich meinen Raspberry Pi 2 dazu verwende, ein Dashboard anzuzeigen, soll der Taschencomputer nach einem Kaltstart automatisch aufstarten, sich mit dem Standardbenutzer in die graphische Oberfläche einloggen und danach ein Web-Browser-Fenster mit einer bestimmten URL öffnen. Dabei soll nur der Web-Site-Inhalt angezeigt werden, nicht aber die Fensteroberfläche des Window-Managers.

Automatischer Login

Auf der Kommandozeile öffnet man raspi-config und aktiviert dort die Option Enable Boot to Desktop/Scratch. Wichtig ist, dass man die Option mit den Cursortasten auswählt und danach mittels Tabulator auf „OK“ springt und dieses auch betätigt.

Quelle: RASPI-CONFIG

Automatischer Start des Web-Browsers mit einer bestimmten URL

Damit nun die gewünschte Web-Site angezeigt wird, muss man dem Betriebssystem nun noch sagen, dass bei jedem Login in die grafische Oberfläche ein entsprechender Befehl ausgeführt werden soll:

~/.config/lxsession/LXDE-pi/autostart

@xset s off
@xset -dpms
@xset s noblank

@unclutter -idle 1
# PROD
#@chromium-browser --incognito --kiosk http://dashboard.local/

# DEBUG
@chromium-browser --remote-debugging-port=4444 --show-fps-counter --incognito --kiosk http://dashboard.local/

Quelle: How to auto start chromium after boot on the Raspberry 2 (2015-01-31 debian wheezy)?

Ferner: How To Autostart Apps In Rasbian LXDE Desktop

Auch: Raspberry Pi Dashboard Kiosk

Wichtig: In vielen Anleitungen liest man, dass man die Datei /etc/xdg/lxsession/LXDE-pi/autostart (Raspberry Pi 2) respektive die Datei /etc/xdg/lxsession/LXDE/autostart (Raspberry Pi 1) mit den obigen Befehlen ergänzen soll. In meinem Fall hat das zu einer einstündigen Debugging-Session geführt, die erst mit folgendem Hinweis gelöst werden konnte:

Note: If both files are present, lxsession only executes the local file as of v0.4.9

Aus irgendeinem Grund war bei meiner Installation die Datei ~/.config/lxsession/LXDE-pi/autostart vorhanden, weshalb die Einträge in den generischen autostart-Dateien nie berücksichtigt wurden.

Quelle: LXDE

Mauszeiger ausblenden

Damit der Mauszeiger ausgeblendet wird, muss noch folgendes Paket installiert werden:

# apt-get install unclutter

Das Programm wird anschliessend beim Ausführen der Autostart-Datei ausgeführt.

Quelle: Step 16: Hiding the mouse pointer

Alternative: Window Manager umgehen und direkt in ein Browser-GUI starten

Dank an Simon Jenny für den Hinweis — leider bleibt der Bildschirm schwarz, diese Lösung funktioniert also derzeit nicht.

~/.xinitrc

xset -dpms &
xset s off &
unclutter -idle 1 &

exec chromium-browser \
--window-position=0,0 \
--window-size=1080,1920 \
--incognito \
--kiosk \
http://dashboard.local/

Folgende zusätzliche Parameter könnten ebenfalls hinzugefügt werden:

...
--no-first-run \
--disable \
--disable-translate \
--disable-infobars \
--disable-suggestions-service \
--disable-save-password-bubble \
--disk-cache-dir=/tmp/chromium/cache/ \
--user-data-dir=/tmp/chromium/user_data/ \
--show-fps-counter \
--remote-debugging-port=4444 \
...

/etc/rc.local

...
/usr/bin/xinit /home/pi/.xinitrc &
exit 0

Quelle: Raspberry Pi Information Radiator: Booting into a Browser

Tags: , , , , , , , ,
Labels: IT, Linux

5 Kommentare | neuen Kommentar verfassen

Montag, 22. Juni 2015

Raspberry Pi 2 einrichten (4/n): Chromium installieren

Nachdem der Raspberry Pi 2 auf Raspbian Jessy läuft, können wir die neueste verfügbare Version des Chromium-Browsers herunterladen und installieren. Wir bedienen uns dazu der Repositories von Ubuntu und laden uns (Stand 22. Juni 2015) folgende zwei .deb-Pakete herunter:

Die Links zu den vorkompilierten Binaries finden sich auf den beiden Paket-Seiten rechts im Abschnitt „Downloadable Files“.

WICHTIG: Unter Raspberry Pi 1 läuft nur die unter Wheezy verfügbare Version 22 von Chromium. Neuere Versionen funktionieren unter diesem System nicht, weil die ARMv6-CPU des Raspberry Pi 1 keine hardwarebasierte Fliesskommaeinheit mitbringt. Das armhf-Paket von Ubuntu setzt diese CPU-Einheit aber leider voraus. Wer Chromium trotzdem auf dem nachfolgenden Weg installiert, erhält spätestens beim Start von Chromium folgende Fehlermeldung:

$ chromium-browser --version
Illegal instruction

Raspberry Pi 2 basiert glücklicherweise auf der ARMv7-Plattform und hat diese Einheit mit an Bord.

Sobald die Dateien im lokalen Dateisystem vorliegen, installiert man sie folgendermassen:

# dpkg -i chromium-browser_43.0.2357.81-0ubuntu0.15.04.1.1170_armhf.deb chromium-codecs-ffmpeg-extra_43.0.2357.81-0ubuntu0.15.04.1.1170_armhf.deb

Quelle: Installing Google Chromium on ARM devices with Flash plugin – solution

Ob die Installation erfolgreich war, zeigt folgender Befehl auf der Kommandozeile:

$ chromium-browser --version
Chromium 43.0.2357.81 Built on Ubuntu 15.04, running on Raspbian 8.0

Tags: , , , , ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen