Firefox Quantum: Button per Text oder Div klicken möglich?

  • 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:

    CONTENTCREATOR.jpg


    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

  • Naja gibt ja etliche Möglichkeiten dein Hauptproblem zu lösen oder zu umgehen.

    1. Warum soll die Webseite nicht mit dem IE kompatiblel sein und die IE.au3 somit ausscheiden?

    2. Da du von einer DB sprachst... wäre es nicht evtl. sinnvoller die Datensätze direkt über eine benutzerfreundlichere Autoit GUI manuell vom Nutzer in die DB eintragen zu lassen? Für die meisten Datenbanken findest du passende Autoit UDFs.

    3. Du könntest deinem Script eine alte Firefox Portable Instanz beilegen, welche mit dem Addon MozRepl kompatibel ist und nur diese eigene kompatible FF Instanz für alle Webseiteninteraktionen nutzen. Das habe ich selbst lange Zeit in einem meiner Scripte gemacht, weil diverse FF Updates immer wieder Probleme bereitet haben und ich so gewährleisten konnte, dass sich am Browser nichts ändert (deaktivierte Updates der Portable Version)

    4. Viel effizienter und schneller ist die Kommunikation via winhttp.au3. Hierbei sendest du direkt die Pakete an die Webseite, welcher dein Browser beim Absenden der Formulare senden würde. Nachteil hierbei ist aber, dass du keine sichtbare Browserinstanz für den Anwender hast, sprich alle GUI Möglichkeiten müssen wie bei Vorschlag 2 von dir in Autoit bereitgestellt werden, damit der Benutzer die Datensätze in Autoit anlegen kann. Der Unterschied zu Vorschlag 2 wäre, dass du keinen direkten DB Zugriff im Script brauchst, sondern nur gültige Anmeldedaten für die Webseite.

    5. Optimalerweise bietet die Webanwendung eine Web API an, in diesem Fall ist Lösung 4 sogar noch einfacher und zuverlässiger umzusetzen

    Lösung 1 ist vermutlich am schnellsten und leichtesten umsetzbar, danach folgt Lösung 3. Lösung 2, 4 und 5 sind am performantesten, allerdings auch aufwendig umzusetzen und ggf. aufgrund der IT Sicherheit nicht realisierbar.

    Alle Lösungen sind jedenfalls zuverlässiger als Mausklicks anhand von Fensterkoordinaten.

    Einmal editiert, zuletzt von misterspeed (22. Dezember 2017 um 18:31)

  • Firefox und Interaktion mit Webseiten? Ganz ehrlich: Greasemonkey und Javascript (wenn die Weboberfläche von einer externen Firma ist), oder am besten die Webobefläche von deren Erzeuger selber optimieren lassen.

    PS: Es gibt noch eine Möglichkeit, auf die Seite zuzugreifen, ohne Button-Positionen, etc. kennen zu müssen:

    Über Bookmarklets, d.h., Du postest einfach einen String, beginnend mit "javascript: ... " in die Adresszeile des Browsers, mit der Du dann die Funktionen in der Seite aufrufst, bzw. Elemente der Seite ansprichst. Bei allem, was eine Rückgabe erzeugt, musst Du diese dann abfangen und unterdrücken, damit die Seite nicht neu geladen wird.

    Einmal editiert, zuletzt von fakeraol (30. Dezember 2017 um 02:19)

  • Greasemonkey

    Ich habe auch sehr lange Zeit Greasemonkey benutzt... und weil es mit der FireFox ESR-Version (weil ich mom. noch MozRepl brauche) nicht mehr lief, nachdem es sich aktualisiert hat, bin ich dann auf Tampermonkey umgestiegen... und war sehr erstaunt, dass es weit mehr zu bieten hat, als Greasemonkey!

    Tampermonkey ist eine kostenlose Browser-Erweiterung und der beliebteste Userscript-Manager mit über 10 Millionen Nutzern. Die Erweiterung ist verfügbar für Chrome, Microsoft Edge, Safari, Opera Next, und Firefox.

  • Was hat Tampermonkey denn mehr zu bieten? Bin mal umgestiegen, aber mir fällt erst mal nur auf, daß ich beim ersten Click aufs Greasemonkey-Icon schon meine Scripte zu sehen bekam. Noch nen Click aufs Script, und noch einer auf 'Edit', und ich konnte es bearbeiten. Fand ich angenehmer.

    Was siehst Du bei Tampermonkey für Vorteile?

  • Ja. Ich seh da allerdings bisher nichts, was ich vermisst hätte.

    Das sagt ja auch niemand... es geht doch nur darum, dass Tampermonkey mehr Optionen und Features anbietet, als Greasemonkey. Ich finde z. B. das "ZIP im-/exportieren" sehr gut.