Hallo in die Runde,
ich suche Rat zum automatisierten Klicken von Buttons, die sich nicht über das AutoIt Window Info Tool auslesen lassen.
In einer Datenbank im eigenen Intranet, die im Firefox browserbasiert läuft, werden über Bearbeitungsmasken verschiedene Daten händisch eingepflegt. Das Einpflegen der Daten soll auch weiterhin händisch passieren, jedoch kostet bereits das Anlegen leerer Elemente für diese Daten immens viel Zeit und Nerven, da jedes leere Element (z. B. Bild, Titel, Beschreibungstext) mit drei Mausklicks angelegt werden muss. Das Ganze sieht dann wie folgt aus:
Mittels Mouseover oder auch Klick auf "Neues Element" (Btn. 1) -> es klappt dann einen Liste zur Auswahl aus und man klickt bspw. auf "Element 1" (Btn. 2) -> und abschließend noch auf "Speichern", um den Vorgang abzuschließen. Danach wird das nächste Element angelegt usw. Die Maske sieht beispielhaft so aus:
Ich habe bereits mit AutoIt ein Programm geschrieben, das folgendes macht:
- In einer kleinen GUI mit Checkboxen und UpDown bzw. Inputfeld für jedes Element kann ausgewählt werden, a) ob überhaupt Elemente angelegt werden sollen und b) wenn ja, wieviele davon
- über GUICtrlRead Anweisungen wird selektiert, welche Checkboxen angewählt sind und welche Anzahl eingegeben wurde, das wird in Variablen geschrieben
- Nach Drücken auf den Button "Elemente anlegen" werden Funktionen für jedes Element nacheinander ausgeführt, bis alles abgearbeitet ist
- Am Ende erscheint eine MsgBox als Report, was angelegt bzw. nicht angelegt wurde
- Das Script enthält einen HotKeySet, um den Vorgang jederzeit mittels ESC-Taste pausieren zu können, es erscheint dann eine MsgBox $YESNO (4100) die abfragt, ob abgebrochen oder weitergemacht werden soll. Wird abgebrochen, erscheint ebenfalls ein Report der Elemente, die bis zum Abbruch angelegt wurden
Die GUI sieht so aus:
Ich habe noch Zusätze wie "GUI immer im Vordergrund" (per WinSetOnTop) und die Platzierung in der unteren rechten Bildschirmecke in Abhängigkeit von der Auflösung eingebaut (WinGetPos, WinMove usw.).
Alles funktioniert 1A und ich bin sehr glücklich darüber, denn ich bin AutoIt Anfänger und habe mir jeden Schritt mit viel Try & Error, Abschauen von existierenden Scripts und Verstehen lernen, Tutorials und Hilfe-Lesen erarbeitet.
Mein Problem bzw. eher "Wunsch":
Im Moment kann ich nur auf meinem Rechner alles wie gewünscht laufen lassen, denn das Klicken der Buttons erfolgt schlicht durch MouseClick Befehle, die von Koordinaten des einen Buttons + Klick zum nächsten wandern usw., bis die Funktion für jedes Element mittels "Do Until" Schleife durchlaufen ist.
Ich möchte das jedoch auch auf anderen Rechnern von Kollegen einsetzen, auf denen aber ggf. andere Auflösungen und damit andere Koordinaten der Buttons gegeben sind. Anpassen wäre zwar möglich, aber es ist nicht gerade eine professionelle Lösung, alles per Mousemoves zu machen... Oder was wäre, wenn sich mal eine Position in der Maske ändert? Alles nicht optimal.
Ich würde gerne entweder den Text der Buttons auslesen und dann anklicken lassen oder aus dem HTML heraus im Div-Container ansprechen. Wie gesagt, mittels AutoIt WindowInfo ist keine Informationen auszulesen.
Fakt ist, dass die Anwendung nur im Firefox laufen kann, nicht im Internet Explorer, daher kann IE.au3 nicht verwendet werden. Mir ist bekannt, dass die FF.au3 zur Steuerung des Firefox seit Version 57 (Quantum) nicht mehr funtioniert, da die Extension nicht mehr supported wird, sonst wäre eine Steuerung mit diesem Include einfach.
Ich habe mal per "Element untersuchen" das innere und äußere HTML sowie den XPath der Buttons "Neues Element" und "Element 1" ausgelesen (beispielhaft):
Neues Element (inneres HTML)
<div id="SelectNewElement" onmouseover="NewElementOptions()" style="display: block;">Neues Element</div> (äußeres HTML)
//*[@id="SelectNewElement"] (XPath)
Element 1 (inneres HTML)
<a href="javascript:createElement('Element 1')" style="cursor: pointer;">Element 1</a> (äußeres HTML)
/html/body/div[10]/div[1]/div[1] (XPath)
Kann mir jemand (für einen Anfänger/leicht Fortgeschrittenen) evtl. aufzeigen, ob es eine Möglichkeit gäbe, die Buttons eleganter anzusprechen als mit der Maus?
Viele Grüße und schöne Weihnachten