Seite 1 von 1
Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 18. Mai 2018, 22:43
von wolfilein
Da in Firefox auf meinem grossen iMac sehr viele Lesezeichen sind, habe ich mit AppleScript ein einfaches Programm geschrieben, es öffnet eine Internetseite, macht 30 Sekunden Pause, dann die nächste Seite, usw. Eine definierte Pausenzeit ist natürlich unpraktisch, besser wäre ein Befehl, dass nach Drücken einer Taste das Programm die nächste Seite öffnet, leider war auch der Apple-Support nicht in der Lage, mir zu helfen, vielleicht kann AppleScript das auch gar nicht.
Also habe ich mir heute Python runtergeladen, und auch xampp, und als absoluter Anfänger mal rumprobiert. Mit urlopen() scheint man Internetseiten öffnen zu können, aber ich bekomme immer die Meldung, da wäre etwas nicht definiert. Ich bräuchte also nur 3 Befehle, Öffnen einer Internetseite, Pause, weitermachen auf Tastendruck. Sieht ganz einfach aus, kann hier jemand helfen?
Danke und Gruss
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 18. Mai 2018, 23:22
von pixewakb
Code: Alles auswählen
import webbrowser
urls = ["http://www.python-forum.de",
"http://www.python.org"]
for url in urls:
webbrowser.open(url)
input(">>> Weiter? ")
Das ist jetzt mal sehr rustikal umgesetzt.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Mittwoch 23. Mai 2018, 07:32
von wolfilein
Danke für die Antwort, funktioniert nur für die erste Internetseite, danach passiert nichts. So sieht jetzt mein Programm aus:
import webbrowser
urls = ["
https://www.nzz.ch/"]
for url in urls:
webbrowser.open(url)
input(">>> Weiter? ")
urls = ["
https://www.golem.de/ticker/"]
webbrowser.open(url)
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Mittwoch 23. Mai 2018, 07:47
von sls
Bitte deinen Source-Code nächstes mal in Python-Code-Tags definieren. Was du gebaut hast funktioniert deshalb nicht, weil in deiner URL-Liste nur ein Element vorhanden ist. Was du wahrscheinlich möchtest ist das:
Code: Alles auswählen
urls = ['https://golem.de', 'https://www.nzz.ch/']
for url in urls:
webbrowser.open(url)
input(">>Weiter?")
Edit: ich sehe gerade, dass das exakt das ist, was pixewakb dir schon schrieb.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Mittwoch 23. Mai 2018, 09:14
von pixewakb
wolfilein hat geschrieben: Freitag 18. Mai 2018, 22:43
Da in Firefox auf meinem grossen iMac sehr viele Lesezeichen sind, habe ich mit AppleScript ein einfaches Programm geschrieben, es öffnet eine Internetseite, macht 30 Sekunden Pause, dann die nächste Seite, usw. Eine definierte Pausenzeit ist natürlich unpraktisch, besser wäre ein Befehl, dass nach Drücken einer Taste das Programm die nächste Seite öffnet[...]
Also habe ich mir heute Python runtergeladen, und auch xampp, und als absoluter Anfänger mal rumprobiert. Mit urlopen() scheint man Internetseiten öffnen zu können, aber ich bekomme immer die Meldung, da wäre etwas nicht definiert. Ich bräuchte also nur 3 Befehle, Öffnen einer Internetseite, Pause, weitermachen auf Tastendruck. Sieht ganz einfach aus, kann hier jemand helfen?
Also mein Skript funktioniert, ich habe es gerade am Rechner getestet:
Mir ist gerade nicht klar, was Du machst, dass Du das nicht siehst oder nicht zu sehen bekommst?
Also:
xampp (nutze ich auch), hat nichts mit deinem Problem zu tun. Das ist ein Apache-Server lokal auf einem Rechner aufgesetzt.
urlopen() hat ebenfalls nichts mit Deinem Problem zu tun. Das hast Du wahrscheinlich aus dem urllib-package und das wird da genutzt, um Webseiten (HTML-Code) aus dem Netz zu laden ("parsen") und dann auszuwerten. Eine Seite im Browser kannst du damit nicht öffnen.
Mir ist dein Fehler nicht klar, ich habe aber auch keine iMac-Erfahrung: Wenn Du 'mein' Skript in IDLE ausführst, dann siehst du die Python-Shell, die von Dir eine Eingabe erwartet, wenn Du das Skript direkt durch Doppelklick (unter Windows) startest, dann siehst du ein Konsolenfenster (weiß auf schwarz) und wirst um eine Tasteneingabe gebeten. Du hättest hier schon die Python-Datei von skriptname.py nach skriptname.pyw umbenennen müssen, um die Abfrage nicht zu sehen, was ich hier nicht erwarte. Dass der webbrowser-Schnipsel eine Seite öffnet, spricht dagegen, dass das Modul auf einem Mac nicht funktioniert.
Ich bin mir nicht sicher, was Dir vorschwebt. Eine Zeitsteuerung wäre m. E. auch einfach zu realisieren (habe ich auch schon mal gemacht); eine Abfrage einer Tasteneingabe ohne Eingabe in die Konsole (Stichwort "Key logger") ist in Python möglich, ich würde obigen Quellcode aber als normale Lösung für das Problem bezeichnen.
Mal zu deinem Quelltext:
Code: Alles auswählen
import webbrowser #1
urls = ["https://www.nzz.ch/"] #2
for url in urls: #3
webbrowser.open(url) #4
input(">>> Weiter? ") #5
urls = ["https://www.golem.de/ticker/"] #6
webbrowser.open(url) #7
#1 Du importierst das Modul webbrowser, bei #2 definierst du eine Liste mit einem Listenelement. Bei #3 durchläufst du die Liste (for-Schleife) und machst bei #4 für jedes Element eine Aktion, hier öffnest du für jedes Element url diese url im Browser. Die Variable url wird hier belegt. #5 unterbricht die Ausführung des Quellcodes und wartet auf eine Eingabe des Benutzers. Du definierst bei #6 erneut eine Liste mit einem Element (nicht sinnvoll); auch die input-Anweisung hätte ich persönlich in die Schleife gepackt (s. o.). Bei #7 öffnest du dann die URL url im Browser, da du die neue Liste (#6) nicht durchläufst, nimmt er den Inhalt der Variable url, die du zuletzt bei #3 belegt hast, d. h. das Skript öffnet zweimal die identische Seite im Browser.
(Ganz verstehe ich Dein Problem noch nicht.)
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Mittwoch 23. Mai 2018, 20:47
von wolfilein
Danke für die Antwort. Als blutiger Anfänger habe ich keine Ahnung von Python-Tags, habe etwas gefunden mit Ctrl-Shift-v, aber ich sehe hier keinen Effekt.
Was ich erreichen möchte, hatte ich schon ganz am Anfang geschrieben, viele Webseiten nacheinander öffnen, aber nicht mit Zeitsteuerung (wie es bereits mit Apple-Script läuft), da ich manche Seiten schnell lese, andere nur überfliege, sondern auf Tastendruck soll sich die nächste Seite öffnen.
Mit diesem Code öffnet sich nur die erste Seite golem.de, danach kann ich jede beliebige Taste drücken, es passiert nichts mehr?? (Ansonsten sehe ich diese Frage "Weiter?" nur, wenn ich zurückgehe zu IDLE)
Fehlt hier nicht ein Befehl zur weiteren Programmausführung nach Tastendruck?
import webbrowser
urls = ['
https://golem.de', '
https://www.nzz.ch/']
for url in urls:
webbrowser.open(url)
input(">>Weiter?")
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Mittwoch 23. Mai 2018, 20:57
von sls
wolfilein hat geschrieben: Mittwoch 23. Mai 2018, 20:47
Mit diesem Code öffnet sich nur die erste Seite golem.de, danach kann ich jede beliebige Taste drücken, es passiert nichts mehr?? (Ansonsten sehe ich diese Frage "Weiter?" nur, wenn ich zurückgehe zu IDLE)
Das ist richtig so, da das Browser-Fenster in den Vordergrund rückt. Was du noch implementieren musst ist ein Hintergrundprozess in deinem Skript der deine Tastatureingabe erkennt und die for-Schleife fortsetzt.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 25. Mai 2018, 08:00
von pixewakb
Wechsel zurück zur Konsole von Idle und drücke dann auf die Frage "Weiter" einmal Enter, den Vorgang müsstest du für jede Seite wiederholen. Ich merke an, dass du die Fenster auch so nebeneinander anordnen kannst, dass das geht.
sls hat geschrieben: Mittwoch 23. Mai 2018, 20:57Das ist richtig so, da das Browser-Fenster in den Vordergrund rückt. Was du noch implementieren musst ist ein Hintergrundprozess in deinem Skript der deine Tastatureingabe erkennt und die for-Schleife fortsetzt.
@sls: Hast du dazu ein Codebeispiel? Ich halte das für ziemlich ambitioniert und habe so etwas selbst noch nicht programmiert.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 25. Mai 2018, 09:15
von wolfilein
Zurück zu Idle wäre etwas umständlich, aber es funktioniert auch nicht, es kommt dann diese Meldung:
Traceback (most recent call last):
File "/Users/...../versuchneu.py", line 7, in <module>
input(">>Weiter?")
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
>>>
Es sollte doch möglich sein, dass das Programm auf Tastendruck weiterläuft??
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 25. Mai 2018, 09:20
von Sirius3
Wenn Du Python2 benutzt, dann brauchst Du `rawinput`.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 25. Mai 2018, 12:22
von pixewakb
Ich habe mir mal ein GUI gestrickt, was einen Button oben links auf dem Desktop angezeigt hat und dort immer geblieben ist. Ich hatte dann dort Funktionalität reingepackt, die mir Screenshots erzeugt hat. Du müsstest die Pfadangabe unter PATH korrigieren und ein Icon.png ins Heimatverzeichnis des Tools packen.
Eine Routine, um Webseiten zu öffnen, müsste dann noch ergänzt werden. Die Steuerung würde dann per Klick auf einen Button erfolgen. Der Quellcode ist nicht gut, aber es hat damals mal seine Aufgabe erledigt.
BTW: [1] Abfangen von Benutzereingaben auf OS-Ebene unabhängig vom Fokus des Fensters, darauf liefe es m. E. hinaus, halte ich für sehr ambitioniert. [2] Ferner könntest du auch mal im Extensions-Shop deines Browsers schauen, ob es noch keine fertige Lösung gibt.
Code: Alles auswählen
#!/usr/bin/env python
import tkinter as tk
class Winit(object):
PATH = "C:/Users/USERNAME/Desktop"
def __init__(self, fullscreen=True, noborder=True, width=500, height=30, x=0, y=0):
self.root = tk.Tk()
if fullscreen:
self.width = self.root.winfo_screenwidth()
self.height = self.root.winfo_screenheight()
self.x = 0
self.y = 0
else:
self.width = width
self.height = height
self.x = x
self.y = y
self.root.geometry("%dx%d+%d+%d" % (self.width, self.height, self.x, self.y))
self.root.wm_overrideredirect(noborder)
# oben halten
self.root.attributes("-topmost", True)
# Icon dazu
self.icon = tk.PhotoImage(file="Icon.png")
# Button dazu
# self.button = tk.Button(text='Print', command=self.callback) #self.root.quit
self.button = tk.Button(image=self.icon, relief="flat", command=self.callback) #self.root.quit
self.button.pack()
def run(self):
self.root.mainloop()
def callback(self):
# Hier kommt die Funktionalität rein
pass
if __name__ == '__main__':
Winit(False, True, 24, 24, 0, 0).run()
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Freitag 25. Mai 2018, 19:41
von sls
pixewakb hat geschrieben: Freitag 25. Mai 2018, 08:00
@sls: Hast du dazu ein Codebeispiel? Ich halte das für ziemlich ambitioniert und habe so etwas selbst noch nicht programmiert.
Ich bin gerade über die keyboard-lib gestolpert, eventuell kann der TE ja darauf aufbauen?
Erster shot:
Code: Alles auswählen
import keyboard
import webbrowser
URLS = [
"https://golem.de",
"https://python-forum.de"
]
for url in URLS:
webbrowser.open(url)
keyboard.wait('control+Enter')
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Samstag 26. Mai 2018, 16:36
von wolfilein
Es kommt die Meldung: No module named 'keyboard'
Vielleicht hängt das auch damit zusammen:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit
http://www.python.org/download/mac/tcltk/ for current information.
??
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Samstag 26. Mai 2018, 17:14
von ThomasL
das Modul 'keyboard' ist noch nicht auf deinem Rechner installiert
bin PC User, keine Ahnung wie du aufm Mac die Konsole öffnest
aber dort sollte es mit
python3 -m pip install keyboard
klappen
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Sonntag 27. Mai 2018, 12:25
von wolfilein
pip install in der Konsole ging, aber jetzt kommt lange Fehlermeldung (1. Internetseite wird geöffnet):
Exception in thread Thread-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keyboard/__init__.py", line 292, in listen
_os_keyboard.listen(self.direct_callback)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keyboard/_darwinkeyboard.py", line 430, in listen
raise OSError("Error 13 - Must be run as administrator")
OSError: Error 13 - Must be run as administrator
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Sonntag 27. Mai 2018, 13:04
von Sirius3
Direkt auf Hardware zuzugreifen, ist normalerweise nicht so ohne weiteres möglich, außer man hat Administrator-Rechte. Daher ist das Modul für so ziemlich viele Zwecke ungeeignet.
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Sonntag 27. Mai 2018, 17:46
von Tholo
wolfilein hat geschrieben: Sonntag 27. Mai 2018, 12:25
raise OSError("Error 13 - Must be run as administrator")
Windows sagt: Öffnen der Datei geht nur als Admin. Also versuche doch mal als Admin auszuführen.
Oder du musst dir eine alternative einfallen lassen. Ggf eine GUI (zb minimiert im Hintergrund) mit einem Hotkey ansteuern um die Funktion durchzuführen
Re: Öffnen von Internetseiten mit Pause, weiter mit Taste
Verfasst: Sonntag 27. Mai 2018, 18:04
von __deets__
https://apple.stackexchange.com/questio ... pt-i-wrote stellt einen Workaround für Apple Script bereit.
Und wenn das nicht geht, kannst du ein pyobjc Programm schreiben, und darin einen globalen Shortcut definieren, der immer dein Programm erreicht. Auch ohne gefährliche Admin-Rechte!
https://stackoverflow.com/questions/113 ... x/11349005#