Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] IE.au3 - pisanie botów do gier przeglądarkowych, krótki tut :)


Rekomendowane odpowiedzi

Opublikowano

Chciałbym przedstawić tutorial dotyczący obsługi IE.au3 mojej produkcji.

 

Co będzie nam potrzebne:

- AutoIT, najlepiej najnowsza wersja

- SciTE, albo dowolny edytor tekstu

- Podstawowe umiejętności w AutoIT (pętle, instrukcje warunkowe, GUI (przyda się też OnEventMode), i w niektórych przypadkach obsługa obiektów COM).

- przydałyby się podstawy HTML

 

No, to zaczynamy

 

Najpierw zapoznamy się z podstawową funkcją _IECreate, która tworzy okienko Internet Explorera

 

$oIE = _IECreate ($URL, $TryAttach, $Visible, $TakeFocus)
Gdzie:
$oIE - uchwyt do naszego okna IE
$URL - URL do którego ma przejść Internet Explorer po starcie; domyślnie about:blank (pusta strona)
$TryAttach - spróbuj przyczepić to okno do innego okna IE, 1 - przyczepiaj, 0 - nie przyczepiaj; domyślnie 0
$Visible - Widzialność okna IE, 1 - widzialne, 0 - niewidzialne; domyślnie 1
$TakeFocus - Niestety, nie wiem co to  Jakby ktoś był miły, to niech wyjaśni w komentarzach.

 

Tak, więc, zróbmy sobie przykładowe GUI, które uruchomi nam IE po kliknięciu przycisku.

 

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
Opt ("GuiOnEventMode", 1)

$formatka = GUICreate("IE TuT", 169, 43, 192, 124)
$start = GUICtrlCreateButton("Start", 8, 8, 75, 25)
$exitprog = GUICtrlCreateButton("Wyjdź", 88, 8, 75, 25)
GUISetOnEvent ($GUI_EVENT_CLOSE, "end")
GUICtrlSetOnEvent ($exitprog, "end")
GUICtrlSetOnEvent ($start, "main")
GUISetState(@SW_SHOW)

Func main()

EndFunc

Func end()
 Exit
EndFunc

While 1
Sleep (100)
WEnd

 

To jest GUI zawierające 2 przyciski - Start i Wyjdź. A dla niewtajemniczonych - po co jest to "Opt ("GuiOnEventMode", 1)"? To jest specjalna opcja, która aktywuje tryb OnEvent w GUI, który pozwala na przypisywanie do kontrolek GUI różnych funkcji poprzez funkcję GUISetOnEvent i GUICtrlSetOnEvent.

 

No dobrze, mamy już GUI, z funkcją zamykającą program, oraz pustą, w której będą instrukcje dotyczące naszego IE.

Teraz, uruchommy IE i każmy mu wejść w Google. Dodajmy do funkcji main() odpowiednie instrukcje.

$internet = _IECreate ("google.pl")

No dobrze, a teraz odpalmy program, i sprawdźmy czy działa. Nie zapomnijmy, że w programie musi być na początku #include <IE.au3>!

 

Działa? No to w takim razie, przejdźmy do czegoś bardziej zaawansowanego - a dokładniej klikanie w klawisze i wpisywanie tekstu :)

 

Do tych akcji służy funkcja _IEAction.

 

_IEAction ($Objekt, $Akcja) gdzie:
$Objekt - Uchwyt do obiektu na stronie
$Akcja - Akcja która ma być wykonana (więcej w helpie AutoIT)

 

Jak widzimy, do tej akcji potrzeba nam uchwyt obiektu. Można go uzyskać funkcją _IEGetObjByName lub _IEGetObjById. My będziemy używać tej pierwszej.

 

$oObiekt = _IEGetObjByName ($oIE, $Name) gdzie
$oObject - Uchwyt do obiektu na stronie
$oIE - Uchwyt do IE stworzony funkcją _IECreate
$Name - Nazwa kontrolki

 

Ale nawet i tutaj, potrzebujemy nazwę kontrolki. Ją musimy sprawdzić na stronie. W naszym przypadku - Google.pl

Wchodzimy więc na nią, i otwieramy źródło strony (Ctrl+U), i szukamy (Ctrl+F) powiedzmy... napisu na przycisku. U nas - Szukaj w Google. Napis na przycisku powinien być między znacznikami HTML, czyli między znakami > i <. Gdzieś w pierwszym znaczniku, powinno być coś takiego jak name=. Po znaku = powinna być właśnie nazwa kontrolki. Wystarczy że wpiszemy ją do funkcji, i mamy z głowy. Tak więc - dodajmy instrukcję która kliknie w przycisk Szukaj w Google

 

