Project by FirePanther
1c6bdde2e1dc69a5ffb9533dea92be7f

Nicht angemeldet.

Das Tutorial wurde noch nicht zuvor von Ihnen gelesen.

Tutorials

Hier finden Sie Tutorials von und für Euch

Tutorialinformationen
1288 Zugriffe / 0 Kommentare

FF.au3 ? So mache ich Bots für Browsergames

Kurzbeschreibung
Grundlagen zur Boterstellung(Browsergames) mit der FF.au3.
Hey, in meinem ersten Tutorial zur FF.au3 habt ihr ja sicher alle die Grundlagen gelernt, wie man sich mit AutoIt durch den FireFox durchwuseln kann.
Jetzt kommt Schritt zwei, denn ich werde immer und immer wieder angeschrieben, dass ich ?Kleinigkeiten? programmiere, teste oder korrigiere. Es scheint also wirklich ein Bedarf nach so einem Tutorial zu bestehen.

1. Auswahl eines Beispiel-Spiels


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)


2. LogIn-Script


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



Und hier die Ausschnitte aus dem Quellcode, die dafür nötig waren.

LogIn-Button

Zitat

<img class="" name="m_login" src="http://www.holy-war.net/public/img/de/menu/first_startseite/m_login.gif" alt="Login" style="margin: 0px;"/>


Input-Name

Zitat

<input type="text" style="" maxlength="100" value="" size="20" name="username"/>


Input-Passwort

Zitat

<input type="password" style="" maxlength="100" value="" size="20" name="password"/>


Welt-Auswahl

Zitat

<select name="world">
<option value="1DE" selected="selected">Welt 1 (Deutsch) </option>
<option value="2DE">Welt 2 (Deutsch) </option>
<option value="3DE">Welt 3 (Deutsch) </option>
<option value="4DE">Welt 4 (Deutsch) </option>
<option value="5DE">Welt 5 (Deutsch) </option>
<option value="6DE">Welt 6 (Deutsch) </option>
<option value="7DE">Welt 7 (Deutsch) </option>
<option value="8DE">Welt 8 (Deutsch) </option>
<option value="9DE">Welt 9 (Deutsch) </option>
<option value="10DE">Welt 10 (Deutsch) </option>
<option value="11DE">Welt 11 (Deutsch) </option>
<option value="12DE">Welt 12 (Deutsch) </option>
</select>


LogIn-Button

Zitat

<button onmouseover="MM_swapImage('btn_login5439449','','/public/img/de/buttons/btn_login_h.jpg',1)" onmouseout="MM_swapImgRestore()" style="border: 0px none ; background-color: transparent; width: 98px; height: 25px;" value="1" name="einloggen" type="submit">
<img class="submit_image" alt="einloggen" src="http://www.holy-war.net/public/img/de/buttons/btn_login.jpg" name="btn_login5439449"/>
</button>


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!).


2. Erste Funktionalitäten


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:

Zitat

<button id="btn_pluendern42661" onclick=" if (this.getAttribute('alreadyClicked') == 1) { this.disabled = true; } else { this.setAttribute('alreadyClicked', 1); }; " onmouseover="MM_swapImage('btn_pluendern7404848','','/public/img/de/buttons/btn_pluendern_h.jpg',1)" onmouseout="MM_swapImgRestore()" style="border: 0px none ; background-color: transparent; width: 98px; height: 25px;" value="1" name="Kein Alternativtext" type="submit">
<img class="submit_image" alt="Kein Alternativtext" src="http://www.holy-war.net/public/img/de/buttons/btn_pluendern.jpg" name="btn_pluendern7404848"/>
</button>


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.

Javascript würde man so aufrufen:

AutoIt-Quelltext

_FFCmd("content.wrappedJSObject.JAVASCRIPTFUNKTION.OHNE.DAS.SEMIKOLON")


_FFImageclick so:

AutoIt-Quelltext



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

Zitat

/html/body/table/tbody/tr/td[1]/table[@id='content_table']/tbody/tr[2]/td/div/table/tbody/tr/td/form[2]/table/tbody/tr/td[2]/table/tbody/tr[4]/td/button[@id='btn_pluendern42661']

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))


Ich würde versuchen, immer möglichst viel mit _FFXPath zu arbeiten, das geht SEHR schnell und einfach, wenn man XPather nutzt.


4. Auslesen von Daten


Dafür ist wieder _FFXPath am Besten geeignet, darum werde ich auch NUR damit arbeiten!

Lesen wir die Zeit aus, die nach dem Plündern angezeigt wird. Ein Counter von 10 Minuten!

Zitat

/html/body/table/tbody/tr/td[1]/table[@id='content_table']/tbody/tr[2]/td/div/table/tbody/tr
/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/span[@id='counter42661']


-> sagt XPather.

Zitat

//span[@id='counter42661']


-> sage ich!

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']")



Damit landen wir bei folgendem Beispiel-Endergebnis, das aufschlußreich genug sein sollte:

AutoIt-Quelltext




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.

LG Acanis
Kommentare Es sind zur Zeit noch keine Kommentare vorhanden...