Seite 1 von 1
webbrowser.open verursacht seltsames Verhalten
Verfasst: Donnerstag 15. November 2012, 17:08
von anakin87
Hallo Community,
nachdem ich mich mit ein paar How2 und Tuts befasst habe, hat es mich Python erwischt.
Nur leider habe ich schon am Anfang ein paar Fragen zu einem einfachen Script.
Die Idee sieht so aus; ich möchte in gewissen Zeitabständen eine URL anzeigen -> so als eine Art Statusdisplay.
Der erste Versuch mittels default Browser (NetSurf)
Code: Alles auswählen
#!/usr/bin/python
import time
import webbrowser
web1=webbrowser.get()
web1.open('index1.html')
time.sleep(60)
web1.open('index2.html',0,True)
Ok vom Prinzip her funktioniert es, nur dass index2.html nicht im selben Tab geladen wird, sondern eine eigene Instanz des Browsers startet und die Seite darin anzeigt.
Leider wird mein Raspberry PI nicht soviel RAM haben um das einen ganzen Tag durchzuhalten.
Gut, dann nochmal mit einem geläufigeren Browser (Chromium)
Code: Alles auswählen
#!/usr/bin/python
import time
import webbrowser
web1=webbrowser.get('/usr/bin/chromium %s')
web1.open('index1.html')
time.sleep(60)
web1.open('index2.html',0,True)
Da ist das Verhalten nun sehr komisch: es wird chromium gestartet mit index1.html,
aber dann passiert nichts. Das Script arbeitet nicht weiter solange der Browser läuft.
Schließe ich nun den Browser, so kommt das Script zum sleep und öffnet mir erst danach index2.html
Ähm warum? Das verstehe ich nicht so ganz... :K
Ziel ist es letztendlich verschiedene Seiten in ein und dem selben Tab anzeigen zu lassen und jede Seite
bekommt einen Zeitrahmen (so ca. 1min)
Wo liegt nun mein Fehler und wie funktioniert es richtig?
Beste Grüße
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Donnerstag 15. November 2012, 19:09
von webspider
Ich glaube du solltest besser auf ein eigenes Userscript (d.h. Javascript welches im Browser ausgeführt wird) setzen für das erwünschte Verhalten statt webbrowser.open, da ich befürchte, dass man die gängigen Browser von außen nicht dazu bekommt eine Adresse im existierenden Tab zu öffnen (außer evtl. per xdotool).
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Donnerstag 15. November 2012, 19:12
von Leonidas
Wie kommst du darauf dass ``webbrowser.get("irgendwas")`` etwas sinnvolles macht? So wie ich das sehe gibt es einige registrierte Browser (da ist Chromium nicht dabei) und man kann welche selbst definieren. Schau dir doch mal
die Dokumentation des Webbrowser-Moduls an.
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 09:39
von anakin87
Naja das muss doch irgendiwe funktionieren