$oKlik = _IEGetObjByName ($internet, "btnK")
_IEAction ($oKlik, "click")

 

Okej, ale to klika tylko w przycisk. Zróbmy teraz programik, który będzie wpisany przez nas tekst wyszukiwał w Google. Najpierw przeróbmy odpowiednio GUI:

 

#include <ButtonConstants.au3> ;przyciski
#include <EditConstants.au3> ;inputy
#include <GUIConstantsEx.au3> ;gui
#include <WindowsConstants.au3> ;okienko
#include <IE.au3> ;internet explorer
Opt ("GuiOnEventMode", 1) ;ustawienie GUI w trybie OnEvent
$forma = GUICreate("IE Test", 178, 73, 192, 124) ;stworzenie GUI
$input = GUICtrlCreateInput("", 8, 8, 161, 21) ;input, do którego wpisujemy zapytanie dla Google
$sgoogle = GUICtrlCreateButton("Szukaj", 8, 40, 75, 25) ;przycisk szukania
$bexit = GUICtrlCreateButton("Wyjdź", 96, 40, 75, 25) ;przycisk wyjscia
GUISetOnEvent ($GUI_EVENT_CLOSE, "endp") ;przypisanie do przycisku 'x' na belce tytułowej okna funkcji "endp"
GUICtrlSetOnEvent ($bexit, "endp") ;przypisanie do przycisku wyjscia funkcji "endp"
GUICtrlSetOnEvent ($sgoogle, "main") ;przypisanie do przycisku szukania funkcji "main"
GUISetState(@SW_SHOW) ;pokazanie GUI

Func main() ;funkcja "main"

EndFunc ;znacznik zamykajacy funkcje "main"

Func endp() ;funkja "endp"
Exit ;wylaczenie programu
EndFunc ;znacznik zamykajacy funkcje "endp"

While 1 ;nieskonczona petla
Sleep(100) ;czekaj 100ms na polecenie od GUI
WEnd ;znacznik zamykajacy petle

 

No dobrze, zacznijmy od pobrania zawartości inputa do zmiennej, i sprawdzeniu czy zmienna nie jest pusta. Do funkcji main() dodajemy instrukcje:

 

$in = GUICtrlRead ($input) ;odczytanie tekstu z inputa
If $in = "" Then ;instrukcja warunkowa - jesli ten tekst jest pusty, to...
MsgBox (16, "", "Wpisz co mam szukać!") ;...wyswietl okienko z informacja...
Exit ;...i zamknij program
EndIf ;koniec instrukcji warunkowej

 

Dobrze, a teraz uruchomienie IE z przejściem na google.pl

 

$ie = _IECreate("google.pl", 0, 1) ;stworzenie okienka Internet Explorera z uchwytem $ie

 

Następnie - tworzenie uchwytów do przycisku "Szukaj w Google" i pola w które wpisujemy zapytanie.

 

$oButton = _IEGetObjByName ($ie, "btnK") ;przypisanie zmiennej $oButton do obiektu o nazwie "btnK" w okienku $ie
$oInput = _IEGetObjByName ($ie, "q") ;przypisanie zmiennej $oImput do obiektu o nazwie "q" w okienku $ie

 

Teraz - akcje

 

_IEAction ($oInput, "paste") ;wpisanie zawartosci schowka do obiektu $oInput
_IEAction ($oButton, "click") ;polecenie klikniecia obiektu $oButton

 

No, spróbujmy teraz skompilować. Niby chodzi, ale nie wpisuje tego co wpisaliśmy do inputa do pola szukania. Dlatego, że akcja "paste" wpisuje do pola zawartość schowka. Musimy więc zrobić żeby zawartość pola była kopiowana do schowka.

 

$clip = ClipGet() ;zapisanie aktualnej zawartosci schowka do zmiennej
ClipPut ($in) ;'włozenie' tekstu z inputa do schowka

 

A na sam koniec funkcji dopisujemy

 

ClipPut ($clip) ;'wlozenie' zawartoscie zmiennej $clip do schowka

 

A tutaj macie cały kod, nieco powiększony przeze mnie:

 

