Webformulare vorausfüllen - wie?
Verfasst: Freitag 27. Juni 2025, 16:33
Hallo zusammen,
das Thema ist nicht neu, ich habe aber leider weder bei Tante Google noch hier bisher die Lösung für mein Problem gefunden.
Ich möchte unter Linux (Debian) aus einem Python-Script heraus einen Browser inklusive URL aufrufen (ob Firefox oder Chrome ist an der Stelle egal) und an die dahinterliegende Webseite dann Daten schicken, die in ein Formular eingetragen werden - es können auch einfach nur Tastendrücke sein. Ich habe auch leider die Einschränkung, dass ich Module nutzen muss, die bereits im Debian Repository vorhanden sind.
Alternativ ginge es auch, den Browser und die Webseite separat zu öffnen und "nur" den Fokus auf die Webseite zu legen und dann die Daten oder auch nur einzelne Keyboard-Events abzusenden. Ich muss auf der Arbeit immer sehr ähnliche Inhalte in unterschiedliche Webformulare eingeben, und das ist schon so ein brain-damaging Job, das würde ich gerne zumindest teilweise automatisieren.
Aktuell habe ich diesen Ansatz hier:
[...]
fillform = subprocess.Popen([browser,url_pdr], stdin=subprocess.PIPE)
>> An der Stelle geht der Browser meiner Wahl brav auf, auch mit der ausgewählten URL
time.sleep(7)
>> Damit die Seite in Ruhe komplett laden kann
fillform.communicate(input=b'tescht')
>> An dieser Stelle würde ich erwarten, dass (sofern der Fokus in einem Formularfeld ist), irgendwas passiert. Mein Ansatz war, so lange tabs zu schicken bis ich im Eingabefeld lande und da dann die Daten abzuladen, aber augenscheinlich passiert da nichts.
Zum Testen habe ich es anstatt im Browser mit dem Editor versucht:
fillform = subprocess.Popen(['xed'], stdin=subprocess.PIPE, shell=True)
aber auch hier passiert nach dem time.sleep nichts bzw. nichts Offensichtliches - auch nicht wenn ich nur einen Buchstaben sende. Der Editor geht brav auf und man sieht, dass im sleep-intervall der cursor ruht, aber danach geschieht nichts weiter.
Alternativ habe ich Folgendes versucht:
fillform.stdin.write('b"tescht")
fillform.stdin.write("tescht".encode())
Ich bekomme keine Fehlermeldungen, aber es passiert auch nichts.
Kann mich jemand in die richtige Richtung schubbsen?
Da ich die Anwendung meiner Wahl öffnen kann und ich ja diverse Möglichkeiten habe, Daten oder auch einfach Keyboard-Events abzusenden vermute ich, dass ich irgendwie den Fokus auf die Anwendung bekommen oder behalten muss - wobei ich vermutet hätte, dass das mit dem Code oben schon der Fall ist - und danach das Event übermittle.
Ein anderer Ansatzpunkt war mittels pynput Keyboard-Events zu generieren, a la
keyboard.press('a') bzw. keyboard.release('a'), aber da habe ich den Fokus nicht aus dem Terminal raus zum Browser hinbekommen.
Mit "requests" habe ich es auch versucht, das wäre ja wohl am einfachsten gewesen, aber das wird anscheinend seitens der Webseiten unterbunden.
Ich kann mir vorstellen, dass manche Versuche von den Webseiten nicht akzptiert werden, die werden sich vermutlich teilweise gegen Automaten wehren - aber ich gehe jetzt schon davon aus, dass ich es zumindest so hinbekommen können müsste, dass ich tabs und Text in Form einzelner Keyboard-Events da abladen kann. Mehr will ich gar nicht.
Bin für jeden Hinweis dankbar.
das Thema ist nicht neu, ich habe aber leider weder bei Tante Google noch hier bisher die Lösung für mein Problem gefunden.
Ich möchte unter Linux (Debian) aus einem Python-Script heraus einen Browser inklusive URL aufrufen (ob Firefox oder Chrome ist an der Stelle egal) und an die dahinterliegende Webseite dann Daten schicken, die in ein Formular eingetragen werden - es können auch einfach nur Tastendrücke sein. Ich habe auch leider die Einschränkung, dass ich Module nutzen muss, die bereits im Debian Repository vorhanden sind.
Alternativ ginge es auch, den Browser und die Webseite separat zu öffnen und "nur" den Fokus auf die Webseite zu legen und dann die Daten oder auch nur einzelne Keyboard-Events abzusenden. Ich muss auf der Arbeit immer sehr ähnliche Inhalte in unterschiedliche Webformulare eingeben, und das ist schon so ein brain-damaging Job, das würde ich gerne zumindest teilweise automatisieren.
Aktuell habe ich diesen Ansatz hier:
[...]
fillform = subprocess.Popen([browser,url_pdr], stdin=subprocess.PIPE)
>> An der Stelle geht der Browser meiner Wahl brav auf, auch mit der ausgewählten URL
time.sleep(7)
>> Damit die Seite in Ruhe komplett laden kann
fillform.communicate(input=b'tescht')
>> An dieser Stelle würde ich erwarten, dass (sofern der Fokus in einem Formularfeld ist), irgendwas passiert. Mein Ansatz war, so lange tabs zu schicken bis ich im Eingabefeld lande und da dann die Daten abzuladen, aber augenscheinlich passiert da nichts.
Zum Testen habe ich es anstatt im Browser mit dem Editor versucht:
fillform = subprocess.Popen(['xed'], stdin=subprocess.PIPE, shell=True)
aber auch hier passiert nach dem time.sleep nichts bzw. nichts Offensichtliches - auch nicht wenn ich nur einen Buchstaben sende. Der Editor geht brav auf und man sieht, dass im sleep-intervall der cursor ruht, aber danach geschieht nichts weiter.
Alternativ habe ich Folgendes versucht:
fillform.stdin.write('b"tescht")
fillform.stdin.write("tescht".encode())
Ich bekomme keine Fehlermeldungen, aber es passiert auch nichts.
Kann mich jemand in die richtige Richtung schubbsen?
Da ich die Anwendung meiner Wahl öffnen kann und ich ja diverse Möglichkeiten habe, Daten oder auch einfach Keyboard-Events abzusenden vermute ich, dass ich irgendwie den Fokus auf die Anwendung bekommen oder behalten muss - wobei ich vermutet hätte, dass das mit dem Code oben schon der Fall ist - und danach das Event übermittle.
Ein anderer Ansatzpunkt war mittels pynput Keyboard-Events zu generieren, a la
keyboard.press('a') bzw. keyboard.release('a'), aber da habe ich den Fokus nicht aus dem Terminal raus zum Browser hinbekommen.
Mit "requests" habe ich es auch versucht, das wäre ja wohl am einfachsten gewesen, aber das wird anscheinend seitens der Webseiten unterbunden.
Ich kann mir vorstellen, dass manche Versuche von den Webseiten nicht akzptiert werden, die werden sich vermutlich teilweise gegen Automaten wehren - aber ich gehe jetzt schon davon aus, dass ich es zumindest so hinbekommen können müsste, dass ich tabs und Text in Form einzelner Keyboard-Events da abladen kann. Mehr will ich gar nicht.
Bin für jeden Hinweis dankbar.