wenn selbst in der Doku steht (new=0 open in same browser window if possible)
Aus eben genau dieser Doku entstand die Idee... JavaScript will bzw. muss ich nicht unbedingt haben - da möchte ich lieber auf Python setzen; außer es geht technisch einfach nicht.
Was ist dann eigentlich der Unterschied zu einem registrierten Browser und zu webbrowser.get('<Browserpfad> %s')?
Im Netz habe ich auch schon öfters das get mit Browserpfad gesehen? Oder ist das nur die quick&dirty Methode?
Beste Grüße
EDIT:
Ich hab jetzt etwas herumprobiert und dabei ist folgendes herausgekommen...
http://nullege.com/codes/search/webbrowser.register
Code: Alles auswählen
#!/usr/bin/python
import webbrowser
import time
webbrowser.register('iceweasel',None,webbrowser.BackgroundBrowser('iceweasel'))
webbrowser.get('iceweasel').open('index1.html')
time.sleep(20)
webbrowser.get('iceweasel').open('index2.html',0,True)
Blöd ist halt nur, dass er mir ein neues Tab öffnet anstatt es im selben zu laden. Mir ist es eigentlich egal welcher Browser mir es anzeigt - Hauptsache er lädt es im selben Tab
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 10:23
von BlackJack
@Leonidas: Die Dokumentation zum `webbrowser`-Modul deckt anscheinend nicht alles ab was `get()` intern tatsächlich macht. Wenn man sich die Implementierung anschaut, sieht man zum Beispiel, dass man ein '&' anhängen sollte, wenn man den '%s'-Platzhalter angibt und gerne einen asynchron gestarteten Browser haben möchte:
Code: Alles auswählen
def get(using=None):
"""Return a browser launcher instance appropriate for the environment."""
if using is not None:
alternatives = [using]
else:
alternatives = _tryorder
for browser in alternatives:
if '%s' in browser:
# User gave us a command line, split it into name and args
browser = shlex.split(browser)
if browser[-1] == '&':
return BackgroundBrowser(browser[:-1])
else:
return GenericBrowser(browser)
else:
# ...
@anakin87: In der Dokumentation steht wie Du schon richtig sagst „new=0 open in same browser window if possible”, wobei die letzten beiden Worte entscheidend sind. Wenn das nicht möglich ist, na dann ist das halt nicht möglich.
Und spätestens wenn Du keinen von den Browsern verwendest, die das Modul kennt, sondern eine Kommandozeile mit Platzhalter angibst, dann bist *Du* dafür verantwortlich dem Browser dort auch mitzuteilen wie und wo er die URL öffnen soll. Sofern das möglich ist natürlich auch nur wieder.
Die simpelste, wenn auch nicht gerade schönste Lösung wenn es regelmässige Abstände sind, wäre wohl ein Refresh-Meta-Tag in der HTML-Seite, das dafür sorgt, dass sie regelmässig neu geladen wird.
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 11:34
von anakin87
Also eigentlich wird iceweasel von webbrowser._browsers aufgelistet und sollte funktionieren. Auf der Doku-Seite steht auch was von Konqueror den ich dann gleich mal ausprobieren muss.
EDIT: auch Konqueror der in der Doku auch angeführt wird öffnet mir es nicht im gleichen Tab.
Kann das irgendwer bestätigen, oder funktioniert es überhaupt das Aufrufen im gleichen Tab bei jemanden?
langsam bekomme ich Zweifel
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 11:49
von sparrow
Ich glaube nicht, dass überhaupt mit irgend einem Browser geht, wenn ich ehrlich bin.
Python kann da ja auch keine Magie machen, sondern dem Browsern beim Aufruf nur die Argumente auf der Kommandozeile mitgeben, die der Browser auch versteht.
Die Übersicht über diese Argumente für den Firefox findest du zum Beispiel
hier.
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 12:01
von anakin87
Ja das ist mir schon klar, aber die Doku suggestierte, dass es unter irgendwelchen Umständen möglich ist/war.
Falls es wirklich nicht möglich ist bleibt mir nichts anderes als JavaScript/AJAX mit iframes...

Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 13:05
von sparrow
Die Dokumentation ist an der Stelle vielleicht unvollständig (wie BlackJack festgestellt hat), aber sie suggeriert keineswegs etwas Falsches.
Hier ist nämlich von "Window" die Rede, nicht von "Tab". Und wenn du dir die Kommadozeilenargumente für den Firefox anschaust, wirst du sehen, dass es durchaus eine Option gibt etwas in einem neuen Fenster zu öffnen.
Ohne die Hintergründe zu kennen: der einfachste Weg wäre wohl (wenn du die Webinhalte nicht verändern kannst, und keine Lust hast etwas in JavaScript zu bauen) einfach eines der zahlreichen "reload"-AddOns für den Firefox zu installieren und damit die Webseite in regelmäßigen Abständen neu laden zu lassen.
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 13:43
von anakin87
Gut möglich, aber dann verstehe ich den Unterschied zwischen new=0 und new=2 nicht bei webbrowser.open...
Aber ich fürchte auch langsam, dass für mein Szenario das so nicht die Lösung ist - schade.
Jedoch soll mir das nicht den Spaß an Python vermiesen
@all danke für die Hilfe
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 14:52
von sparrow
Du könntest einen Blich in den entsprechenden Source-Code der Bibliothek werfen.
An
dieser Stelle trifft irgendwann der Aufruf für den Firefox auf.
Code: Alles auswählen
remote_action = ""
remote_action_newwin = ",new-window"
remote_action_newtab = ",new-tab"
remote_action wird verwendet wenn 0 übergeben wird,
remote_action_newwin bei einer 1,
remote_action_newtab bei einer 2. Es ist also relativ transparent was dort passiert und welche Argumente verwendet werden.
Wenn du selbst übrigens einen Browser vorgibst, der nicht nicht enthalten ist, wird der new-Parameter einfach ignoriert.
Gruß
Sparrow
Re: webbrowser.open verursacht seltsames Verhalten
Verfasst: Freitag 16. November 2012, 16:39
von anakin87
Ok nun wird mir einiges klar - wenn nichts definiert ist kann er auch nichts tun

Dann werd ich für dieses Problem eine andere Lösung suchen.
THX für die Erklärung