; wymagane include-y
#include <ButtonConstants.au3> ;przyciski
#include <EditConstants.au3> ;inputy
#include <GUIConstantsEx.au3> ;gui
#include <WindowsConstants.au3> ;okienko
#include <IE.au3> ;internet explorer
Opt ("GuiOnEventMode", 1) ;ustawienie GUI w trybie OnEvent
$forma = GUICreate("IE Test", 178, 73, 192, 124) ;stworzenie GUI
$input = GUICtrlCreateInput("", 8, 8, 161, 21) ;input, do którego wpisujemy zapytanie dla Google
$sgoogle = GUICtrlCreateButton("Szukaj", 8, 40, 75, 25) ;przycisk szukania
$bexit = GUICtrlCreateButton("Wyjdź", 96, 40, 75, 25) ;przycisk wyjscia
GUISetOnEvent ($GUI_EVENT_CLOSE, "endp") ;przypisanie do przycisku 'x' na belce tytułowej okna funkcji "endp"
GUICtrlSetOnEvent ($bexit, "endp") ;przypisanie do przycisku wyjscia funkcji "endp"
GUICtrlSetOnEvent ($sgoogle, "main") ;przypisanie do przycisku szukania funkcji "main"
GUISetState(@SW_SHOW) ;pokazanie gui

Func main() ;funkcja "main"
$in = GUICtrlRead ($input) ;odczytanie tekstu z inputa
If $in = "" Then ;instrukcja warunkowa - jesli ten tekst jest pusty, to...
MsgBox (16, "", "Wpisz co mam szukać!") ;...wyswietl okienko z informacja...
Exit ;...i zamknij program
EndIf ;koniec instrukcji warunkowej
$clip = ClipGet() ;zapisanie aktualnej zawartosci schowka do zmiennej
ClipPut ($in) ;'włozenie' tekstu z inputa do schowka
$ie = _IECreate("google.pl", 0, 1) ;stworzenie okienka Internet Explorera z uchwytem $ie
$oButton = _IEGetObjByName ($ie, "btnK") ;przypisanie zmiennej $oButton do obiektu o nazwie "btnK" w okienku $ie
$oInput = _IEGetObjByName ($ie, "q") ;przypisanie zmiennej $oImput do obiektu o nazwie "q" w okienku $ie
_IEAction ($oInput, "paste") ;wpisanie zawartosci schowka do obiektu $oInput
_IEAction ($oButton, "click") ;polecenie klikniecia obiektu $oButton
ClipPut ($clip) ;'wlozenie' zawartoscie zmiennej $clip do schowka
_IELoadWait ($ie) ;czekamy az strona się załaduje
$msg = MsgBox (32+4, "", "Wyłączyć?") ;msgbox z pytaniem, i przyciskami "Tak" i "Nie" i uchwytem $msg
If $msg = 6 Then ;instrukcja warunkowa - jesli w msgboxie kliknieto "Tak", to...
_IEQuit($ie) ;...zamknij okienko Internet Explorera i...
Exit ;...wyjdz z programu
EndIf ;koniec instrukcji warunkowej
EndFunc ;znacznik zamykajacy funkcje "main"

Func endp() ;funkja "endp"
Exit ;wylaczenie programu
EndFunc ;znacznik zamykajacy funkcje "endp"

While 1 ;nieskonczona petla
Sleep(100) ;czekaj 100ms na polecenie od GUI
WEnd ;znacznik zamykajacy petle

 

Tak więc, możemy przetestować nasz programik :)

A jak nam się to przyda w pisaniu botów? Cóż, w tym chodzi głównie o to że zazwyczaj chodzi o klikanie w przyciski, wpisywanie danych w pola, itp :).

 

W następnych częściach - klikanie w tekst i obrazki

846331404756772371599.jpeg
Opublikowano

_IEAction ($oInput, "paste") ;wpisanie zawartosci schowka do obiektu $oInput
_IEAction ($oButton, "click") ;polecenie klikniecia obiektu $oButton
ClipPut ($clip) ;'wlozenie' zawartoscie zmiennej $clip do schowka
Sleep (5000) ;krotka przerwa na zaladowanie strony

 

DAFUQ?

 

Nie pisz tutów na temat rzeczy, których nie ogarniasz. Szczególnie powinieneś poczytać więcej na temat włożeń zawartościowych.

Ta sygnatura jest pusta.

Opublikowano

Sleep (5000) ;krotka przerwa na zaladowanie strony

 

A nie lepiej zamiast tego sleepa dać _IELoadWait? Bo jednym się strona po 1 sekundzie załaduje, a innym po 10+

9obpmnjr.png

Opublikowano

zamiast wklejania z pola (paste) mogłeś użyć "control send" lub "IEFormElementSetValue" bo tak to pyta się czy zezwolić dostęp do schowka.

  • 3 tygodnie później...
Opublikowano

no, masz +-a

ale dajmy na to chcę zrobić bota do traviana. i funkcje żeby wybudował budynek o danyck koordynatach. wszystki pola maja identyczny source ale inne koordynaty, i tu sie pojawia pytanie jak ustawić z funkcją _IEAction żeby do odpowiedniego wchodził i budował ? :rolleyes:

więc to nie do końca takie dobre.

ale plusik, czekam na kolejną część :P

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...