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

Pomoc z wyszukaniem obrazku


Rekomendowane odpowiedzi

Opublikowano

Witam,

 

tworzę bota który rozpoznaje obrazki, obrazki na stronie pojawiaja się losowo i do kazdego obrazka jest inna odpowiedź, jest ich 5.

Jak zrobić, żeby na poczatku szuka obrazku nr1 jeśli go znajdzie klika daną do nr1 odpowiedź i idzie dalej wyszukiwanie innych obrazkow pomija, jeśli nie ma obrazka nr1 to szuka kolejnego obrazka jeśli jest daje daną do nr2 odpowiedź itd.


Zrobiłem cos takiego:

    #include <ImageSearch.au3>
    $X = 0
    $Y = 0
    Func Start ()
    $Search = _ImageSearch('testowy.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
         MouseMove($X, $Y, 10)
    EndIf
    EndFunc
    while 1
    Sleep(100)
    WEnd

Ale na tej stronie gdzie jest obrazek go nie wyszukuje.

Opublikowano

Funkcja start nie jest nigdzie wywoływana. Aktualnie program działa tak:

- tworzy zmienne X i Y oraz ustawia je na 0

- nieskończoną ilość razy czeka 100 milisekund

Funkcję musisz w jakimś miejscu wywołać. Czyli:

 

 

#include <ImageSearch.au3>
$X = 0
$Y = 0
Func Start ()
$Search = _ImageSearch('testowy.bmp', 0, $X, $Y, 0)
If $Search = 1 Then
MouseMove($X, $Y, 10)
EndIf
EndFunc
while 1
Sleep(100)

Start()
WEnd

 

 

Opublikowano

Ok, mam ale gdy robię ScreenShot tej stronki wklejam do painta wycinam dany obrazek potem zapisuje jako mape bitową 256kolorów to nadal nie ustawia myszki na środek obrazka.

 

 

Czy jeśli ImageSearch.au3 w includzie jest na czerwono podświetlony jest dobrze?

Opublikowano

W funkcji _ImageSearch jako ostatni argument podałeś 0. Ten argument to dopuszczalna różnica w kolorach między obrazkiem szukanym a tym na ekranie(od 0 do 255). Jako że zapis w .bmp znacznie pogarsza jakość obrazka(mniej dostępnych kolorów), musisz tam dać jakąś wartość. Np. 20. Kod:

 

#include <ImageSearch.au3>
$X = 0
$Y = 0
Func Start ()
$Search = _ImageSearch('testowy.bmp', 0, $X, $Y, 20)
If $Search = 1 Then
MouseMove($X, $Y, 10)
EndIf
EndFunc
while 1
Sleep(100)

Start()
WEnd

 

 

 

A to że na czerwono to nic, po prostu akurat ten edytor daje w takim kolorze nazwy bibliotek.

Opublikowano

Kurde, ustawiałem tą wartośc na 10, 60, 200 i nic dopiero jak dałem 255 to wzięło myszkę do lewego górnego rogu i nie dało się jej ruszyć.

 

Czy to działa do każdego zapisanego Screena, bo ma to służyć do aplikacji na facebooku, i jak się pojawi dany obrazek w tej aplikacji to ma na niego kliknąć.

Opublikowano

Ten obrazek to ma być jednak 24-bitowy, a nie 256-kolorowy. Nie zwróciłem uwagi.

Opublikowano

Dobra wyszukiwanie obrazków już mi działa, a jak zrobić dalej czyli, że w tej aplikacji losowo pojawia się 1 z  5 obrazków, do każdego obrazka są inne odpowiedzi, i bot ma szukać który obrazek się pojawił i zaznaczyć do niego prawidłową odpowiedź.

Domyślam się, że trzeba to zrobić na If tylko dalej za bardzo nie wiem, If w Ifie?

Opublikowano

Użyj ElseIf.

If (znaleziono pierwszy obrazek) Then
(kliknięcie w pierwszą odpowiedź)
ElseIf (znaleziono drugi obrazek) Then
(kliknięcie w drugą odpowiedź)
ElseIf (znaleziono trzeci obrazek) Then
(kliknięcie w trzecią odpowiedź)

(... reszta)

EndIf

Oczywiście zamiast nawiasów daj odpowiednie funkcje.

Opublikowano

Ok, wyszukuje jeden z 5 obrazków, ale mam problem w podanym w tym poście kodzie, komendy po  ElseIf  czyli wyszukaniu danego obrazka cały czas się zapętlają. Tzn. wyszukuje obrazek, zaznacza odpowiedz potem wychodzi ze strony... i potem od nowa mimo ze strona jest juz wylaczona od nowa robi wyjscie ze strony itd.

#include <ImageSearch.au3>
$X = 0
$Y = 0

Func Start ()
$Search = _ImageSearch('pytanie pierwsze.bmp', 1, $X, $Y, 0)
$Search2 = _ImageSearch('pytanie drugie.bmp', 1, $X, $Y, 0)
$Search3 = _ImageSearch('pytanie trzecie.bmp', 1, $X, $Y, 0)
$Search4 = _ImageSearch('pytanie czwarte.bmp', 1, $X, $Y, 0)
$Search5 = _ImageSearch('testowy.bmp', 1, $X, $Y, 0)



If $Search = 1 Then
   MouseClick("left", $X, $Y)
ElseIf $Search2 = 1 Then
   MouseClick("left", $X, $Y)
ElseIf $Search3 = 1 Then
   MouseClick("left", $X, $Y)
ElseIf $Search4 = 1 Then
   MouseClick("left", $X, $Y)
ElseIf $Search5 = 1 Then
   MouseClick("left", 410,392)

EndIf

sleep(3000)
MouseMove( 300 , 500)
Mousedown("left")
MouseMove( 710 , 505)
mouseup("left")
Sleep(3000)
MouseClick("right", 440, 507)
Sleep(1000)
MouseClick("left", 500,523)
Sleep(1000)
MouseClick("left", 330,1006)
Sleep(1400)
MouseClick("right", 500,800)
Sleep(1000)
MouseClick("left", 555,608)
Sleep(1000)
MouseClick("left", 700,0)
Sleep(1000)
Sleep(2000)
MouseClick("left", 1100,142)
Sleep(2000)
MouseClick("left", 1000,316)
sleep(5000)

EndFunc
while 1
Start()
WEnd

Opublikowano

Program działa tak:

 

785971415288098699239.png

 

  • Ustawia $X i $Y na 0
  • Wykonuje całą funkcję Start
  • Wykonuje całą funkcję Start
  • Wykonuje całą funkcję Start
  • Wykonuje całą funkcję Start
  • Wykonuje całą funkcję Start

I tak w nieskończoność. Czemu?

While 1. Jeśli wartość po while jest prawdziwa(czyt. inna od zera), to wykonuje zawartość pętli. Jeśli jest nieprawdziwa(czyt. 0) to nie wykonuje i przechodzi do tego co jest dalej.

Ty ustaliłeś na stałe 1, czyli warunek jest zawsze prawdziwy - program nigdy nie zakończy pętli.

 

PS: Poczytaj sobie o tablicach. Bardzo ułatwi ci to życie. http://www.mpcforum.pl/topic/811418-tut-autoit-tutorial-by-phoenix-pl/#entry7257375

Opublikowano

Super poradziłem sobie i wszystko działa, ostatnia rzecz którą potrzebuje to, żeby skrypt powtarzał to:

 

sleep(2000)
MouseClick("left",750 , 166)
Send("[email protected]  ")
Sleep(2000)
MouseClick("left", 900 , 166)
Send("haslo")
Sleep(2000)
MouseClick("left", 1100 , 166)
Sleep(7000)
Sleep(1000)
MouseClick("left", 300,74)
Sleep(1000)
Send("dsdsd")
Sleep(2000)
MouseClick("left",714,0)
MouseClick("left",745,72)
Sleep(9000)
Sleep(1000)
MouseClick("left", 1270,930)
Sleep(1000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)


#include <ImageSearch.au3>
$X = 0
$Y = 0

Func Start ()
$Search = _ImageSearch('pytanie futbol.bmp', 1, $X, $Y, 0)
$Search2 = _ImageSearch('michael knight.bmp', 1, $X, $Y, 0)
$Search3 = _ImageSearch('pytanie rojo.bmp', 1, $X, $Y, 0)
$Search4 = _ImageSearch('pytanie ciempies.bmp', 1, $X, $Y, 0)
$Search5 = _ImageSearch('pytanie prezydent.bmp', 1, $X, $Y, 0)
$Search6 = _ImageSearch('testowy.bmp', 1, $X, $Y, 0)


If $Search = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search2 = 1 Then
   MouseClick("left", 511,354)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search3 = 1 Then
   MouseClick("left", 510,292)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search4 = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search5 = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search6 = 1 Then
   MouseMove(100,500)
EndIf
EndFunc
while 0

Start()
WEnd
sleep(3000)
MouseMove( 300 , 500)
Mousedown("left")
MouseMove( 710 , 505)
mouseup("left")
Sleep(3000)
MouseClick("right", 440, 507)
Sleep(1000)
MouseClick("left", 500,523)
Sleep(1000)
MouseClick("left", 330,1006)
Sleep(1400)
MouseClick("right", 500,800)
Sleep(1000)
MouseClick("left", 555,608)
Sleep(1000)
MouseClick("left", 700,0)
Sleep(1000)
Sleep(2000)
MouseClick("left", 1100,142)
Sleep(2000)
MouseClick("left", 1000,316)
sleep(5000)

 

 

tylko zmieniał wartość zaznaczoną na czerwono, na inny mail.

 

Próbowałem to zrobić tak, że kopiowałem całość wklejałem niżej i poprostu zmieniałem maile, ale wywala błąd:

"Line 139:(ścieżka pliku)   

Func Start()

Error: Duplicate function name."

Opublikowano

 

Line 139:(ścieżka pliku)   

Func Start()

Error: Duplicate function name.

Czytaj chociaż treść tych błędów. Skopiowałeś też funkcję Start, w związku z tym w programie jest kilka identycznych funkcji Start(a to błąd, nie może być wielu funkcji o tej samej nazwie).

 

Ok, kolejny błąd:

while 0
Start()
WEnd

Jak zadziała ten kod? Najpierw sprawdzi warunek pętli. Ponieważ wynosi on 0(czyt. jest fałszywy) pętla nie zostanie wykonana(funkcja Start nie zostanie wykonana) i program przejdzie dalej.

 

Kolejne błędy:

Sleep(7000)
Sleep(1000)

Program czeka 7 sekund i czeka 1 sekundę. Po co? Przecież to to samo co Sleep(8000). Takich pomyłek jest kilka.

 

Nie za bardzo rozumiem co chcesz osiągnąć tą pętlą:

while 0
Start()
WEnd

Mógłbyś najpierw wytłumaczyć? Ty chcesz powtórzyć tą funkcję Start kilka razy czy co?

 

@szczepan997

Opublikowano

Dobra ponumerowałem te "start()" czyli start1(), start2() itd.

 

już nie wywala tego błędu.

 

ta pętla while to poprostu wziąłem z któregoś tutorialu, myślałem, że to musi być a 0 dałem bo na 1 nie chciało działać. Czy to while można całe usunąć?

 

Sleep(7000)

Sleep(1000)

 

robiłem poszczególne fazy bota w oddzielnych plikach i potem po łączeniu zapomniałem, żeby to zamienić na sleep(8000).

 

 

Chcę, żeby cały ten kod się w kółko powtarzał tylko, że to co zaznaczyłem na czerwono żeby się zmieniało za każdym razem na inny ustalony email.

Opublikowano

Po pierwsze, przeczytaj poradnik. A najlepiej kilka. I postaraj się zrozumieć, co do czego służy, a nie po prostu kopiuj kod bez myślenia.

Po drugie While to pętla, służy do tego aby powtórzyć jakiś fragment kodu. Jak nie chcesz go powtórzyć, to jest ci niepotrzebna.

Po trzecie nie potrzebujesz kilku funkcji Start, skoro ich zawartość będzie identyczna. Usuń te funkcje Start2, Start3... i po prostu używaj tylko jednej Start. Funkcja jest stworzona po to, abyś miał kawałek kodu który możesz zawsze łatwo wywołać.

Po czwarte poczytaj o pętli For. Poczytaj także o tablicach. I postaraj się zrozumieć jak to działa, a nie zwykłe Ctrl C Ctrl V kodu.

 

Co do pętli For, tablic i ich użycia:

#include <ImageSearch.au3>
$iloscmaili = 4 ;Tutaj daj ilość maili
Local $emaile[$iloscmaili] = ["TUTAJ EMAIL", "TUTAJ KOLEJNY", "KOLEJNY", "ITD."] ;Tutaj same maile(wewnątrz cudzysłowiów), możesz wpisać więcej, oddziela się je przecinkami

For $i = 0 To ($iloscmaili - 1) Step 1
; Tutaj kod przed tą twoją czerwoną linijką 
Send($emaile[$i])
; Tutaj kod po czerwonej linijce
; Tylko BEZ TEJ FUNKCJI START
; Mam na myśli to od Func Start() do EndFunc, wywołanie musi zostać
; I BEZ include ImageSearch.au3
Next

Func Start()
; kod funkcji Start
EndFunc

Działa to tak:

 

Na początku tworzysz zmienną $iloscmaili, która będzie przechowywać ilość maili.

Potem tworzysz tablicę zmiennych $emaile, która będzie miała tyle miejsc ile podałeś w $iloscmaili. Następnie wszystkie jej pola są zapełniane przez podane przez ciebie maile.

Teraz linijka z pętlą For. Tworzysz zmienną $i, która będzie liczyła na którym emailu skończyliśmy. Następnie w tym "To" dajesz informację że pętla będzie wykonywana dopóki $i nie będzie równe $iloscmaili - 1. W "Step" dajesz informacje że $i po każdym wykonaniu petli będzie się zwiększać o 1.

I teraz linijka Send. Wysyła ona jeden z emailów, który podałeś na początku. Za pierwszym wykonaniem $i będzie wynosić 0, a więc weźmie pierwszy email, za drugim $i będzie wynosić 1 i weźmie drugi, za trzecim $i będzie wynosić 2 i weźmie trzeci itd..

Kiedy $i osiągnie tyle, ile wynosi $iloscmaili odjąć 1(bo przecież zaczynamy od zera, a nie od 1) pętla zakończy się i program zakończy działanie

 

Ale i tak dokładnie przeczytaj kilka poradników, np. ten i ten.

Opublikowano

Działa, tylko jakby omijało te polecenia po EndFunc.

#include <ImageSearch.au3>

$iloscmaili = 22

Local $emaile[$iloscmaili] =[ "maile", "maile2"......]

For $i = 0 To ($iloscmaili - 1) Step 1

   sleep(2000)
   MouseClick("left",750 , 166)
   Send($emaile[$i])


Sleep(2000)
MouseClick("left", 900 , 166)
Send("kamilo")
Sleep(2000)
MouseClick("left", 1100 , 166)
Sleep(8000)
MouseClick("left", 300,74)
Sleep(1000)
Send("sdsasd")
Sleep(2000)
MouseClick("left",714,0)
MouseClick("left",745,72)
Sleep(10000)
MouseClick("left", 1270,930)
Sleep(1000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)
MouseClick("left", 570,613)
Sleep(15000)

Next

Func Start ()
$Search = _ImageSearch('pytanie futbol.bmp', 1, $X, $Y, 0)
$Search2 = _ImageSearch('michael knight.bmp', 1, $X, $Y, 0)
$Search3 = _ImageSearch('pytanie rojo.bmp', 1, $X, $Y, 0)
$Search4 = _ImageSearch('pytanie ciempies.bmp', 1, $X, $Y, 0)
$Search5 = _ImageSearch('pytanie prezydent.bmp', 1, $X, $Y, 0)
$Search6 = _ImageSearch('testowy.bmp', 1, $X, $Y, 0)


If $Search = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search2 = 1 Then
   MouseClick("left", 511,354)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search3 = 1 Then
   MouseClick("left", 510,292)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search4 = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search5 = 1 Then
   MouseClick("left", 510,365)
   Sleep(2000)
   MouseClick("left", 555,522)
ElseIf $Search6 = 1 Then
   MouseMove(100,500)
EndIf
EndFunc


sleep(3000)
MouseMove( 300 , 500)
Mousedown("left")
MouseMove( 710 , 505)
mouseup("left")
Sleep(3000)
MouseClick("right", 440, 507)
Sleep(1000)
MouseClick("left", 500,523)
Sleep(1000)
MouseClick("left", 330,1006)
Sleep(1400)
MouseClick("right", 500,800)
Sleep(1000)
MouseClick("left", 555,608)
Sleep(1000)
MouseClick("left", 700,0)
Sleep(3000)
MouseClick("left", 1100,142)
Sleep(2000)
MouseClick("left", 1000,316)
sleep(5000)
Opublikowano

Jak chcesz żeby je pomijało to je usuń i tyle.

No i nigdzie nie wywołałeś funkcji Start. Aby ona została wykonana to musisz dopisać taką linijkę

Start()

w miejscu w którym chcesz, aby została wykonana.

  • 2 tygodnie później...
Opublikowano

Mam teraz problem, na fb coś chyba zmienili bo za chiny nie chce wyszukać przycisku wyloguj, wcześniej działało normalnie najeżdzało na niego i klikało teraz nie chce. Robiłem nowe SS i zapisywalem w 24 bitach i nic. Czy można jakoś wprowadzić id tego przycisku do mojego kodu?

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...