Firefox selenium auf Rasbian

Octarock

Ensign
Registriert
Aug. 2016
Beiträge
177
Halo,

ich versuche auf meinen Raspberry Pi3 mit Rasbian Firefox automatisch mit Python starten zu lassen, das Browserfenster zu maximieren und schließlich eine Html-Datei von Speicher zu öffnen.
Der Plan: Der Pi soll schlussendlich einen 5" Display haben und die Macadressen anzeigen, die mit dem Hotspot des Pi's verbunden sind. Das Pythonskript startet automatisch beim Bootvorgang und auch den Hotspot, das Skript, das die Macadressen ausließt, als auch das Pythonskript, das eine Liste in der Html-Datei anpasst habe ich bereits.
Nun ist mein Problem wie ich die Html-Datei mit Python automatisch anzeige und wenn die Liste aktualisiert wurde auch die Seite neu laden kann. Da ich schon mal auf Windows mit Python Selenium gearbeitet habe und es mir als einzige Lösung für diese Aufgabe eingefallen ist habe ich mich für den Ansatz Firefox SE + Selenium + Python entschieden. Falls ihr einen bessere Lösung kennt bin ich für alle Vorschläge offen.
Ich habe also Firefox SE installiert und dann diese Anleitung befolgt nur ohne den ganzen virtuellen Displayzeug weil ich will mein Firefox ja genau sehen. Nun öffnet sich zwar Firefox, wenn ich das dort gegebene Skript (ohne virtuelles Display) ausführe nur geschieht keine Eingabe in das Suchfeld und irgendwann breche ich dann ab. Ich habe leider keine Ahnung woran es liegen kann, denn Selenium und geckodriver funktionieren ja offensichtlich wenn sich das Firefox-Fenster öffnet oder?
Ich hoffe ihr könnt mir weiterhelfen, freue mich über jede Antwort :)

MFG
 
Warum nicht in der shell? Spart doch schon einmal deutlich ressourcen. Oder brauchst Du es quietschbunt?

Du kannst firefox auch mit der "--kiosk"-Option starten (Referenz) bei der Anmeldung an den WM.

Wofür brauchst Du denn Selenium?
 
Danke für die Antwort ich probiere es gleich einmal aus.
Ne ich brauche das ganze Workaround einegndlich nicht ich kannte den Weg über Python und war mir garnicht bewusst dass es auch anders geht.
 
Also die --kiosk Funktion funktioniert leider nicht. Es öffnet sich zwar ein Fenster aber nur maximiert und nicht in Vollbild und der Link wird nicht aufgerufen. Anbei der Befehl den ich benutzt habe falls ich etwas falsch gemacht habe.
Code:
firefox --kiosk /home/pi/Desktop/test.html
Darauf habe ich versucht ein Firefox-Profil anzulegen mit den Befehl
Code:
firefox -ProfileManager"
Als das Profil gestartet ist habe ich den Vollbildmodus aktiviert und habe dann das Fenster mit alt+f4 geschlossen wie es in einen Forum beschrieben wurde. Darauf habe ich den folgenden Befehl ausprobiert leider war das Fenster wieder nicht in Vollbildmodus
Code:
firefox -no-remote -P "Vollbild" -new-window /home/pi/Desktop/test.html
Da bis dahin nichts funktioniert habe ich darauf einen anderen Lösungsvorschlag aus einem Forum befolgt:
Code:
xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11 &
firefox -url /home/pi/Desktop/test.html
Das funktioniert jetzt aber nur manchmal und dann auf einmal wieder nicht mit der Fehlermeldung: "X Error of failed request: BadWindow (invalid Window parameter) ..."

Aber selbst wenn das jetzt irgendwann funktioniert wie kann ich die Seite dann refreshen wenn sich die html datei verändert hat? Ich hoffe ihr könnt mir weiter helfen.
 
OctaRock schrieb:
Also die --kiosk Funktion funktioniert leider nicht. Es öffnet sich zwar ein Fenster aber nur maximiert und nicht in Vollbild und der Link wird nicht aufgerufen. Anbei der Befehl den ich benutzt habe falls ich etwas falsch gemacht habe.
Code:
firefox --kiosk /home/pi/Desktop/test.html

Was für eine Firefox-Version nutzt Du denn?

--kiosk URL

Open URL full screen without user interface. Firefox 71 and later.



OctaRock schrieb:
Code:
xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11 &
firefox -url /home/pi/Desktop/test.html
Das funktioniert jetzt aber nur manchmal und dann auf einmal wieder nicht mit der Fehlermeldung: "X Error of failed request: BadWindow (invalid Window parameter) ..."

Die Reihenfolge ist kurios. Ich hätte das xdotool jetzt erst drüberbügeln lassen, wenn der firefox gestartet ist. Sonst wird das Tool nichts finden (wie die Fehlermeldung besagt).
 
ich benutze Firefox esr 68 (für Raspberry Pi der die einzigste Version) also dies würde erklären warum die kiosk funktion nicht funktioniert.
Und bei xdotool hatte ich auch zuerst die andere Reihenfolge (hat auch spontan zu Fehlermeldungen geführt) ich habe mich dann aber an der Antwort von Ekevoo auf Zero's Kommentar orientiert. Kann sein das ich seine Antwort falsch ferstanden habe aber generell ist mir bei ihm nunmal die andere Reiehnfolge aufgefallen
 
Bei der Version geht der Kiosk-Modus nur über add-on, wovon es ein paar unterschiedliche, je nach Verwendungszweck, gibt.

OctaRock schrieb:
ich benutze Firefox esr 68 (für Raspberry Pi der die einzigste Version) also dies würde erklären warum die kiosk funktion nicht funktioniert.

Wenn Du raspbian nutzt, kannst Du auch die debian-Quellen für armhf nutzen. Sid ist auf der 72. Du könntest natürlich auch, um Dir spätere Komplikationen zu vermeiden, einfach Chromium aus den Raspbian-Quellen nutzen, auch der unterstützt einen Kiosk-Modus.
 
Zuletzt bearbeitet:
Danke ich nutze jetzt einfach chromium und das funktioniert über die Kiosk Funktion super. Noch ne Idee wie ich die Seite nach einer Veränderung aktualisieren kann?
 
Warum lässt Du die Seite nicht automatisch alle x Minuten neu laden? Kannst Du z.B. mit eingebettetem Java-script erreichen. Oder Du stellst die Informationen in einem Frame dar und aktualisierst nur diesen (auf ähnliche Weise). Dazu brauchst Du nicht einmal von extern auf den Browser zugreifen, das kann der auch schon selber.
 
ich dachte eigentlich meine Probleme wären gelöst jedoch scheint eine Aktualisierung über JS nicht auszureichen.
Der Python-Code verändert nun also die html-Datei die Änderungen werden jedoch nicht angezeigt. erst wenn ich f5 drücke erscheint die Veränderung. Meine Intervall-Funktion funktioniert aber, da die damit gesteuerte Uhr auch funktioniert.
Kann es sein, dass wenn chromium die html Datei lädt, diese in einen Cache geladen wird und die Veränderungen der html-Datei deshalb nicht zu sehen sind da ich halt nicht die zwischengespeicherte Version verändere?
 
Wie aktualisierst Du denn (Code)?
 
Code:
from bs4 import BeautifulSoup
with open("H:/atWork/Raspberry/test.html", "r") as page:
    soup = BeautifulSoup(page, features='lxml')
    
# hier veränder ich ich die Variable soup

with open("H:/atWork/Raspberry/test.html", 'w') as page:
    page.write(soup.prettify())
War das gefragt?
 
Ich hatte jetzt mehr etwas im Sinne von
Code:
setTimeout("location.reload(true);",time*1000);
erwartet...
 
ach du meinst das in JS. Also ich hatte es jetzt so:
Code:
var x = setInterval(function()
  {
     document.getElementById("div_user").contentWindow.location.reload(true);
  }, 1000);
ich hatte es auch mal mit ".innerHTML +=" " ausprobiert aber hat auch nicht funktioniert
 
Hm, könnte Schwierigkeiten geben, vor Allem, weil Du einen recht kurzen Refresh angesetzt hast. Es wäre einfacher, das gesamte Dokument neu zu laden, besonders, wenn es aus vielen, verschiedenen Elementen besteht.
 
also ich kann auch auf 5 Sekunden hoch gehen. Und eigentlich ist der reine HTML Teil nicht groß es handelt sich nur um eine Liste die mit Namen aufgefüllt wird und auch nur die muss neu angezeigt werden.
Aber selbst wenn ich die ganze Seite neu laden würde wird dann nicht wieder das selbe Problem auftreten wie zuvor? Also dass die Änderungen an der html-Datei nicht sichtbar sind?
 
Sollte eigentlich nicht. Es sei denn, Du arbeites mit Varnish oder einem reverse-proxy. Dann kann es ein wenig dauern, bis die Änderungen ersichtlich sind.
 
ich habe jetzt einfach mal testweise in die Interval-Funktion folgenden Code eigesetzt:
Code:
document.getElementById("div_user").innerHTML += "<p id='reload'></p>"
Ich habe die html-Datei im Browser geöffnet und es ist erwartungsgemäß jede Sekunde eine Element p erschiehnen (im Inspektor). Ich habe nun die html-Datei bearbeitet (Text in den p-Tag eigegeben) und dann gespeichert.Die Webseite hat sich jedoch nicht automatisch angepasst also in diesen Fall ist zwar immernoch ein Element p aufgetaucht aber ohne Textinhalt.
Ne idee was ich jetzt machen kann?
 
Zuletzt bearbeitet:
Ich bin kein Experte (fern davon entfernt), weder in HTML noch in Java. Ich würde die komplette Seite neu laden lassen und schauen, wie's sich verhält.

Alternativ hätte ich mir in einer VM netdata installiert und mir den Quellcode der Seite angeschaut, versucht, zu ergründen, was ich davon wie für mein Vorhaben umschreiben könnte.
 
Zurück
Oben