Text aus Internet Explorer oder Firefox lesen, dann...

  • Hallihallo

    Und zwar hätt ich da ne kleine Frage.. Ich hab schon ein wenig gesucht aber nicht wirklich viel gefunden.. wahrscheinlich nur die falschen Begriffe.

    Also:

    Ich bin also auf einer Internetseite und starte die Datei. Dann möchte ich, dass wenn zum Beispiel "Heute ist schönes Wetter" auf der Seite, bzw. in einem Teil auf dieser Seite steht, etwas passiert.. Und zwar: Ein paar klicks oder Tastenbewegungen (das krieg ich hin..)

    ABER Wenn dieser Text nicht dasteht soll er zum Beispiel nach "Hallo, mein Name ist .." suchen.. und etwas anderes machen ( auch klicks oder tastenbewegungen)

    Und zwar eine ganze Menge verschiedener Texte kann dort stehn.. (100+)
    Also ist es irgendwie möglich das hinzukriegen?

    Also Zusammenfassung: "Wenn Text xxx mache das und das" "Wenn Text yyy dann mach dies und dies" "Wenn Text zzz mach dies und das"

    Text steht wie gesagt in Firefox oder Internet Exolorer.

    Ein kleines Beispiel nur ohne Text lesen:

    Spoiler anzeigen


    Wenn Text xxx
    MouseClick ("left" ,1100,580)
    sleep(500)
    MouseClick ("left",150,250)
    sleep(500)

    Wenn Text xxx
    MouseClick ("left" ,1600,70)
    sleep(500)
    MouseClick ("right",150,250)
    sleep(500)

  • Auch wenn das stark nach einem Botscript riecht, hier mal ein paar allgemeine Tipps:

    Der Befehl den Du suchst ist der Switch Befehl, damit kann man auf eine große Menge möglicher Antworten reagieren. Natürlich mußt Du da vorher den richtigen Teil des Texts von der Website in eine Variable gelesen haben.

    Wenn es immer nur um bestimmte Clicks geht, kannst Du das ganze auch über Arrays erledigen, das ist dann übersichtlicher.

    Also, alle Texte in ein Array, das Du dann nach dem gefundenen Text durchsuchst. Dann wählst Du in einem zweiten Array die passenden Mauskoordinaten dazu aus, indem Du die passenden X,Y Werte in das Array einträgst.

    [autoit]


    Dim $Texte[100]=["Text1","Text2",.....]
    Dim $Koordinaten[100][4]=[[123,789,100,555],[234,543,200,888],.....]

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

    $index=_arraysearch($Texte, $Text)

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

    MouseClick("Right",$Koordinaten[$index][0],$Koordinaten[$index][1])
    Sleep(500)
    MouseClick("Right",$Koordinaten[$index][2],$Koordinaten[$index][3])

    [/autoit]

    Oder so ähnlich jedenfalls. Hab jetzt nicht auf Syntax geachtet, und bin nicht so Pro das ich alles auswendig wüßte ;)

  • Also is nich für nen bot nein..

    Kann ich das evtl so machen und auch so schreiben: (ja is dann unübersichtlich aber egal)

    Wenn Text xxx
    Aktion a

    Wenn Text yyy
    Aktion b

    also alles einzeln.. nacheinander
    es handelt sich dabei nicht nur um klicks sondern auch um Texte schreiben oder ähnliches.
    Gibt es da sowas wie "Wenn Text xxx vorhanden, mache das das das das das das (fertig)
    dann kann ich ja einfach das gleiche nur mit anderem text und anderer aktion hinten drann hängen oder? (Sozusagen Wenn xxx, dann b, sonst nächstes prüfen)

  • Mouseclicks in einem Browser Fenster sind nicht gerade ein zuverlässiges Mittel um zum Ziel zu kommen.
    Worauf soll z.B. denn geklickt werden?

    [EDIT]
    Einfachstes Beispiel mit FF fürs Forum hier (ausloggen)

    [autoit]

    #include <FF.au3>

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    If _FFSearch($Socket,"Angemeldet als") Then _FFClickLink($Socket,"Abmelden","text")
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von Stilgar (18. März 2009 um 16:21)

  • Stilgar:
    Mir scheints, von dem Zuverlässigkeitsproblem ist er noch ein bischen entfernt ;)

    @TheWhiteDeath:
    Klar, im Prinzip kannst Du für jede Aktion Deinen eigenen IF Zweig bauen, also dann so:

    [autoit]


    While 1
    If $Text = "Text1" Then
    MouseClick()
    Send ("blabla")
    Sleep(250)
    MouseClick()
    Endif

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

    If $Text = "Text2" Then
    MouseClick()
    Send ("Hallo Welt")
    Sleep(550)
    Send ("{SHIFTDOWN}")
    MouseClick()
    Send ("{SHIFTUP}")
    Endif

    ;usw.

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

    Wend

    [/autoit]

    Aber wie Stilgar schon sagt, zuverlässig ist das nicht, wenn der Browser mal länger lädt, usw. gehts schief. Da solltest Du mal in die InternetExplorer Funktionen schauen, oder in die FireFox UDF

  • is nich schlimm wenns mal nicht klappt oder ähnliches.. kein problem geht nicht irgendwie um 100% sicherheit.. danke schonmal für die 2 schönen beispiele :) ich werds gleich mal versuchen

    [autoit]


    While 1
    If $Text = "Text1" Then
    MouseClick()
    Send ("blabla")
    Sleep(250)
    MouseClick()
    Endif

    [/autoit]

    da wo "Text1" steht den text eingeben der auf der Seite steht?

    hier noch etwas zum veranschaulichen:

    http://img10.imageshack.us/img10/7536/unbenanntfbt.png

    Dort steht nun zum beispiel: "Suchen:"
    Das soll das programm dann nun erkennen und beispielsweise in das textfeld klicken + "blabla" "enter" eingeben.

    2 Mal editiert, zuletzt von TheWhiteDeath (18. März 2009 um 17:31)

  • Da wirst du in FireFox wenig Erfolg haben den Text für das Suchen Feld zu erkennen. Die Oberfläche besteht nicht aus den Windows üblichen Controls.
    Suchen geht da doch einfacher über die FF-UDF.

    Außer du möchtest alles über Send machen, aber dann wirds umständlich.

  • Umständlich is mir ziemlich wurst.. hinkriegen tu ichs irgendwie nicht..^^" wie gesagt meinetwegen auch mit IE

  • Hat ja nix mit dem Browser selbst zu tun, nur ohne FF-UDF oder IE-UDF wirds halt recht umständlich. Wie es mit dem FireFox geht, hab ich oben schon mal gezeigt.
    Welchen du dann im Endeffekt nimmst bleibt sich (noch) ziemlich gleich.

  • [autoit]


    #include <FF.au3>

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    If _FFSearch($Socket,"Angemeldet als") Then _FFClickLink($Socket,"Abmelden","text")
    EndIf

    [/autoit]

    Der Code will bei mir nicht.. ich hab mir FF.au3 geholt.. (davor kam noch n fehler) der kommt jetz zwar nicht mehr.. aber er macht auch nix ^^" also geht da iwas nicht

  • Ok also überflogen hat ich es..

    Installiert ist es und laufen tut es auch.. wenn ich den script jetz ausführe dann kommt unten rechts auch das es läuft aber passieren tut komischerweise trotzdem 0

  • Also ich mach das jetz genau so:

    Firefox nur diese Seite offen, Add on aktiviert.
    Starten des skripts:

    [autoit]


    #include <FF.au3>

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    If _FFSearch($Socket,"Angemeldet als") Then _FFClickLink($Socket,"Abmelden","text")
    EndIf

    [/autoit]

    Es bleibt geöffnet (zeichen unten rechts) aber passieren tut 0

  • Ja ok. Wenn du es aus dem Editor heraus startest:
    Was seht in der Console deines Editors? Dort wird die Kommunikation zwischen dem Skript und FireFox ausgegeben und daran, kann man auch erkennen, was, warum nicht geht.

  • ok also das kommt:

    Spoiler anzeigen

    >"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Dokumente und Einstellungen\User\Desktop\aa.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams
    +>20:28:35 Starting AutoIt3Wrapper v.1.10.1.14 Environment(Language:0407 Keyboard:00000407 OS:WIN_XP/Service Pack 3 CPU:X86 ANSI)
    >Running AU3Check (1.54.14.0) from:C:\Programme\AutoIt3
    +>20:28:35 AU3Check ended.rc:0
    >Running:(3.3.0.0):C:\Programme\AutoIt3\autoit3.exe "C:\Dokumente und Einstellungen\User\Desktop\aa.au3"
    _FFConnect: OS: WIN_XP WIN32_NT 2600 Service Pack 3
    _FFConnect: AutoIt: 3.3.0.0
    _FFConnect: FF.au3: 0.4.1.2b-1
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Delay: 2ms

    edit sagt:

    Und jetzt dann noch das dazu:

    Spoiler anzeigen

    _FFConnect ==> Timeout: Can not connect to FireFox/MozRepl on: 127.0.0.1:4242
    +>20:29:36 AutoIT3.exe ended.rc:0
    +>20:29:37 AutoIt3Wrapper Finished
    >Exit code: 0 Time: 62.298

  • argh doofes antivirus dings... ^^" habs ausgemacht nu gehts danke :D

    das arbeitet auf Quellcode oder auf das was wirklich auf der Seite steht?

    und: er klickt ja dann auf den "Ausloggen" link

    [autoit]

    If _FFSearch($Socket,"Angemeldet als") Then _FFClickLink($Socket,"Abmelden","text")

    [/autoit]

    (wenn das NICHT dasteht tut er nichts oder?)
    und das "text" hinter "abmelden" heißt? ^^"

  • Hmm ein Antiviren Programm blockiert Schnittstellen? Was machen die denn noch alles :D

    _FFSearch arbeitet auf Basis des sichtbaren Textes, alle anderen Funktionen auf DOM und _FFXPath auf XPath eben.

    Erklärung:
    Gibt eine 1 zurück wenn der Text gefunden wurde:

    [autoit]

    If _FFSearch($Socket,"Angemeldet als")

    [/autoit]


    und klickt dann auf den Link mit dem "text" "Abmelden"

    [autoit]

    Then _FFClickLink($Socket,"Abmelden","text")

    [/autoit]

    genau und wenn der Text nicht gefunden wurde, passiert nichts.

    Genauer stehts in der Dokumentation

  • Och super danke :) hat mir sehr geholfen. funktioniert auch einwandfrei

    Danke nochmal

    oh doch noch ein kleines Problem..

    __FFSend: content.find("blabla", false, false, true, false, true, false)
    __FFRecv: 1
    __FFSend: FF_AutoItScript.SearchLink("text","Hallo","top")
    __FFRecv: -1
    _FFClickLink ==> No match: Hallo
    +>21:15:56 AutoIT3.exe ended.rc:0


    er findet den link nicht.. hat der vlt einen komischen/anderen namen? er steht genauso da.. (Aber in nem anderen frame [macht das was?] )

    edit: Wenn er das nicht findet kann ich dann auch das "Hallo" auslesen und ihm sagen er soll auf diese stelle klicken?

    2 Mal editiert, zuletzt von TheWhiteDeath (18. März 2009 um 21:33)