Spisu treści:

Spidering witryny Ajax za pomocą asynchronicznego formularza logowania: 6 kroków (ze zdjęciami)
Spidering witryny Ajax za pomocą asynchronicznego formularza logowania: 6 kroków (ze zdjęciami)

Wideo: Spidering witryny Ajax za pomocą asynchronicznego formularza logowania: 6 kroków (ze zdjęciami)

Wideo: Spidering witryny Ajax za pomocą asynchronicznego formularza logowania: 6 kroków (ze zdjęciami)
Wideo: JS XMLHttpRequest i JS Fetch API klient REST - Kurs Full-Stack Web Developer - IdeaKursy od IdeaSpot 2024, Listopad
Anonim
Spidering witryny Ajax za pomocą asynchronicznego formularza logowania
Spidering witryny Ajax za pomocą asynchronicznego formularza logowania

Problem: narzędzia Spidering nie pozwalają na uwierzytelnianie logowania AJAX.

Ta instrukcja pokaże Ci, jak zalogować się za pomocą formularza AJAX przy użyciu Pythona i modułu o nazwie Mechanize. Pająki to programy do automatyzacji sieci, które stają się coraz popularniejszym sposobem gromadzenia danych w sieci. Krążą po sieci, zbierając cenne materiały, aby napędzać najpotężniejsze firmy internetowe. Inni przeszukują się i zbierają określone zestawy danych, aby usprawnić podejmowanie decyzji lub wnioskować, co aktualnie się dzieje, lub znaleźć najtańsze trasy podróży. Pająki (przeszukiwacze sieci, roboty internetowe lub skrobaki ekranu) świetnie nadają się do przekształcania szlamu HTML w jakieś pozory inteligentnych danych, ale mamy problem, jeśli chodzi o strony internetowe obsługujące AJAX, które mają sesje obsługujące JavaScript i pliki cookie, po których nie można nawigować w normalnych zestaw narzędzi do pająków. W tej instrukcji będziemy uzyskiwać dostęp do naszej własnej strony członkowskiej pod adresem pubmatic.com. Te kroki pokażą Ci metodę do naśladowania, ale Twoja strona będzie inna. Baw się dobrze!

Krok 1: Zbierz materiały

Zbierz materiały
Zbierz materiały

Będziesz musiał zacząć uzupełniać swoje zasoby programistyczne. Będziesz potrzebował następujących programów. Skorzystaj z ich przewodników, aby pomóc Ci zainstalować te… Zainstaluj FirebugTo dodatek do przeglądarki FirefoxZainstaluj PythonPrzejdź do: python.orgPrzejdź do: python.orgZainstaluj moduł MechanizeGet MechanizeGet MechanizeInne przydatne narzędzia Spidering:BeautifulSoup

Krok 2: Znajdź nagłówki niezbędne do utworzenia sesji

Dobrze zrobiony pająk uzyska dostęp do strony internetowej tak, jakby była przeglądarką kontrolowaną przez człowieka, ukrywającą wskazówki co do jej prawdziwego pochodzenia. Część interakcji między przeglądarkami a serwerami odbywa się za pośrednictwem żądań GET i POST, które można znaleźć w nagłówkach (ta informacja jest rzadko wyświetlana w przeglądarce, ale jest bardzo ważna). Możesz wyświetlić niektóre z tych informacji, naciskając Ctrl I (w firefoxie), aby otworzyć okno Informacje o stronie. Aby przebrać się za łagodnie usposobioną przeglądarkę, musisz zidentyfikować się za pomocą tych samych danych uwierzytelniających. Jeśli próbowałeś zalogować się do pubmatic z wyłączonym javascript w swojej przeglądarce, nie zaszedłbyś zbyt daleko, ponieważ przekierowania są wykonywane za pomocą javascript. Biorąc więc pod uwagę, że większość przeglądarek-pająków nie ma interpreterów javascript, będziemy musieli uzyskać logowanie przez alternatywną trasę. Zacznijmy od pobrania informacji nagłówka wysyłanych z przeglądarki po kliknięciu Prześlij. Gdyby to był zwykły login w przeglądarce, skorzystałbyś z Mechanize, aby wypełnić formularz i kliknąć Prześlij. Normalne formularze logowania są umieszczone w znaczniku …, a Mechanize będzie w stanie bez problemu przesłać to i przeszukać następną stronę. Ponieważ nie mamy wypełnionego tagu formularza, funkcja przesyłania jest obsługiwana przez javascript. Sprawdźmy funkcję submitForm w pubmatic. Aby to zrobić, najpierw otwórz stronę internetową w firefox i włącz firebuga, klikając świetlika w prawym dolnym rogu. Następnie kliknij kartę skryptu, skopiuj cały wyświetlony kod i wklej go do swojego ulubionego oprogramowania do edycji tekstu. Następnie możesz usunąć cały kod z wyjątkiem funkcji submitForm. Rozpoczyna się od funkcji "submitForm(theform) {" i wszystkiego pomiędzy tym a funkcjami zamykającymi nawias klamrowy "}". Analizując tę funkcję bardzo prymitywnie, zauważyliśmy, że pewne uwierzytelnianie zwraca zmienną o nazwie xmldoc, która jest przetwarzana jako xml. Jest to kluczowa funkcja AJAX, która odpytywała serwer i przywracała jakiś dokument XML, który zawiera drzewo informacji. Węzeł session_id zawiera session_id, jeśli uwierzytelnianie się powiodło, można to stwierdzić, patrząc na ten fragment kodu: "if (session_id != null) { //login success". Teraz chcemy, aby ten fragment kodu JavaScript nie zabrał nas gdziekolwiek, abyśmy mogli zobaczyć, co jest wysyłane na serwer podczas uwierzytelniania. W tym celu komentujemy wszystkie przekierowania okien, które wyglądają tak: "window.location=…". Aby to skomentować, dodaj przed nimi podwójne ukośniki, takie jak: „//window.location…”, co zapobiega uruchomieniu kodu. Możesz pobrać poniższy plik JavaScript, w którym te zmiany zostały już wprowadzone. Skopiuj i wklej ten edytowany fragment JavaScript do prawego okna konsoli i kliknij uruchom. Zastępuje to funkcję javascript znajdującą się już na stronie w naszej nowej wersji. Teraz, gdy wypełnisz swoje dane uwierzytelniające i klikniesz Prześlij, powinieneś zobaczyć informacje nagłówka POST i GET wypełniające konsolę, ale nigdzie się nie wybierasz. Informacje POST to informacje przesyłane do serwera przez funkcje AJAX, chcesz być tak samo tak jak to możliwe, skopiuj i wklej te informacje do notatnika.

Krok 3: Przygotuj kod

Zanim dodamy nowe nagłówki, które znaleźliśmy, utwórzmy szablonowy kod pythona logowania Mechanize. Robimy to z dwóch powodów, po pierwsze mamy komponent, który działa w celu dodawania nowych rzeczy, a po drugie, aby zobaczyć, jak normalnie logowałbyś się na stronę inną niż AJAX-y. Otwórz notatnik lub jego odpowiednik, a następnie skopiuj i wklej Następny. Kiedy skończysz, zapisz go jako nazwapliku.py, gdzie możesz go znaleźć.#!/usr/bin/python# -*- coding: utf-8 -*-#Zacznij od swojego modułu imports:from mechanize import Browser #Utwórz swój instancję przeglądarki za pomocą wywołania funkcji Browser();br = Browser()#Ustaw przeglądarkę tak, aby ignorowała żądania spiders.txt#Zrób to ostrożnie, jeśli strona internetowa nie lubi pająków, mogą być zdenerwowane, gdy Cię tam znajdąbr.set_handle_robots(False) #Otwórz stronę, na którą chcesz się zalogować tobr.open("https://pubmatic.com/04_betasignin.jsp")#Ponieważ znam nazwę formularza, mogę po prostu wybrać formularz po nazwiebr.select_form ("login")#Używając nazw elementów formularza wprowadzam nazwy elementów formularzabr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () wysyła formularz i ściąga wynikową stronę, tworzysz nową instancję przeglądarki#response poniżej zawiera wynikową pageresponse = br.submit()#Spowoduje to wydrukowanie treści otrzymanej strony internetowej#print response.read()

Krok 4: Wyślij właściwe sygnały

Wyślij właściwe sygnały
Wyślij właściwe sygnały

Mechanize ma łatwą funkcję dodawania nagłówków do nagłówków POST, dzięki czemu możemy wyświetlać się w tej samej przeglądarce, której użyłeś do uzyskania dostępu do strony po raz pierwszy. Otwórz plik z nagłówkami znalezionymi za pomocą Firebuga i edytuj ten plik tekstowy, aby pasował. Zamień wszystko w cudzysłowie na odpowiednią pozycję z listy nagłówków:USER_AGENT = "Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.8.1.9) Gecko/20071102 Pardus/2007 Firefox/2.0.0.9" HOST = "pubmatic.com"ACCEPT = "text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q= 0.5"ACCEPT_LANGUAGE = "en-us, en;q=0.5"ACCEPT_ENCODING = "gzip, deflate"ACCEPT_CHARSET = "ISO-8859-1, utf-8;q=0.7, *;q=0.7"KEEP_ALIVE = "300" CONNECTION = "keep-alive"CONTENT_TYPE = "application/x-www-form-urlencoded"REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH = "60"COOKIE = "utma=103266945.1970108054.1210113004.1212104087.1212791201.; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(bezpośrednio)|utmcsr=(bezpośrednio)|utmcmd=(brak); no-cache"CACHE_CONTROL ="no-cache"Tworzy to zestaw zmiennych, których możesz następnie użyć do dołączenia do nagłówka w tym kodzie:br.add_header = [("Host", HOST)]br.add_headers = [("User-agent", USER_AGENT)]br.add_headers = [("Akceptuj", AKCEPTUJĘ)]br.add_header = [("Akceptuj-Język", ACCEPT_LANGUAGE)]br.add_headers = [("Akceptuj-Kodowanie", ACCEPT_ENCODING)]br.add_headers = [("Akceptuj-znaków", ACCEPT_CHARSET)]br.add_header = [("Keep-Alive" ", KEEP_ALIVE)]br.add_headers = [("Połączenie", POŁĄCZENIE)]br.add_header = [("Typ-treści", CONTENT_TYPE)]br.add_header = [("Polecający", REFERER)]br.add_header = [("Długość treści", CONTENT_LENGTH)]br.add_headers = [("Plik cookie", COOKIE)]br.add_headers = [("Pragma", PRAGMA)]br.add_headers = [("Kontrola pamięci podręcznej", CACHE_CONTROL)]Teraz, gdy wywołamy funkcję otwierania strony, nagłówki również zostaną wysłane do serwera. br.open("https://pubmatic.com/04_betasignin.jsp")

Krok 5: Zmechanizowane pliki cookie

Zmechanizowane pliki cookie
Zmechanizowane pliki cookie

Ten krok jest spowodowany tym, że mechanize automatyzuje obsługę plików cookie, ale ważne jest, aby wiedzieć, co się dzieje:

Po przesłaniu formularza masz odpowiednie nagłówki, tak jakbyś przesyłał za pomocą funkcji javascript. Serwer następnie uwierzytelnia te informacje i generuje identyfikator sesji i zapisuje go w pliku cookie, jeśli nazwa użytkownika i hasło są poprawne. Dobrą wiadomością jest to, że Mechanize automatycznie zjada i zwraca pliki cookie, więc nie musisz się martwić o wysyłanie i odbieranie plików cookie. Więc po utworzeniu identyfikatora sesji, który działa, możesz wprowadzić sekcję tylko dla członków witryny.

Krok 6: Klucz do serca

Teraz, gdy zdobyliśmy identyfikator sesji i Mechanize zapisało go w swoich plikach cookie, możemy śledzić javascript, aby zobaczyć, gdzie musimy się udać. Zajrzyj do "if (session_id != null) { //zalogowanie powiodło się", aby zobaczyć, gdzie się udać. Patrząc na kod relokacji okna: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Matematyka.losowy()*10000;" widzimy, że musimy wejść na stronę znajdującą się pod adresem https://pubmatic.com/05_homeloggedin.jsp?v=jakaś losowa liczba. Stwórzmy więc po prostu fałszywą liczbę losową, aby wejść i utworzyć nową instancję przeglądarki, aby odczytać świeżo otwartą stronę:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")I to powinno bądź tym. Twój kod jest teraz kompletny, używając odpowiednich nagłówków i zmechanizowanej obsługi plików cookie, możemy teraz uzyskać dostęp do wnętrzności pubmatic. Otwórz terminal, załaduj poniższy pakiet Pythona i zaloguj się. Aby to zrobić, wpisz python2.5, a następnie ścieżkę do pliku.py.

Zalecana: