Mit Python Wörter in Textfelder -kein Autofill- schreiben / einsetzen lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

Hallo liebe Forengemeinde,

ich bin absoluter Neuling und bräuchte für meine Projektarbeit in der Informatik etwas Python.
Es geht um folgende Situation:

Ein Skript / die Windows Aufgabenplanung startet ein Browserfenster da, und eine Anwendung da.
Python startet mit Clickbot auf die gewünschten Text- & Eingabefelder ( hier wird angeklickt und einzelne Buttons ausgewählt )

-> Jetzt soll aber nicht nur geklickt & ausgewählt werden, sondern auch noch eine wörtliche Texteingabe nach else / sleep(0) erfolgen.
Hier der Code:

from pyautogui import click, position
from time import sleep

def print_position():
while True:
print(position())

x = 3267
y = 476

def click_button(x, y):
for i in range(1):
click(x, y)
sleep(1)
print('click:', i)
else:
x = 2618
y = 473
for i in range(1):
click(x, y)
sleep(0)

click_button(x, y)


Grüße
Patrick

Dieser Beitrag über autofill geht schon etwas zu tiefgreifend, da es sich auf PDF & Dokumente bezieht:
https://learn.onemonth.com/automate-web ... th-python/
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Darstellung von Web-Seiten hängt von sehr vielen Faktoren ab. Da etwas mit pyautogui zu automatisieren ist sehr fragil. Wenn es geht, spricht man Web-Seiten direkt über `requests` an, wenn die Seite viel Javascript benutzt, dann nimmt man Selenium.
Um was für eine Web-Seite handelt es sich denn?
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

Vielen Dank für die Antwort,
darüber habe ich schon was diesbezüglich gelesen gehabt und mir Gedanken gemacht,
aber passt total,
weil es MEINE eigene Website im Browser ist ist.
Also das erste Bild ist ein Programm, wo über PyAutogui da einfach die Buttons dann nur geklickt werden sollen, das darunter meine Website im Browser, was dann auf einem Client PC läuft, wo nur diese beiden Anwendungen laufen und die Fenster fest positioniert sind.
Auf meiner Website möchte ich dann in Textfeldern von paar Zahlen / Wörter über Python eingeben können.

Bild
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie Sirius3 schon sagte - das würde man so nie machen. Wenn du Kontrolle über die Seiten hat, kannst und solltest du auch dringend eine API anbieten, mit der du mit einem simplen requests-Aufruf die Werte gleich Computer-gerecht überträgst. Statt so einem Würgaround. Das macht es auch einfacher. Wirklich.
Benutzeravatar
grubenfox
User
Beiträge: 426
Registriert: Freitag 2. Dezember 2022, 15:49

Aber was das schreiben von Text mit pyautogui betrifft:
https://pyautogui.readthedocs.io/en/lat ... -functions

oder was ist das Problem?
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

__deets__ hat geschrieben: Freitag 24. März 2023, 14:38 Wie Sirius3 schon sagte - das würde man so nie machen. Wenn du Kontrolle über die Seiten hat, kannst und solltest du auch dringend eine API anbieten, mit der du mit einem simplen requests-Aufruf die Werte gleich Computer-gerecht überträgst. Statt so einem Würgaround. Das macht es auch einfacher. Wirklich.
Für Dich ja, weil Du Coden kannst :)
Ich wüsste sonst gar nicht diese API zu schaffen / zu verbinden, ( außer man geht noch direkt über die Prozesse und C++ in die Thematik noch tiefer hinein.. )
aber sonst so sehe ich dies als schnellste und einfachste Variante auch somit "nebenher" Python zu lernen.
( Als Fachinformatiker bekommste da nur etwas Powershell und SQL aufgedrückt ) und das würde mir für die Projektarbeit auch nicht weiterhelfen...
grubenfox hat geschrieben: Freitag 24. März 2023, 15:02 Aber was das schreiben von Text mit pyautogui betrifft:
https://pyautogui.readthedocs.io/en/lat ... -functions

oder was ist das Problem?
Ich bedanke mich vielmals für den Link, ja ich habe noch massive Probleme, und ich meld mich zurück wenns geklappt hat

Wünsche Euch erstmal soweit ein schönes angenehmes Wochenende
und am Montag gehts direkt damit weiter :)

Vielen lieben herzlichen Dank nochmal!

Grüße
Patrick
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast eine Webseite. Die Webseite ist offensichtlich interaktiv, sonst wuerde es keinen Sinn machen, der etwas per pyautogui zu uebermitteln. Und statt hunderte Zeilen wenig robusten und schlechten autogui-Code zu schreiben, kann man auch einfach eine Zeile

Code: Alles auswählen

r = requests.post('https://meine.seite/update-daten', data={'key': 'value'})
absetzen. Die Offenheit, sich darauf einzulassen, vorrausgesetzt.
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

__deets__ hat geschrieben: Freitag 24. März 2023, 15:18 Du hast eine Webseite. Die Webseite ist offensichtlich interaktiv, sonst wuerde es keinen Sinn machen, der etwas per pyautogui zu uebermitteln. Und statt hunderte Zeilen wenig robusten und schlechten autogui-Code zu schreiben, kann man auch einfach eine Zeile

Code: Alles auswählen

r = requests.post('https://meine.seite/update-daten', data={'key': 'value'})
absetzen. Die Offenheit, sich darauf einzulassen, vorrausgesetzt.
hmmm...
also das ganze ist sehr sehr komplex.. ich kann es nun mal umsetzen und demonstrieren.
Das von Dir klingt schon deutlich besser, nur wie gesagt ich bin Anfänger, die Zeit drückt,
und es ist sehr sehr wenig an an pyautogui, aber nicht universell und Marktreif möchte ich mal ausdrücken.
In den kommenden Wochen / Monaten werd ich dann mal das ganze Projekt schildern und danke auch Dir, weil wenns wirklich nur so nen Einzeiler ist...
mal ausprobieren..
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

__deets__ hat geschrieben: Freitag 24. März 2023, 15:18 ...Und statt hunderte Zeilen wenig robusten und schlechten autogui-Code zu schreiben, kann man auch einfach eine Zeile

Code: Alles auswählen

r = requests.post('https://meine.seite/update-daten', data={'key': 'value'})
absetzen. Die Offenheit, sich darauf einzulassen, vorrausgesetzt.
Könntest Du mir bitte auch sagen, wie Du das dann oben bei dem Programm vollbringen würdest?
Weil dort hat man zig Eingabefelder und wie will kann man da den richtigen Prozess bitte finden und ansteuern?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Welches Programm oben? Welcher Prozess?
Bisher ging es um eine Webseite, die Du selbst programmiert hast. Und da solltest Du doch wissen, was hinter den Eingabefeldern steckt. Im einfachsten Fall existiert der Post-Request schon, weil die Webseite selbst Ihre Formulare so abschickt.
skorpion1800
User
Beiträge: 9
Registriert: Freitag 24. März 2023, 11:05

Sirius3 hat geschrieben: Montag 1. Mai 2023, 12:27 Welches Programm oben? Welcher Prozess?
Bisher ging es um eine Webseite, die Du selbst programmiert hast. Und da solltest Du doch wissen, was hinter den Eingabefeldern steckt. Im einfachsten Fall existiert der Post-Request schon, weil die Webseite selbst Ihre Formulare so abschickt.


https://ibb.co/xqC2J3j
Bild

Ich bräuchte das auch parallel aus diesem Programm mit den ganzen Eingabefeldern
( was ja eigentlich einfacher sein dürfte nur ich keine Ahnung davon gerade ( noch ) habe :)
Wie könnte ich neben pyautogui / tkinter
denn die Prozesse von dem Programm noch herausfinden / einbinden, ich bin gerade dabei:
psutil, win32api, win32con, win32process und time -Module einzubinden...
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich versehe nicht, warum du da irgendetwas mit Prozessen machen willst.
Du hast gesagt, es handelt sich um eine Programm in einem Webbrowser. Wie man es macht, wurde dir hier bereits gesagt.

Entweder machst du einen Request an den Webserver, wie es der Webbrowser ebenfalls macht, und verwendest dafür das `requests` Modul.
Oder du steuerst den Browser mit Selenium fern.
Für beides braucht man den Prozess nicht.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du auf einen der vielen Buttons auf der aktuelle Webseite klickst, dann passiert ja irgendwas. Entweder direkt via JavaScript, sprich das im Hintergrund was per POST (oder GET) Request gesendet wird oder halt dann, wenn es ein klassisches Formular ist, wenn du den "Submit" Button klickst. Den Request kannst du mit dem request-Modul ganz einfach mit einer Zeile machen. Wie kannst z.Zt. nur du wissen , weil nur du den Code deiner Webseite und den serverseitigen Teil deiner Applikation kennst.

Wie ist denn der serverseitige Code umgesetzt, also welche Programmiersprache und ggf. welches Webframework wird dort verwendet?

Gruß, noisefloor
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bisher sind wir davon ausgegangen, dass du nur eine Webanwendung laufen lässt. Die per click-Simulation zu kontrollieren ist Quatsch.

Das du noch dieses andere Anwendung hast, ist nicht klar geworden. Die lässt sich wohl eher nicht per HTTP request automatisieren.

Die Frage ist: was macht die? Und kann man das ggf in Python machen. Und wenn das nicht geht, und die neue Frage eigentlich lautet “wie finde ich das passende Anwedungsfenster”, dann würde ich die Anwendung selbst starten, dann habe ich das Prozess-Objekt und kann darüber den Win-Handle bekommen.
Antworten