Firefox und Noscirpt - temporäres Freischalten von Seiten - Au3Record

  • Hallo Freunde der automatisierten Schritte,

    vielen von Euch nutzen bestimmt Firefox und NoScript.

    Standardmäßig habe ich z.B. für Google die Scripte deaktiviert - lebt sich viel besser damit :)
    Zwischendurch müssen sie aktiv sein, und hier wollte ich Autoit mit ins Boot holen.

    Wie es nicht geht, zeigt die Aufzeichnung mit dem au3recorder

    Spoiler anzeigen

    ;Au3Record hat diese Koordinaten bildschirmbezogen aufgezeichnet, ohne das Fenster zu berücksichtigen
    MouseClick("left",722,22,1) ; NoScript


    ;Au3Record hat diese Koordinaten fensterbezogen aufgezeichnet, ohne den Bildschirm zu berücksichtigen
    MouseClick("left",24,381,1) ; 1. Option
    MouseClick("left",24,407,1) ; 2. Option
    MouseClick("left",25,433,1) ; 3. Option


    ;Au3Record hat diese Koordinaten bildschirmbezogen aufgezeichnet, ohne das Fenster zu berücksichtigen
    MouseClick("left",885,78,1) ; Seite neu laden - kann ich mit ff.au3 tun, hier der Vollständigkeit halber

    Vorab eine grundlegende Frage: Wie kann ich einen Mausklick koordinatenbezogen und kindfensterbezogen absetzen, wenn Control... Befehle hier versagen?

    MouseClick - Hilfe sagt dazu nichts. Welchen anderen Befehl gibt es dafür?

    Also in der Form:

    lokalisiere Fenster x
    nimm die Koordinate 0,0 vom Fenster als Bezugspunkt
    bewege die Maus auf 10,20 (nicht bildschirmbezogen)
    klicke dort


    Zurück zum Thema:

    Man kommt an das NoScript-Icon in Firefox nur mit Maus.

    Wie löst Ihr solche Klick-Aktionen von der Aufzeichnung der Koordinaten bis zur Scriptumsetzung?


    Viele Grüße
    AutoMit

  • Frage:

    Zitat

    Wie löst Ihr solche Klick-Aktionen von der Aufzeichnung der Koordinaten bis zur Scriptumsetzung?


    Antwort:

    Zitat

    lokalisiere Fenster x
    nimm die Koordinate 0,0 vom Fenster als Bezugspunkt
    bewege die Maus auf 10,20 (nicht bildschirmbezogen)
    klicke dort


    Ich glaube die bessere Frage wäre hier: Wie heißen die notwendigen Befehle dazu?
    Da klickt man sich am besten durch die Hilfe durch. Da du jetzt schon ziemlich oft irgendwas gefragt hast, sollten wir mal auf dein eigentliches Problem besser eingehen.
    Dein Hauptproblem besteht wohl darin, dass du die mitgelieferte Hilfedatei nicht richtig nutzen kannst. ^^

    Zuerst öffnen wir doch einmal die Hilfe und schauen im [Index] nach. Unter der Funktionsreferenz (eng.: [Function Reference]) finden wir alle Built-in Funktionen von AutoIt. Nun, wir wollen was mit Fenstern machen, schauen wir doch mal nach, da finden wir die das [Window Management]. Nun finden wir eine Handvoll Befehle um mit Fenstern zu arbeiten. Uns interessiert aber in erster Linie die Fensterposition! Kurz mal durch die Liste geschaut, sehen wir dass WinGetPos() doch eigentlich von der Bezeichnung her passen könnte. Aufgeschlagen und nachgelesen, passt. Eine Teilaufgabe wäre damit schon erledigt, Fensterposition ermitteln.

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    $aiPos = WinGetPos('')

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Jetzt denken wir mal scharf nach. Wie können wir nun relativ von den entnommenen Fensterpositionen neue Koordinaten ausrechnen? Man nehme die x-Koordinate und die y-Koordinate und addiert seine Koordinaten einfach drauf. Bei z.B. (100 | 200) als relative Koordinate zu den Fensterkoordinaten (235 | 420) bekommen wir die absoluten Koordinaten (335 | 620). Schön, ein kleines bischen Mathematik angewandt, und schon können wir die Maus bewegen. Befehl ist wie oben in der Referenz zu suchen!

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    $x = 10
    $y = 20

    [/autoit][autoit][/autoit][autoit]

    $aiPos = WinGetPos('')
    MouseMove($aiPos[0] + $x, $aiPos[1] + $y)

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]

    War doch jetzt nicht so schwierig, oder? Kleiner Tipp: Mit der Option Opt('MouseCoordMode', 0) kannst du auch gleich relativ zum aktiven(!) Fenster Mauskoordinaten setzen:

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    Opt('MouseCoordMode', 0)

    [/autoit][autoit][/autoit][autoit]

    $x = 10
    $y = 20

    [/autoit][autoit][/autoit][autoit]

    WinActivate('')
    MouseMove($x, $y)

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]
  • [Index] nach. Unter der Funktionsreferenz

    Das ist schön erklärt und zu einfach gedacht. Zuerst meinen Dank für die Ausführungen.


    Ich möchte Dir (und Euch) die Welt mit meinen Augen zeigen. Sieh es nicht als Vorwurf, sondern betrachte einmal die Welt von jemand, mit wenig Erfahrung, wenig Englisch und bereits viel Einsatz.

    In einer Hilfe-Datei suche ich üblicherweise. Will heißen, ich klicke auf Index bzw. Suchen und gebe einen Suchbegriff ein.

    Ich habe hier die deutsch Hilfedatei
    v3.3.8.1
    (Stand der Übersetzung der Hilfe ins Deutsche: 28.12.2012)


    (gibt es was aktuelleres? - ich hoffe es inständig - vor allem mit mehr Suchbegriffen)

    (a) Fensterpostion

    Reiter Suchen: Fensterposition
    Ergebnis: Funktion 0

    Reiter Suchen: Fenster Position
    Ergebnis: Funktion 42
    (hoffnungslos)

    Ein deutschsprachger Autoit - Anfänger (Englisch effektiv 0) kommt von dort nicht auf WinGetPos.

    Wozu gibt es eine Suchfunktion, in der nicht die einfachsten Begriffe vorkommen?

    Es werden abertausende Programmzeilen an Code geschrieben, und für die Hilfe, die so wichtig ist, gibt es keine sinnvolle Weiterentwicklung mit wirklich sinnvollen deutschen Suchbegriffen etc.

    Nun könnte ich fragen, warum findet man nicht den Begriff Fensterposition (führt uns jedoch nicht weiter).

    (b) MouseMove

    Nehmen wir für einen Moment an, ich wäre durch einen glücklichen Umstand auf MouseMove gekommen.

    Dann sehe ich hier keinen Eintrag, wie die Maus fensterbezogen bewegt wird. Weder im Beispiel noch im Text.

    Nun könnte ich wieder fragen, warum nicht, warum kein Beispiel wie Deine Berechnung, Dein Hinweis auf OPT (auch das führt uns nicht weiter).

    Steht vielleicht sowas in der englischen Hilfedatei?

    (c) Au3Record

    Nun gibt es für Anfänger ein Tool, was Mausaktivitäten aufzeichnet. Und beim Abspielen sieht man, die Maus springt überall hin, nur nicht dorthin, wo man geklickt hat.

    Wenn ein Anfänger an Hand der Koordinaten erkennt, dass hier munter zwischen Bildschirmkoordinaten und Fensterkoordinaten ohne Hinweis hin- und hergewechselt wird, vergeht einem die Motivation noch mehr und man neigt dazu, aufzugeben.

    Welche Tools sind alternativ besser?

    (d) MouseCoordMode

    Kommen wir zur Krönung: MouseCoordMode

    Dass nach diesem Begriff kein Anfänger sucht, ist klar. Sollte eine Hilfe-Datei nicht gerade für Anfänger sein?

    Nun steht dort:


    Legt fest, auf welche Art die Mausfunktionen Koordinaten nutzen, entweder absolut oder relativ zum momentan aktiven Fenster:
    0 = relative Koordinaten zum aktiven Fenster
    1 = absolute Bildschirm Koordinaten (Standard)
    2 = relative Koordinaten zum Anwendungsbereich des aktiven Fensters

    Welcher Anfänger versteht das? Warum nicht ein einziges Beispiel? Das sind nur wenige Zeilen Code, die sofort ausführbar verdeutlichen, wie das wirkt.

    Ein Anfänger sucht z.B. nach fensterbezogenen Koordinaten.

    Selbst wer es bis zur Hilfeseite "Opt" geschafft hat, was für einen Anfänger absolut unmöglich ist, denn wer nach Optionen sucht, findet nichts in der deutschen Hilfe.

    Und selbst auf der Seite "Opt" gibt es "CaretCoordMode", "CaretCoordMode", "CaretCoordMode", "CaretCoordMode", die alle irgendwie nach "Umgang mit Fensterkoordinaten" klingen.


    Lange Rede - kurzer Sinn. Es liegt nicht an der fehlenden Fähigkeit, die Hilfe zu bedienen, sondern daran, dass die Schlüsselworte nicht zum Schlüssel führen und massiv Beispiele fehlen.

    • $x = 10
    • $y = 20
    • $aiPos = WinGetPos('')
    • MouseMove($aiPos[0] + $x, $aiPos[1] + $y)

    4 Zeilen von Dir lösen das Problem - 4 Zeilen in der Hife und ein paar verknüpfte Suchbegriffe wie Fensterkoordinaten, fensterbezogen etc. ... und ... es würde hier im Forum nicht mal die Hälfte der Fragen geben.

    Ich habe mir nächtelang den Inhalt des Forums um die Ohren geschlagen - mit dem gleichen Ergebnis - Schlüsselworte stehen selten im Titel.

    Ich habe vergeblich eine FAQ gesucht, in der überschaubar grundlegende Begriffe zu finden sind.

    Selbst wichtige Begriffe wie Array finde ich nicht in der Hilfe.

    Um so dankbarer bin ich, wenn im Forum Leute, die Autoit über Jahre kennen, einen Suchbegriff oder einen Codeschnipsel in die Runde werfen können, mit dem ein Problem gelöst werden kann.

    Und was viel wichtiger ist - viele Wege führen nach Rom.

    Ist es nicht viel interessanter, zu einem Problem unterschiedliche Lösungsansätze zu bieten, darüber zu schreiben, sich hier auszutauschen, und somit den kreativen Umgang mit Autoit fördern, als zu sagen, lies in der Hilfe unter xyz? Der Verweis auf die Hife-Datei sollte im Sinne einer Kommunikation stets nur am Rand erfolgen (nie im Mittelpunkt stehen).

    Oscar schrieb vor einigen Tagen in einem anderen meiner Threads, heute würde er das nicht mehr so schreiben, heute würde er eine Schleifenkonstruktion verwenden.

    Genau das ist der Punkt, warum ich hier gerne Fragen in die Runde geben möchte, um unterschiedliche Wege zu sehen und vor allem, um das Optimum zu erlernen - ein Optimum, welches auf jahrelanger Erfahrung beruhrt.

    Das findest Du in keiner Hilfe-Datei. Zudem sind unterschiedliche Ansichten sehr interessant - und ich freue mich über jeden, der sich daran beteiligen möchte und vor allem auf Grund seines Wissens auch kann.

    PS ... zurück zum ursprünglichen Thema

    mit den Fensterkoordinaten wird das NoScript Problem nicht zu lösen sein, da sich das Icon in unterschiedlichen Firefox-Profilen an unterschiedlichen Stellen befindet

    Ich habe mal was aufgeschnappt von einer Mustersuche - will heißen, dass Autoit in der Lage ist, das NoScript Logo (welches in 2 Varianten vorkommt - und Symbol ähnelt Verkehrsschild eingeschränktes Halteverbot auf weißem Grund und nur das S) zu finden.

    Falls das stimmt, wäre das wohl der richtige Weg.

    Und ein weiteres Problem tauchte auf, die Ausführung des Codes aus dem SciTE-Editor scheint häufiger zu scheitern. Kennt Ihr das?

    Beispiel:
    Opt("WinTextMatchMode",2)
    Opt("winTitleMatchMode",2)
    $win = "[CLASS:MozillaWindowClass; TITLE:Firefox]"

    Ein paar Mal funktioniert damit der Befehl WinActivate mit diesen Daten und holt das Fenster, zeitweise nicht, obwohl nichts geändert wurde (im zeitlichen Zusammenhang von weniger als 5 Minuten, x mal probiert) und über ConsoleWrite das Handle ausgeben. Sprich, das Fenster wird zwar gefunden, aber nicht aktiviert und in den Vordergrund geholt, obwohl es sichtbar hinter dem SciTE-Editor liegt.

    Handle: 0x001A0A40
    >Exit code: 0 Time: 2.235

    Firefox-Fenster wird dennoch nicht aktiviert.

    Gilt in Analogie für andere Fenster (temporär) ... Fenster, die recht problemlos aktiviert werden, gibt es auch, z.B. Notepad.

    Gibt es trotz Exit code die Wahrscheinlichkeit, dass was im Speicher hängen geblieben ist, was man über den Taskmanager beenden könnte? Oder auf anderem Wege? FireFox und SciTE-Editor habe ich mehrfach neu gestartet - ohne Erfolg.

    2 Mal editiert, zuletzt von AutoMit (13. Juni 2015 um 22:27)

  • Es gibt für Firefox eine UDF (User defined Function), such mal nach _FF.au3, sollte schnell zu finden sein. Zum Aktivieren kannst du ja WinActivate nutzen, ich seh leider nicht, wie du es versuchst.

    Was die Hilfe angeht: Das ist eher eine Dokumentation, die dazu dient, Infos zu Funktionen herauszusuchen, oder zu suchen. Mit Suchen ist aber nicht gemeint, dass du nach einem Oberbegriff suchen sollst.
    Die Hilfe ist allgemein nicht so gut, wenn man Grundlagen lernen will. (Insbesondere die Deutsche Hilfe, die etwas älter ist, und die du NUR mit der AutoIt version nutzen solltest, die dransteht (v3.3.8.1). Es haben sich Parameter von Funktionen geändert, Teilweise ganze Namen von Funktionen,...
    Zum Lernen sind Tutorials (auch hier aus dem Forum gut). Bevor du also in der Hilfe nach Array suchst, solltest du bei Google suchen, denn Arrays sind so Grundlegend, dass sie in der Hilfe nicht genau erläutert werden.
    Wenn du Grundlagen lernen willst ist dieses Buch von @peethebee sehr zu empfehlen: http://slzm.de/blog/wp-conten…eb_20120406.pdf
    Dort wird alles wichtige erklärt.

    Achja: Ohne Englisch wirst du dir beim Programmieren schwertun, denn fast alles in dem Bereich ist auf Englisch.

  • such mal nach _FF.au3


    Hier habe hier auch schon das sehr interessante Tutorial zu ff.au3 gelesen und erste Versuche unternommen. Aber damit kann man meiner Kenntnis nach keine Addons ansteuern, wie z.B. Nocscirpt - oder doch?

    Es haben sich Parameter von Funktionen geändert, Teilweise ganze Namen von Funktionen

    Oh - da bin ich von ganz anderen Voraussetzungen ausgegangen. Ich dachte, es gebe eine deutschsprachige FAQ oder Hilfe, die up2date wäre und die über Suchparameter wie die z.B. die Excelhilfe nutzbar wäre.

    Das Problem mit der Fensteraktivierung ist gelöst - hing mit winTitleMatchMode zusammen.

    Aktueller Stand (für die, die nicht alles lesen :) :

    Firefox

    • Herausforderung: ein Icon eines Addons in Firefox soll lokalisiert werden

    - mit FF.au3 habe ich keinen Weg gefunden
    - in unterschiedlichen Firefox-Profilen befindet sich das Icon an einer unterschiedlichen Position (da die Icons verschiebbar sind bzw. nicht in jedem Profil alle Addons und damit Icons vorhanden sind).

    Was tun?

    Ich habe mal was aufgeschnappt von einer Mustersuche - will heißen, dass Autoit in der Lage ist, das NoScript Logo (welches in 2 Varianten vorkommt - und Symbol ähnelt Verkehrsschild eingeschränktes Halteverbot auf weißem Grund und nur das S) zu finden.

    Wäre das die Lösung bzw. welche alternativen Lösungen gibt es?

    3 Mal editiert, zuletzt von AutoMit (14. Juni 2015 um 12:47)

  • Hier habe hier auch schon das sehr interessante Tutorial zu ff.au3 gelesen und erste Versuche unternommen. Aber damit kann man meiner Kenntnis nach keine Addons ansteuern, wie z.B. Nocscirpt - oder doch?

    Hallo,

    prinzipiell kann man Addons schon steuern siehe Beispiele UDFs.

    Die nötigen Schnittstellen muß man allerdings selbst herausfinden, indem man z.B. den Quelltext des Addons ansieht oder sich per Telnet mit MozRepl verbindet und die passende Objekte heraussucht (siehe evtl. auch _FFGetObjectInfo)

    Grüße
    Stilgar