Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c#][js][php]Logowanie się na stronę web

Xerof0p 06 Sty 2012 23:56 3481 7
  • #1 06 Sty 2012 23:56
    Xerof0p
    Poziom 20  

    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ę

    0 7
  • #2 07 Sty 2012 01:22
    marcinj12
    Poziom 40  

    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: csharp
    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: csharp
    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.

    0
  • #3 19 Lut 2012 14:50
    Xerof0p
    Poziom 20  

    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

    0
  • Pomocny post
    #4 19 Lut 2012 15:47
    marcinj12
    Poziom 40  

    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ć.

    0
  • #5 19 Lut 2012 22:45
    Xerof0p
    Poziom 20  

    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: csharp
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam

    0
  • #6 10 Wrz 2012 14:15
    pedros100
    Poziom 9  

    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ć?

    0
  • #7 10 Wrz 2012 15:05
    marcinj12
    Poziom 40  

    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: csharp
    Zaloguj się, aby zobaczyć kod

    0