logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[c#] Jak w C# zautomatyzować logowanie na stronę z użyciem loginu i hasła?

Xerof0p 06 Sty 2012 23:56 4132 7
REKLAMA
  • #1 10359848
    Xerof0p
    Poziom 20  
    Posty: 664
    Pomógł: 4
    Ocena: 41
    Program pisany w c# ma sam się zalogować na konkretnej stronie. Jak to zrobić? Oczywiście program będzie posiadał dane login i hasło tej strony.
    Z góry dziękuję
  • REKLAMA
  • #2 10360104
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Mam nadzieję, że nie wykorzystasz tej wiedzy do jakiś niecnych celów ;)

    Dużo zależy od strony i tego, jak przebiega w niej logowanie: jeżeli przez GET - wystarczy spreparować adres, jeżeli przez POST - można podejrzeć informacje jakie są wysyłane, np. za pomocą Data Tamper i próbować odpowiednio spreparować przesyłany nagłówek. Przypuszczam, że strona logowania to standardowo: dwa inputy + przycisk submit.

    Jest też prostsza (?) metoda, "symulująca" działanie użytkownika. Zakładając, że chcesz się tylko zalogować na stronę, wstawiasz na formę komponent WebBrowser i przycisk.

    Do tego taki kod jak poniżej (przykład przetestowany dla logowania się na koncie poczty Wirtualnej Polski). Zakładam, że pole na login i hasło oraz przycisk można jakoś jednoznacznie określić, np. po nazwie (a jeszcze lepiej po ID, bo wtedy można użyć metody webBrowser1.Document.GetElementById()), np. Firebugiem w Firefoxie lub po prostu patrząc w kod HTML strony.

    W przypadku poczta.wp.pl było trochę kombinowania, bo jeden input ma ID i nazwę, drugi tylko nazwę, a przycisk nie ma ani ID, ani nazwy ;), za to jest jedynym typu "submit" na stronie. Dlatego kod wygląda tak:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Generalnie:
    - nawigujesz do strony na którą chcesz się zalogować i czekasz, aż się załaduje w całości (zdarzenie DocumentCompleted WebBrowser).
    - kiedy się zładuje, pobierasz z niej wszystkie elementy typu input,
    - w pętli po tych elementach odnajdujesz te do wpisania użytkownika i hasła (tu: wg nazwy), przy okazji możesz zapamiętać element przycisku w zmiennej typu HtmlElement.
    - kiedy już masz wpisanego użytkownika, hasło i zapamiętany obiekt przycisku - wykonujesz na tym ostatnim jego metodę "click".
    - ponieważ po kliknięciu przycisku następują kolejne przeładowania strony, to aby uniknąć kolejnych wywołań zdarzenia DocumentCompleted, należało by albo usunąć jego EventHandler z WebBrowser'a:
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    albo, jak w przykładzie, wstawić sobie jakąś zmienną typu boolean, ustawianą po wykonaniu akcji, i od niej uzależnić wykonanie kodu.
  • REKLAMA
  • #3 10567595
    Xerof0p
    Poziom 20  
    Posty: 664
    Pomógł: 4
    Ocena: 41
    Chodziłoby mi o zalogowanie w celu ściągnięcia treści strony. Mam już program, który ściąga treść. Myślałęm, że jak się zaloguję w firefoxie, to program konsolowy będzie miał dostęp do strony, która pojawia się po zalogowaniu.

    Ale nie. Mój program ściąga tylko treść ze strony logowania.

    Logowanie na tę stronę jest chyba metodą POST. W programi firebug doszedłem do ciągu, który jest chyba jakimś kodem logowania. Dobrze kombinuję? Oto ten ciąg:

    Cytat:
    page=&d2s_email=uzytkownikmarek%40gmail.com&d2s_pass=DOBREHASLO&d2s_remember=on&login=Send


    Proszę o wskazówki
  • REKLAMA
  • Pomocny post
    #4 10567872
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Za mało danych żeby coś więcej powiedzieć... Ciąg który wkleiłeś jest przysyłany w metodzie GET (nawiasem mówiąc - przesyłanie tak użytkownika i hasła jest "lekko" nieprofesjonalne...), jak dokleisz ten ciąg po adresie strony i znaku zapytania (np. www.poczta.wp.pl?page=&d2s_email....) i wejdziesz na taki adres, to powinno "coś" się stać.
    Nie wiem jak działa ten twój konsolowy program do pobierania strony (jak się łączy ze stroną, jak pobierasz jej treść), więc więcej nie da się powiedzieć... Ja bym szedł w kierunku klasy WebBrowser w której masz cały kod strony po pobraniu i możesz nim potem dowolnie manipulować.
  • #5 10570286
    Xerof0p
    Poziom 20  
    Posty: 664
    Pomógł: 4
    Ocena: 41
    Ech w końcu mi się udało. Jest to program konsolowy. Najpierw jest logowanie, potem ściągnięcie danych, ale nie z tej strony, co się pojawia po zalogowaniu, tylko z jeszcze następnej.

    Miałem trochę problem z cookie, bo początkowo serwer nie pozwalał wejść na tę stronę, z której pobieram dane, pomimo wcześniejszego zalogowania do serwisu. Ale się udało. Poniżej kod:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam
  • #6 11296903
    pedros100
    Poziom 10  
    Posty: 30
    marcinj12 A jeśli dochodzi kontrolka select, w której trzeba dodatkowo wybrać jedną z opcji, to jak przesłać wybór? Trzeba ładować wszystkie opcje, czy na samym select coś ustawić?
  • #7 11297040
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Okazuje się że można się prościej do tych opcji dobrać :)
    Podglądasz sobie w kodzie strony jakie ID ma select oraz jaka jest wartość (value) tej opcji którą chcesz zaznaczyć, a potem w zdarzeniu DocumentCompleted robisz tak (przykład: ustawienie selecta wyszukiwarki na forum elektrody):
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #8 11297290
    pedros100
    Poziom 10  
    Posty: 30
    Dzięki pomogło :)

Podsumowanie tematu

✨ W dyskusji poruszono temat automatyzacji logowania na stronę internetową przy użyciu C#. Użytkownik chciał zrealizować logowanie w celu pobrania treści strony, jednak napotkał problemy związane z metodą przesyłania danych (GET/POST) oraz obsługą ciasteczek. Uczestnicy sugerowali różne podejścia, w tym użycie klasy WebBrowser do symulacji działania użytkownika oraz manipulację nagłówkami HTTP. Ostatecznie autorowi udało się zrealizować logowanie i pobranie danych, korzystając z klasy HttpWebRequest oraz zarządzając ciasteczkami.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA