Skocz do zawartości
  • 0

IE.au3 czytanie wartości z kodu


Barmox
 Udostępnij

Pytanie

Piszę bota do gry przeglądarkowej. Bot mniej więcej miał wyglądać tak:

 

while 1
_IEAction($npc, "click")  ;Bot klika w potwora
sleep(300)
_IEAction($autobattle, "click") ;Bot klika w przycisk automatycznej walki
sleep(300)
_IEAction($battleclose, "click") ;bot zamyka okno walki
wend

 

Problem jest taki, że gra posiada zabezpieczenie, i jeżeli bot będzie na siłę próbował kliknąć w potwora którego id się zmieniło wtedy grę wywala.

Chciałbym zrobić If'a który jeżeli by zaobserwował, że id potwora zmieniło się to by przestawał atakować.

Jednak problem jest w tym, że nie mam totalnie pojęcia jak z pomocą IE.au3 sczytać te informacje.

Próbowałem jakieś _IEreadhtml (czy jakoś tak) i _stringbetween jednak to mi nie działało.

Help me plox

 

Edytowane przez Barmox
Źle sformułowane pytanie
Odnośnik do komentarza
Udostępnij na innych stronach

10 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
5 minut temu, Pawellek napisał:

Nazwa gry? Albo chociaż kod html z tym id potwora? A jak nie chcesz nikogo wtajemniczać to tu masz cała skarbince wiedzy która jest potrzebna: https://www.w3schools.com/jsref/dom_obj_all.asp

Margonem

 

<div class="npc" id="npc53876" style='left: 1280px; top: 1968px; width: 32px; height: 48px; z-index: 134; background-image: url("http://gefion.margonem.pl/obrazki/npc/woj/npc179-b.gif");' tip="<b>Stary rozbójnik</b><span >33 lvl</span>" ctip="t_npc"></div>

 

Jak npc zginie w tedy kod zmienia się na taki 

<div class="troop" id="troop-53876" style='background-position: 0px 0px; left: 224px; top: 288px; width: 32px; height: 32px; z-index: 8; background-image: url("http://gefion.margonem.pl/img/rip2.gif");' tip="<b>Stary rozbójnik</b>Lvl: 33w<br><br><i>Życie: 0%</i>" ctip="t_troop2"></div>

 

Edytowane przez Barmox
Dodanie kodu po śmierci
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
36 minut temu, Pawellek napisał:

Proponuje po prostu policzyc np divy z klasa troop albo npc przed tym jak zaczniesz atakowac i po kazdym ataku sprawdzac czy cos sie zmienilo. 

Nie rozumiem

Chodzi mi jak zrobić, żeby przeczytać te wartości.

Zrobił bym if id zmienia się na troop-53876 w tedy przestaje atakować i czeka dopóki id nie zmieni się na npc53876

 

Przepraszam ale dopiero dzisiaj bawię się z ie.au3 i nie ogarniam jeszcze co i jak

Edytowane przez Barmox
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Masz całkiem inne klasy diva po zabiciu prezciwnika. I to raczej Ci wystarczy żeby stwierdzić czy ubiłeś jednostke, czy nie.

Tak to musisz iterować się po dwóch klasach i szukać zmian, więc wychodzi na to samo. Ale jak chcesz. ;)

Local $oBattle = _IEGetObjById($oIE, "battle")	; <div id="battle" ..>

Local $oTroops = $oBattle.getElementsByClassName("troop") ; <div id="troop" ..>
Local $oNpc = $oBattle.getElementsByClassName("npc") ; <div id="npc" ..>

If $oTroops.length >= 1 Then
	For $oTroop in $oTroops
		ConsoleWrite("ID: " & $oTroop.id & @CRLF)
		ConsoleWrite("tip: " & $oTroop.getAttribute("tip") & @CRLF)
	Next
EndIf

 

Output:

ID: troop803376
tip: <b>Rimorus</b>Lvl: 3m<br><br><i>¯ycie: 100%<br>Energia: 50<br>Mana: 0</i>
ID: troop-144177
tip: <b>Œwierszcz</b>Lvl: 1w<br><br><i>¯ycie: 0%</i>

 

Z tego już chyba sam coś ulepisz. :)

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 godziny temu, Pawellek napisał:

Masz całkiem inne klasy diva po zabiciu prezciwnika. I to raczej Ci wystarczy żeby stwierdzić czy ubiłeś jednostke, czy nie.

Tak to musisz iterować się po dwóch klasach i szukać zmian, więc wychodzi na to samo. Ale jak chcesz. ;)

Local $oBattle = _IEGetObjById($oIE, "battle")	; <div id="battle" ..>

Local $oTroops = $oBattle.getElementsByClassName("troop") ; <div id="troop" ..>
Local $oNpc = $oBattle.getElementsByClassName("npc") ; <div id="npc" ..>

If $oTroops.length >= 1 Then
	For $oTroop in $oTroops
		ConsoleWrite("ID: " & $oTroop.id & @CRLF)
		ConsoleWrite("tip: " & $oTroop.getAttribute("tip") & @CRLF)
	Next
EndIf

 

Output:

ID: troop803376
tip: <b>Rimorus</b>Lvl: 3m<br><br><i>¯ycie: 100%<br>Energia: 50<br>Mana: 0</i>
ID: troop-144177
tip: <b>Œwierszcz</b>Lvl: 1w<br><br><i>¯ycie: 0%</i>

 

Z tego już chyba sam coś ulepisz. :)

Przepraszam czy mógłbyś pokrótce wyjaśnić ten kod bo średnio go rozumiem.

Albo chociaż podać jakąś stronę z której mógłbym się dowiedzieć co to.

Szukałem na mpc forum jakiegoś tuta odnośnie IE.au3 jednak są tylko 2 tutoriale które wyjaśniają podstawy typu otwórz Ie kliknij w obiekt itp.

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Poczytaj sobie o DOM -> https://en.wikipedia.org/wiki/Document_Object_Model

 

 

Czego nie rozumiesz? Tak ogolnie to kod nie robi w zasadzie nic, tylko wypisuje do konsoli to, co jest w battle.

Tak ogolnie to:

0.

W tym kodzie który wkleiłem brakuje 

Local $oIE = _IECreate("jakas_strona_www")

1. 

_IEGetObjById($oIE, "battle") 

Z dokumentacji - Returns an object variable by id. - Szuka na stronie (w dokumencie) elementu o id "battle" (Patrz Obrazek poglądowy)

2.

 Local $oTroops = $oBattle.getElementsByClassName("troop") 

Z dokumentacji - Returns a collection of all child elements with the specified class name - Czyli,  w tym wypadku zwraca wszystkie dzieci objektu $oBattle z klasa "troop" do $oTroops (coś w rodzaju tablicy -> HTMLCollection). 

3. 

	For $oTroop in $oTroops
		ConsoleWrite("ID: " & $oTroop.id & @CRLF)
		ConsoleWrite("tip: " & $oTroop.getAttribute("tip") & @CRLF)
	Next

Tutaj tylko wypisujemy sobie do konsoli to co jest w $oTroops.

 

 

Obrazek poglądowy:

bzhqDOm.png

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Próbowałem coś zrobić na własną rękę ale dalej coś nie działa. 

Chodzi mi żeby czytał czy mob żyje jak nie jest w walce więc zrobiłem coś takiego

 

Local $oBattle = _IEGetObjById($oIE, "base")    ; <div id="battle" ..> ;  npc znajduje się w zakładce base 
Local $oTroops = $oBattle.getElementsByClassName("troop") ; 

while 1
   If $oTroops.length >= 1 Then
    MsgBox(1,"His ded", "On nie żyje")

 Else
    MsgBox(1,"His alive", "On żyje")
EndIf
WEnd

 

Cały czas nawet jak zabije moba wyskakuje mi, że żyje.

What im doing wrong?

 

 

Edytowane przez Barmox
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Nie czytasz tych danych w pętli.  Musisz na bieżąco aktualizować to, co jest w $oTroops.

 

Local $oBattle = _IEGetObjById($oIE, "base")    ; <div id="battle" ..> ;  npc znajduje się w zakładce base 
Local $oTroops = $oBattle.getElementsByClassName("troop") ; 

while 1
  If $oTroops.length >= 1 Then
      MsgBox(1,"His ded", "On nie żyje")
  Else
      MsgBox(1,"His alive", "On żyje")
  EndIf
  $oBattle = _IEGetObjById($oIE, "base")
  $oTroops = $oBattle.getElementsByClassName("troop") ; 
WEnd

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum IE.au3 czytanie wartości z kodu   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...