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

Bot to traviana [C#] webbrowser


Rekomendowane odpowiedzi

Opublikowano

Próbuję napisać bota opartego o klasę webbrowser.

Niestety przy przechodzeniu między stronami (metoda navigate) program nie czeka na załadowanie strony. 

 

Próbowałem już:

wb.Navigate(url);
while(wb.ReadyState != WebBrowserReadyState.Complete)
{
     Application.DoEvents();
}

i

wbrowser.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);

Niestety żadne z tych rozwiązań nie działa poprawnie.

Użycie pauzy również nie rozwiązuje problemu (dla jednej wioski potrzebuję wczytać około 40 podstron)

Czy ktoś zna skuteczne rozwiązanie? 

Opublikowano

Poszukałem w necie i użyłeś już odpowiedzi z google :D też miałem z tym problem i nie mogłem znaleźć rozwiązania, więc przerzuciłem się na HttpWebRequest, dużo szybsze i jeśli się dobrze zbuduję z tym klasę to dużo wygodniejsze w użyciu ;)

Opublikowano

Dlatego je podałem, aby pierwszą odpowiedzią nie było "znajdź na google".

 

Jeżeli chodzi o HttpWebRequest to mniej więcej wiem jak odczytać dane (do postaci jakiej potrzebuję) ale już nie wiem jak wywołać zdarzenie typu kliknięcie na przycisk czy utworzenie sesji (bez tego nie dostanę się na konto).

Opublikowano

Przy logowaniu wysyłasz requesty potrzebne do logowania, przy httpwebrequest metoda musi być POST i aby dalej poruszać się po stronie jako zalogowany wszystko podpinasz pod jeden kontener ciasteczek. Poszukaj tutoriali, na tym forum to było fajnie wytłumaczone, ale akurat tego tutka nie mogę teraz znaleźć, chyba go nie ma... Ale z httpwebrequest robisz co chcesz i jak chcesz, więc teraz wysyłam Cię do googli bo nie mogę znaleźć fajnego tutoriala, najlepsze będą jakieś przykłady z logowaniem, tam wszystko jest na tacy :D

Lub masz to, ja sobie tego używam:

GET:

public static string get(string stronka)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(stronka); //tworzymy zapytanie
            request.CookieContainer = ciacha; //używając ciastek po zalogowaniu
            HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //ciągniemy źródło jak wyżej
            StreamReader reader = new StreamReader(response.GetResponseStream()); //j.w.
            string kod = reader.ReadToEnd(); //a tutaj mamy kod strony po zalogowaniu
            response.Close(); //zamykamy
            reader.Close(); //zamykamy
            return kod;
        }

POST:

public static string post(string stronka, string coWyslac)
        {
            String postData = string.Format(coWyslac);
            //To wyżej to poprostu request typu post w którym wrzucamy dane konta
            CookieContainer tCookies = ciacha; //tutaj są trzymane ciasteczka których użyjemy by dostać sie do wyboru serwera
            UTF8Encoding charset = new UTF8Encoding(); // ustawiamy kodowanie UTF-8
            Byte[] byteData = charset.GetBytes(postData); //pobieramy bajty naszego zapytania
            HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(stronka); //tworzymy zapytanie do strony DO.
            postRequest.Method = "POST"; //typ zapytania
            postRequest.KeepAlive = true; //podtrzmujemy zapytanie
            postRequest.CookieContainer = tCookies; //dodajemy nasz kontener ciastek do zapytania
            postRequest.ContentType = "application/x-www-form-urlencoded"; // podajemy typ zawartości
            postRequest.Referer = stronka; //adres po raz kolejny...
            postRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17"; //Useragent czyli przeglądarka
            postRequest.ContentLength = byteData.Length; //pobieramy długość
            Stream postRequestStream = postRequest.GetRequestStream(); //zbieramy odpowiedź
            postRequestStream.Write(byteData, 0, byteData.Length); // piszemy do serwera nasze zapytanie
            postRequestStream.Close(); //zamykamy stream.
            HttpWebResponse postResponse; // odpowiedź serwera
            postResponse = (HttpWebResponse)postRequest.GetResponse();// łapiemy odpowiedź
            tCookies.Add(postResponse.Cookies); // zbieramy ciasteczka
            ciacha = tCookies; //do naszych ciasteczek dodajemy ciasteczka (LOL)
            StreamReader postRequestReader = new StreamReader(postResponse.GetResponseStream()); //zbieramy kod strony
            string kod = postRequestReader.ReadToEnd(); //mamy kod strony z wyborem serwera
            postResponse.Close(); //zamykamy
            postRequestReader.Close(); // zamykamy
            return kod;
        }

Komentarze nie są moje, tylko z tego tutoriala starego z mpc je cały czas mam :D

Opublikowano

 

Jeżeli chodzi o HttpWebRequest to mniej więcej wiem jak odczytać dane (do postaci jakiej potrzebuję) ale już nie wiem jak wywołać zdarzenie typu kliknięcie na przycisk czy utworzenie sesji (bez tego nie dostanę się na konto).

 

To daruj sobie pisanie bota bo nic z tego nie wyjdzie.

Opublikowano

Znalazłem (przez przypadek) rozwiązanie: 

wbrowser.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);

Wyżej podanie zdarzenie występowało również po załadowaniu javascript css itp. Więc program się sypał.

A tu sposób jak wyłapać interesujące nas zdarzenie:

private void WebBrowser_DocumentCompleted(object sender,
        WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
                return;

            //kod
        }

Mam nadzieje że się komuś przyda.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...