Button einer Internetseite anklicken

  • Hab da noch mal ne Frage zum Thema Buttons anklicken.

    Hab ja schon die Themen, Tuts, Dokus und Hilfen durchgeforstet, aber Irgendwie komm ich seit 2 Tagen nicht weiter. :rolleyes:

    Momentan mach ich es mit Mouseclick() aber da das Browserfenster immer an einer anderen Position sein könnte, ist diese Funktion eher ungeeignet. Davon abgesehen sind es viele Buttons die angeklickt werden müssen und ich würde dabei gerne mit der Maus weiterarbeiten können. Also Mouseclick() fällt flach.

    Controllclick() wäre nicht schlecht aber ich bekomm mit dem WinInfoTool keine Control ID und soweit ich das sehe funktioniert der Controlclick() nur mit einer Control ID. Also würde diese Funktion auch nicht funktionieren.


    Was gibt es da noch für Möglichkeiten?

    Noch ein paar Infos zum Button.
    Der Button ist in einem Frame der Seite.
    Quelltext des Frames gibt nichts her.
    Wenn ich im FF auf Seiteninformationen gehe werden mir alle Links angezeigt, auch von dem wo ich brauche. Nur leider ändert sich die Linkadresse immer.
    Es wird mir aber auch der Name das Buttons angezeigt, vielleicht hilft das weiter.
    Auf dem Button ist auch ein Text, den man Markieren kann und dieser ist immer der selbe.

    Ob man das jetzt mit dem FF oder IE macht ist mir egal aber wenns nur gut/einfacher mit dem IE geht, dann wäre es nicht schlecht wenn es im Hintergrund ablaufen könnte, wäre mir eigentlich auch lieber.

    • Offizieller Beitrag

    Hi!

    Es wird auf die UDF IE.au3 hinauslaufen. In der aktuellen Version wird diese bereits mitegeliefert. Die Hilfe erklärt (leider bisher nur auf Englisch) alle Befehl (beginnen mit _IE).
    Dazu gibt die Forumssuche hier dazu einiges her :)

    peethebee

  • Zitat

    ist kein Problem mit ie.au3

    Ihr sagt das immer so einfach :weinen:

    Zitat

    Seite?

    Sagen wir mal auf der Ogame.de Startseite, den Log in Button.


    Zitat

    Es wird auf die UDF IE.au3 hinauslaufen.

    Ja die kenn ich, habs damit auch schon probiert, aber ich weiss halt nicht wie ich dem klar mache das ich genau diesen Button klicken will.

  • wo ist das Problem du sendest and die inputs die Daten und dann mit _IEImageclick(heißt die glaub ich)

    Code
    <input type="image" src="img/main/login.gif" width="40" height="15" border="0" value="Login">

    da ist doch alles drinne im Quelltext

    • Offizieller Beitrag

    Hi,

    Spoiler anzeigen
    [autoit]

    #include<ie.au3>
    $sUrl = "http://ogame.de/portal/?lang=de&frameset=1"
    $oIE = _IECreate($sUrl, 0, 1) ;0,1 visible...0,0 invisible
    $oHWND = _IEPropertyGet($oIE, "hwnd");bingt nichts wenn ie unsichtbar
    WinSetState($oHWND, "", @SW_MAXIMIZE);bingt nichts wenn ie unsichtbar
    $oForm = _IEFormGetCollection($oIE, 0);oder $oForm = _IEFormGetCollection ($oIE, "formular") möglich
    $oUniversum = _IEFormElementGetObjByName($oForm, "Uni")
    _IEFormElementOptionSelect($oUniversum, "1. Universum", 1, "byText");wählt "1. Universum" aus

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

    $oLogin = _IEFormElementGetObjByName($oForm, "login");sucht eingabefeld mit namen "login"
    $sUsername = InputBox("Username", "Bitte geben Sie Ihren Benutzernamen ein:", "Benutzername", " ", 50, 140);öffnet Inputbox zum eingeben für Usernamen
    _IEFormElementSetValue($oLogin, $sUsername)

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

    $oPassword = _IEFormElementGetObjByName($oForm, "pass");sucht eingabefeld mit namen "pass"
    $sPassword = InputBox("Passwort", "Bitte geben Sie Ihr Passwort ein:", "passwort", "*", 50, 140);öffnet Inputbox zum eingeben für Passwort
    _IEFormElementSetValue($oPassword, $sPassword)
    _IEFormSubmit($oForm);bestätigt form

    [/autoit]

    So long,

    Mega

  • Ok mit dem Log in Button war ein blödes Beispiel.
    Der Button ist ingame und dort ist es kein Bild.
    Sondern eher wie links der Startseiten, Neuigkeiten Button, Nur das ingame Startseite als Text erscheint, als man kann den Text markieren.

  • Zitat

    ich kann dir nur das geben, was du beschreibst. Zwinkern

    Ihr Antwortet so schnell ich komm garnicht nach ;)

    Aber der Code von dir ist auch gut. Bei meinem muß das script, für den Log in, ca.100 mal die Tab Taste drücken :rofl:

    Aber ich denke mit deinem Code komm ich weiter.
    Muß mir den Code jetzt mal in ruhe anschauen und verstehen, dann wirds funktionieren.

  • so....
    spion ich hab keine ahnung welchen butten du grad versuchst zu klicken oder whatever(ich verstehs einfach nicht^^) machste screenshot und dazu quelltext wäre schon etwas hilfreicher....da nicht alle bei ogame angemeldet sind und ich z.b. nicht weiß was du grad willst^^

    Ps:@meger der quelltext(link) kommt mir bekannt vor xD aber passt schon ;)

  • Zitat

    spion ich hab keine ahnung welchen butten du grad versuchst zu klicken oder whatever

    Hab mal nen Screenshot angehängt.
    Ich hoffe das hilft weiter.

    Was im Quelltext auf diesen Button deutet hab ich mal rauskopiert.

    Spoiler anzeigen


    <tr>
    <td>
    <div align="center"><font color="#FFFFFF">
    <a href='overview.php?session=xxxxxxxxxxxx' accesskey="ü" target='Hauptframe'>&Uuml;bersicht</a>
    </font></div>

    </td>
    </tr>

    [Edit]
    Hab versucht, mir den Code zu erklären. Leider ist mein Englisch von der Schule schon 9 Jahre her. :rolleyes:

    Spoiler anzeigen
    [autoit]


    #include<ie.au3>
    $sUrl = "http://ogame.de/portal/?lang=de&frameset=1"
    $oIE = _IECreate($sUrl, 0, 1) ;0,1 visible...0,0 invisible ;öffnet den IE
    $oHWND = _IEPropertyGet($oIE, "hwnd");hwnd = Retrieves the handle of the Internet Explorer main window. Can be used in most AutoIt Win* functions.???????
    WinSetState($oHWND, "", @SW_MAXIMIZE);maximiert den IE ???
    $oForm = _IEFormGetCollection($oIE, 0);Speichert alle Eingabefelder???
    $oUniversum = _IEFormElementGetObjByName($oForm, "Uni");Sucht das Eingabefeld "Uni"
    _IEFormElementOptionSelect($oUniversum, "1. Universum", 1, "byText");wählt "1. Universum" aus
    $oLogin = _IEFormElementGetObjByName($oForm, "login");sucht eingabefeld mit namen "login"
    $sUsername = InputBox("Username", "Bitte geben Sie Ihren Benutzernamen ein:", "Benutzername", " ", 50, 140);öffnet Inputbox zum eingeben für Usernamen
    _IEFormElementSetValue($oLogin, $sUsername); trägt Username
    $oPassword = _IEFormElementGetObjByName($oForm, "pass");sucht eingabefeld mit namen "pass"
    $sPassword = InputBox("Passwort", "Bitte geben Sie Ihr Passwort ein:", "passwort", "*", 50, 140);öffnet Inputbox zum eingeben für Passwort
    _IEFormElementSetValue($oPassword, $sPassword);trägt Passwort ein
    _IEFormSubmit($oForm);bestätigt das Formular???

    [/autoit]

    Wenn ich das richtig verstanden habe, würde mir _IEFormElementGetObjByName weiterhelfen. Wobei ich jetzt nicht weiss, ob der Befehl nur Eingabefelder sucht oder auch einfach nur den Text.
    Und mit _IEFormSubmit kann man warscheinlich auch nur Eingabefelder/Formulare bestätigen, oder?
    Das "Form" in den Befehlen steht da bestimmt nicht umsonst. :D
    Also ist der Code für Buttons eher ungeeignet?
    [/Edit]

  • Also ich komm nicht weiter :weinen:

    Der Code

    Spoiler anzeigen
    [autoit]


    #include<ie.au3>
    $sUrl = "http://ogame.de/portal/?lang=de&frameset=1"
    $oIE = _IECreate($sUrl, 0, 1) ;0,1 visible...0,0 invisible ;öffnet den IE
    $oHWND = _IEPropertyGet($oIE, "hwnd");hwnd = Retrieves the handle of the Internet Explorer main window. Can be used in most AutoIt Win* functions.???????
    WinSetState($oHWND, "", @SW_MAXIMIZE);maximiert den IE ???
    $oForm = _IEFormGetCollection($oIE, 0);Speichert alle Eingabefelder???
    $oUniversum = _IEFormElementGetObjByName($oForm, "Uni");Sucht das Eingabefeld "Uni"
    _IEFormElementOptionSelect($oUniversum, "1. Universum", 1, "byText");wählt "1. Universum" aus
    $oLogin = _IEFormElementGetObjByName($oForm, "login");sucht eingabefeld mit namen "login"
    $sUsername = InputBox("Username", "Bitte geben Sie Ihren Benutzernamen ein:", "Benutzername", " ", 50, 140);öffnet Inputbox zum eingeben für Usernamen
    _IEFormElementSetValue($oLogin, $sUsername); trägt Username
    $oPassword = _IEFormElementGetObjByName($oForm, "pass");sucht eingabefeld mit namen "pass"
    $sPassword = InputBox("Passwort", "Bitte geben Sie Ihr Passwort ein:", "passwort", "*", 50, 140);öffnet Inputbox zum eingeben für Passwort
    _IEFormElementSetValue($oPassword, $sPassword);trägt Passwort ein
    _IEFormSubmit($oForm);bestätigt das Formular

    [/autoit]

    funktioniert soweit.
    Bis auf _IEFormSubmit($oForm) Da öffnet er einfach die Seite wieder neu.
    Wie kann ich den Login Knopf drücken, ohne Maus und Tab?

  • so also hab mir mal wieder den quelltext von ogame reingezogen...da haben die ne kleine änderung vorgenommen....
    änderung:

    Spoiler anzeigen

    <form name="formular" action="" method="POST" onSubmit="changeAction('login');">


    das onsubmit war vorher nicht da deswegen hats nicht geklappt jetzt gehts....
    probier auch gleich mal das andere(hab mich grad angemeldet ;))

    [autoit]

    #include<ie.au3>
    $sUrl = "http://ogame.de/portal/?lang=de&frameset=1"
    $oIE = _IECreate($sUrl, 0, 1) ;0,1 visible...0,0 invisible ;öffnet den IE
    $oHWND = _IEPropertyGet($oIE, "hwnd");hwnd = Retrieves the handle of the Internet Explorer main window. Can be used in most AutoIt Win* functions.???????
    WinSetState($oHWND, "", @SW_MAXIMIZE);maximiert den IE ???
    $oForm = _IEFormGetCollection($oIE, 0);Speichert alle Eingabefelder???
    $oUniversum = _IEFormElementGetObjByName($oForm, "Uni");Sucht das Eingabefeld "Uni"
    _IEFormElementOptionSelect($oUniversum, "1. Universum", 1, "byText");wählt "1. Universum" aus
    $oLogin = _IEFormElementGetObjByName($oForm, "login");sucht eingabefeld mit namen "login"
    $sUsername = InputBox("Username", "Bitte geben Sie Ihren Benutzernamen ein:", "Benutzername", " ", 50, 140);öffnet Inputbox zum eingeben für Usernamen
    _IEFormElementSetValue($oLogin, $sUsername); trägt Username
    $oPassword = _IEFormElementGetObjByName($oForm, "pass");sucht eingabefeld mit namen "pass"
    $sPassword = InputBox("Passwort", "Bitte geben Sie Ihr Passwort ein:", "passwort", "*", 50, 140);öffnet Inputbox zum eingeben für Passwort
    _IEFormElementSetValue($oPassword, $sPassword);trägt Passwort ein
    $oForm.fireEvent("onSubmit")
    _IEFormSubmit($oForm);bestätigt das Formular

    [/autoit]
  • Ok er loggt sich ein aber dann bleibt das script stehen, also alles was nach _IEFormSubmit($oForm) kommt, verarbeitet er nicht mehr, auch nicht Exit.


    Bei dem Übersicht Button bin ich jetzt schon soweit abgedriftet, dass ich per
    $test1_IEBodyReadHTML
    eigentlich die Adresszeile auslesen wollte aber das hier bekomme:

    Code
    <FRAME name=Inhalt marginWidth=0 marginHeight=0 src="leftmenu.php?session=49721b342158" noResize target="Hauptframe"><FRAME name=Hauptframe src="overview.php?session=000000000000&amp;w=0&amp;lgn=1" target="_blank"><NOFRAMES></NOFRAMES>

    Ok auch gut. Lese ich mir halt die session=ID (ändert sich bei jedem Login) aus, also mit
    $test2 _StringBetween($test1, "n=", " no")

    Da es jetzt ein Array ist wollte ich mit
    $test4 = _ArrayToString( $test2, "", 0, 0)
    den Wert auslesen, aber da spuckt er mir nichts aus. :comp2:

    Eigentlich wollte ich dann einfach die sessionID an die URL für die Übersicht anhängen und ausführen.

    So würde es gehen. Aber ich glaube den weg wo ich da eingeschlagen habe ist bestimmt der umständlichste den es gibt :irre:

  • so hab nen weg gefunden das login formular von ogame auszutricksen xD

    [autoit]

    #include<ie.au3>
    $sUrl = "http://ogame.de/portal/?lang=de&frameset=1"
    $oIE = _IECreate($sUrl, 0, 1) ;0,1 visible...0,0 invisible ;öffnet den IE
    $oHWND = _IEPropertyGet($oIE, "hwnd");hwnd = Retrieves the handle of the Internet Explorer main window. Can be used in most AutoIt Win* functions.???????
    WinSetState($oHWND, "", @SW_MAXIMIZE);maximiert den IE ???
    $oForm = _IEFormGetCollection($oIE, 0);Speichert alle Eingabefelder???
    $oUniversum = _IEFormElementGetObjByName($oForm, "Uni");Sucht das Eingabefeld "Uni"
    _IEFormElementOptionSelect($oUniversum, "1. Universum", 1, "byText");wählt "1. Universum" aus
    $oLogin = _IEFormElementGetObjByName($oForm, "login");sucht eingabefeld mit namen "login"
    $sUsername = InputBox("Username", "Bitte geben Sie Ihren Benutzernamen ein:", "Benutzername", " ", 50, 140);öffnet Inputbox zum eingeben für Usernamen
    _IEFormElementSetValue($oLogin, $sUsername); trägt Username
    $oPassword = _IEFormElementGetObjByName($oForm, "pass");sucht eingabefeld mit namen "pass"
    $sPassword = InputBox("Passwort", "Bitte geben Sie Ihr Passwort ein:", "passwort", "*", 50, 140);öffnet Inputbox zum eingeben für Passwort
    _IEFormElementSetValue($oPassword, $sPassword);trägt Passwort ein
    $oForm.fireEvent("onSubmit")
    _IEFormSubmit($oForm,0);bestätigt das Formular und wartet 0 sek
    Dim $content
    ;hier wird gewartet bis im quelltext nicht mehr "Universum auswählen..." drinn steht....
    Do
    $content = _IEDocReadHTML($oIE)
    Sleep(500)
    Until NOT StringInStr($content,"Universum auswählen...")
    Sleep(1000);wartet nochmal ne sekunde damit wirklich alles fertig geladen ist
    $oIE_Frame = _IEFrameGetObjByName($oIE,"INHALT");da frameset muss dies gemacht werden...
    _IELinkClickByText($oIE_Frame,"Rohstoffe"); das was in der navileiste steht
    Sleep(2000)
    _IELinkClickByText($oIE_Frame,"Forschung")
    Sleep(2000)

    [/autoit]


    so ich hoffe mal das reicht als ansatz nun aus ;)

    der snoozer

    //edit
    login infos könnte auch in ner datei gespeichert werden und dann jedesmal ausgelesen werden....
    des andere hab ich jetzt vergessen xD

  • Code
    $U_Frame = _IEFrameGetObjByName($oIE,"INHALT")
    _IELinkClickByText($U_Frame,"Übersicht")

    Das ist alles 8o
    Oh man und ich denk um tausend Ecken :hammer:
    Ok das klappt schon mal super mit dem "Übersicht" klicken simulieren.
    Super danke :klatschen:


    Das einzige Problem, dass ich jetzt noch habe, ist immernoch, dass alles was nach
    _IEFormSubmit($oForm)
    kommt, nicht verarbeitet wird.
    Also auch nicht dein warten bis nicht mehr "Universum auswählen..." im Quelltext steht. Aber darauf brauch er ja eigentlich auch nicht warten, weil er sich ja einloggt und die neue Seite wird auch geladen. Aber dann tut sich nix mehr.
    Wenn ich
    $oForm.fireEvent("onSubmit")
    _IEFormSubmit($oForm)
    durch
    Send("{Tab}")
    Send("{Enter}")
    ersetzte, geht es zwar aber durch die Send Befehle kann ich leider den IE nicht mehr versteckt laufen lassen.

    Zitat

    login infos könnte auch in ner datei gespeichert werden und dann jedesmal ausgelesen werden....

    Hab mir schon eine GUI erstellt, über die man die ganzen Daten eingeben kann. Dort arbeite ich mit INIWrite und INIRead.

    Solche Sachen sind auch kein Problem aber die IE.AU3 bringt mich noch zum verzweifeln.

  • Zitat

    Original von SpionDas einzige Problem, dass ich jetzt noch habe, ist immernoch, dass alles was nach
    _IEFormSubmit($oForm)
    kommt, nicht verarbeitet wird.
    Also auch nicht dein warten bis nicht mehr "Universum auswählen..." im Quelltext steht. Aber darauf brauch er ja eigentlich auch nicht warten, weil er sich ja einloggt und die neue Seite wird auch geladen. Aber dann tut sich nix mehr.


    hast du es denn mit:

    [autoit]

    $oForm.fireEvent("onSubmit")
    _IEFormSubmit($oForm,0);bestätigt das Formular
    Dim $content
    Do
    $content = _IEDocReadHTML($oIE)
    Sleep(500)
    Until NOT StringInStr($content,"Universum auswählen...")

    [/autoit]


    ausprobiert??? da gehts bei mir einwandfrei!!ganz normal mit _IEFormSubmit($oForm) geht es bei mir auch nicht (aus welchen gründen auch immer) deswegen hab ich ja auch dieses warten bis nicht mehr "Universum auswählen..." im quelltext steht eingebaut damit er wartet bis die login infos gesendet wurden ein "wenig" die funktionen umgebogen aber so wies oben steht gehts bei mir....

    Zitat

    Original von Spion

    Hab mir schon eine GUI erstellt, über die man die ganzen Daten eingeben kann. Dort arbeite ich mit INIWrite und INIRead.

    Solche Sachen sind auch kein Problem aber die IE.AU3 bringt mich noch zum verzweifeln.


    sollte nur nen tip sein ;)
    PS: ich hoffe es ist klar dass du den quelltext(von dem rechten frame) mit $oIE_Frame_Haupt = _IEFrameGetObjByName($oIE,"HAUPTFRAME") so ausließt....
    der snoozer

  • Ja habs damit auch schon versucht, aber wie ich schon sagte, egal was ich nach _IEFormSubmit($oForm) für ein Befehl gebe, er wird nicht mehr verarbeitet. Das Script bleibt dann einfach stehen. Selbst wenn ich Exit danach schreibe, schließt sich das Script nicht. Was mir aber aufgefallen ist, Ogame aktuallisiert ca. alle 5 min, ich glaube nur den Inhalt Frame. Wenn das passiert ist, läuft das Script weiter. Ich hab auch erst gedacht es hängt an meinem Vista mit IE7 aber auf 3 anderen Rechnern mit XP und IE6 passiert das selbe wie bei mir.
    Aber egal ist nicht so schlimm mit send Tab und send Enter geht es ja.

    Zitat


    PS: ich hoffe es ist klar dass du den quelltext(von dem rechten frame) mit $oIE_Frame_Haupt = _IEFrameGetObjByName($oIE,"HAUPTFRAME") so ausließt....

    Ja, dank deiner Hilfe bin ich dann selber drauf gekommen, wo ich mir das rauslesen kann.

    Also noch mal Danke snoozer für deine Hilfe, hat mir echt weiter geholfen.

    PS: Bleibst du jetzt bei Ogame angemeldet und spielst es? Oder sagen dir so Browsergames nicht zu?

    Einmal editiert, zuletzt von Spion (12. April 2007 um 00:05)

  • Zitat

    Original von SpionAlso noch mal Danke snoozer für deine Hilfe, hat mir echt weiter geholfen.

    PS: Bleibst du jetzt bei Ogame angemeldet und spielst es? Oder sagen dir so Browsergames nicht zu?


    kein problem für die hilfe dafür ist dieses forum ja da ;)
    *hab so gut wie alles von jonk gelernt ;)*
    ich denke mal ich spiele ogame nicht wirklich(also nein ;))
    naja zurzeit bin ich in Escape to Space sehr aktiv...sowas ähnliches wie ogame...
    naja egalo der rest eher offtopic
    Topic successful closed
    der snoozer