Da ich aktuell einige Fragen dazu bekommen habe und es relativ unwichtig ist, welches Spiel ich mir vornehme, wähle ich folgendes Spiel(einfach, da kein Flash, kein Captcha und kein Ajax!): http://www.holy-war.net mit folgendem LogIn-Namen: Auto-It diesem Passwort: *test123* auf Spielwelt: 10 (deutsch)
Hier können wir NICHT die AutoLogin-Funktion vom Thorsten nehmen, da man noch eine Welt auswählen muss.
Aber ein Script dafür ist schnell geschrieben! Hier ein komplettes mit Sicherheitsabfragen.
AutoIt-Quelltext
#include <FF.au3>
; Wir brauchen als erstes eine einfache Schleife (oder Funktion, wenn euch das lieber ist)
$Login1 = "Auto-It"
$Login2 = "*test123*"
$Welt = "10DE" ; Aus dem Quellcode
While 1
_FFStart("http://www.holy-war.net", "default", 1, False) ; Die URL, FF-default-Profil, "1" für "immer neuen Prozess für FireFox starten", "False" für "sichtbar"
if _FFIsConnected() Then
; Beachtet, wenn man die Seite neu betritt und noch einen Cookie hat, können manche Websites eventuell einen Link verlangen, den man klicken muss, anstatt einen Einlog-Bereich zu präsentieren
; Dann macht ihr einfach noch eine Abfrage nach diesem Link, etc... ;) Ihr seht gleich am "Eingeloggt-Check", wie das geht!
_FFImageClick("m_login", "name") ; Den LogIn-Bereich betreten
_FFSetValue($Login1, "username", "name") ; Ohne Verschlüsselung, da ich davon ausgehe, dass ihr den Bot für Eigengebrauch programmiert und sonst selbst wisst, wie das einfach realisierbar ist
_FFSetValue($Login2, "password", "name")
_FFFormOptionSelect("world", "name", $Welt, "value") ; Name des "Selects", Beschreibung, Wert den wir setzen wollen und Beschreibung
_FFFormSubmit(0, "index", "auto") ; Das erste Formular (Index 0 ist der Beginn) wird abgeschickt, "auto" bedeutet, dass das Script alle Möglichkeiten in Anspruch nimmt, das Formular abzuschicken
if _FFSearch("Gesamtwerte") = 1 Then ; Gesamtwerte ist ein Wort, dass man nach dem ERFOLGREICHEN einloggen sehen müsste
_start()
Else
MsgBox(48, "Einloggen fehlgeschlagen!", "Bitte überprüfen sie die eingegebenen Daten...")
while 1
Sleep (10)
wend
EndIf
Else ; Wenn der FF NICHT Connected ist...
MsgBox(48, "Ein Problem ist aufgetaucht!", "Es konnte keine Verbindung zum FireFox hergestellt werden...")
while 1
Sleep (10)
wend
EndIf
WEnd
Func _start()
While 1
Sleep (10)
Wend
EndFunc
#include<FF.au3>
; Wir brauchen als erstes eine einfache Schleife (oder Funktion, wenn euch das lieber ist)
_FFStart("http://www.holy-war.net","default",1,False); Die URL, FF-default-Profil, "1" für "immer neuen Prozess für FireFox starten", "False" für "sichtbar"
; Beachtet, wenn man die Seite neu betritt und noch einen Cookie hat, können manche Websites eventuell einen Link verlangen, den man klicken muss, anstatt einen Einlog-Bereich zu präsentieren
; Dann macht ihr einfach noch eine Abfrage nach diesem Link, etc... ;) Ihr seht gleich am "Eingeloggt-Check", wie das geht!
_FFImageClick("m_login","name"); Den LogIn-Bereich betreten
_FFSetValue($Login1,"username","name"); Ohne Verschlüsselung, da ich davon ausgehe, dass ihr den Bot für Eigengebrauch programmiert und sonst selbst wisst, wie das einfach realisierbar ist
_FFSetValue($Login2,"password","name")
_FFFormOptionSelect("world","name",$Welt,"value"); Name des "Selects", Beschreibung, Wert den wir setzen wollen und Beschreibung
_FFFormSubmit(0,"index","auto"); Das erste Formular (Index 0 ist der Beginn) wird abgeschickt, "auto" bedeutet, dass das Script alle Möglichkeiten in Anspruch nimmt, das Formular abzuschicken
if _FFSearch("Gesamtwerte")=1Then; Gesamtwerte ist ein Wort, dass man nach dem ERFOLGREICHEN einloggen sehen müsste
Wie man sehen kann, gibt es die "0" hier nicht direkt... Diese bezeichnet einfach das erste Formular auf der Seite(da es nur eins gibt, also sehr einfach so, klappt meist!).
Jetzt möchten wir eventuell ?plündern? gehen(unter ?Überfall? zu finden!). Da finden wir den Button, ?Plündern?, den wir irgendwie ansprechen müssen.
Folgender Quellcode:
Nun bleiben uns 3 Möglichkeiten, diesen Button zu aktivieren. Entweder versucht ihr ihn durch Javascript(hier steht eine ganze Javascript-Funktion, nicht nur ein Befehl, also zu kompilziert) zu aktivieren, ihr nehmt _FFImageClick(der Button hat ein Bild), _FFFormSubmit(hier scheinbar nicht möglich, da der Button nicht direkt einem Formular zugeordnet ist), oder mit _FFClick(indem wir mit _FFXPath das Element definieren). _FFLinkClick ist hier nicht angemessen, da es kein einfacher Link ist.
_FFImageClick("http://www.holy-war.net/public/img/de/buttons/btn_pluendern.jpg", ?src?)
; oder
_FFImageClick(?btn_pluendern7404848?, ? name?)
;oder (halt immer eine gute Variante(nicht so erklärt)) Das geht aber normaler Weise auch am schnellsten und sehr exakt
_FFClick(_FFXpath("//a[@id='menuLinkm_ueberfall']/img ","",9) )
Bei _FFFormSubmit müsste man beachten, dass man den Namen der FORM nehmen muss, nicht den des Buttons!
_FFClick sieht erst komplizierter aus, ist aber oft die einzige Möglichkeit, je nachdem, wie das Game geschützt ist.
Durch einen Rechtsklick auf den Button und Auswahl des Tools ?XPather? erhalte ich folgendes ->
Damit das allgemeingültiger wird und weniger anfällig auf Änderungen der Programmierer ist, kürzen wir das ganze so, dass es trotzdem eindeutig bleibt! Dazu nehmen wir einen Teil heraus und klicken wieder auf ?Eval?. Dann sehen wir, ob das Ergebnis bleibt. Da, wo wir etwas gekürzt haben, muss anstatt ein einfaches ?/? ein ?//? hin!
Also so ->
Zitat
//button[@id='btn_pluendern42661']
Nun setzen wir das noch in die Funktion, undzwar als Element! Also ohne einen weiteren Parameter. Bzw. HALT! Damit das als Element angenommen wird, müssen wir das natürlich noch in eine _FFXPath-Funktion packen! Das geht so ->
AutoIt-Quelltext
_FFXpath("//button[@id='btn_pluendern42661']","",9)
; Zusammen also ->
_FFClick(_FFXpath("//button[@id='btn_pluendern42661']","",9))
Dann schaun wir einfach mal für die Parameter? Es soll kein Array werden und ?Textinhalt?, also alles default-Werte(genaue _FFXPath-Erklärung in meinem anderen Tut.)!
AutoIt-Quelltext
_FFXPath("//span[@id='counter42661']")
_FFXPath("//span[@id='counter42661']")
Damit landen wir bei folgendem Beispiel-Endergebnis, das aufschlußreich genug sein sollte:
AutoIt-Quelltext
#include <FF.au3>
; Wir brauchen als erstes eine einfache Schleife (oder Funktion, wenn euch das lieber ist)
$Login1 = "Auto-It"
$Login2 = "*test123*"
$Welt = "10DE" ; Aus dem Quellcode
While 1
_FFStart("http://www.holy-war.net", "default", 1, False) ; Die URL, FF-default-Profil, "1" für "immer neuen Prozess für FireFox starten", "False" für "sichtbar"
if _FFIsConnected() Then
; Beachtet, wenn man die Seite neu betritt und noch einen Cookie hat, können manche Websites eventuell einen Link verlangen, den man klicken muss, anstatt einen Einlog-Bereich zu präsentieren
; Dann macht ihr einfach noch eine Abfrage nach diesem Link, etc... ;) Ihr seht gleich am "Eingeloggt-Check", wie das geht!
_FFImageClick("m_login", "name") ; Den LogIn-Bereich betreten
_FFSetValue($Login1, "username", "name") ; Ohne Verschlüsselung, da ich davon ausgehe, dass ihr den Bot für Eigengebrauch programmiert und sonst selbst wisst, wie das einfach realisierbar ist
_FFSetValue($Login2, "password", "name")
_FFFormOptionSelect("world", "name", $Welt, "value") ; Name des "Selects", Beschreibung, Wert den wir setzen wollen und Beschreibung
_FFFormSubmit(0, "index", "auto") ; Das erste Formular (Index 0 ist der Beginn) wird abgeschickt, "auto" bedeutet, dass das Script alle Möglichkeiten in Anspruch nimmt, das Formular abzuschicken
if _FFSearch("Gesamtwerte") = 1 Then ; Gesamtwerte ist ein Wort, dass man nach dem ERFOLGREICHEN einloggen sehen müsste
_start()
Else
MsgBox(48, "Einloggen fehlgeschlagen!", "Bitte überprüfen sie die eingegebenen Daten...")
while 1
Sleep (10)
wend
EndIf
Else ; Wenn der FF NICHT Connected ist...
MsgBox(48, "Ein Problem ist aufgetaucht!", "Es konnte keine Verbindung zum FireFox hergestellt werden...")
while 1
Sleep (10)
wend
EndIf
WEnd
Func _start()
While 1 ; normaler Weise arbeitet man ja immer in einer Schleife
_FFClick(_FFXpath("//a[@id='menuLinkm_ueberfall']/img ","",9)) ; Überfall öffnen
_FFLoadWait() ; _FFClick hat keinen Standard-Parameter dafür!
_FFClick(_FFXpath("//button[@id='btn_pluendern42661']","",9)) ; Überfallen starten
_FFLoadWait() ; _FFClick hat keinen Standard-Parameter dafür!
Sleep (2000)
For $i = 1 to 6 Step + 1 ; Schleife zur Verdeutlichung, dass der Befehl klappt!
$timer = _FFXPath("//span[@id='counter42661']")
MsgBox(64, "Aktuelle Zeit", $timer)
Sleep (10000) ; 10 Sekunden warten
Next
Exit ; Script beenden
Wend
EndFunc
#include<FF.au3>
; Wir brauchen als erstes eine einfache Schleife (oder Funktion, wenn euch das lieber ist)
_FFStart("http://www.holy-war.net","default",1,False); Die URL, FF-default-Profil, "1" für "immer neuen Prozess für FireFox starten", "False" für "sichtbar"
; Beachtet, wenn man die Seite neu betritt und noch einen Cookie hat, können manche Websites eventuell einen Link verlangen, den man klicken muss, anstatt einen Einlog-Bereich zu präsentieren
; Dann macht ihr einfach noch eine Abfrage nach diesem Link, etc... ;) Ihr seht gleich am "Eingeloggt-Check", wie das geht!
_FFImageClick("m_login","name"); Den LogIn-Bereich betreten
_FFSetValue($Login1,"username","name"); Ohne Verschlüsselung, da ich davon ausgehe, dass ihr den Bot für Eigengebrauch programmiert und sonst selbst wisst, wie das einfach realisierbar ist
_FFSetValue($Login2,"password","name")
_FFFormOptionSelect("world","name",$Welt,"value"); Name des "Selects", Beschreibung, Wert den wir setzen wollen und Beschreibung
_FFFormSubmit(0,"index","auto"); Das erste Formular (Index 0 ist der Beginn) wird abgeschickt, "auto" bedeutet, dass das Script alle Möglichkeiten in Anspruch nimmt, das Formular abzuschicken
if _FFSearch("Gesamtwerte")=1Then; Gesamtwerte ist ein Wort, dass man nach dem ERFOLGREICHEN einloggen sehen müsste
Ich hoffe sehr, dass euch das Tutorial gefallen hat. Falls etwas fehlt, ihr Verbesserungen oder Anmerkungen habt, ich freue mich immer über KONSTRUKTIVE Kritik und Fragen.