Inhoudsopgave:

Een Ajax-website spideren met een asynchroon inlogformulier - Ajarnpa
Een Ajax-website spideren met een asynchroon inlogformulier - Ajarnpa

Video: Een Ajax-website spideren met een asynchroon inlogformulier - Ajarnpa

Video: Een Ajax-website spideren met een asynchroon inlogformulier - Ajarnpa
Video: Ajax spider script ( PHP, Javascript ) 2024, November
Anonim
Een Ajax-website spinnen met een asynchroon inlogformulier
Een Ajax-website spinnen met een asynchroon inlogformulier

Het probleem: Spidering-tools staan geen AJAX-inlogverificatie toe.

Deze instructable laat je zien hoe je inlogt via een AJAX-formulier met Python en een module genaamd Mechanize. Spinnen zijn webautomatiseringsprogramma's die steeds populairder worden voor mensen om online gegevens te verzamelen. Ze kruipen over het web en verzamelen kostbare materialen om de machtigste webbedrijven die er zijn van brandstof te voorzien. Anderen kruipen rond en verzamelen specifieke datasets om de besluitvorming te verbeteren, of concluderen wat er momenteel "in" is, of vinden de goedkoopste reisroutes. Spiders (webcrawlers, webbots of schermschrapers) zijn geweldig om HTML-rommel om te zetten in een schijn van intelligente gegevens, maar we hebben een probleem als het gaat om AJAX-webpagina's die JavaScript- en cookie-sessies hebben die niet kunnen worden genavigeerd met de normale set spidering-tools. In deze instructable hebben we toegang tot onze eigen ledenpagina op pubmatic.com. Deze stappen laten u een methode zien die u moet volgen, maar uw pagina zal anders zijn. Veel plezier!

Stap 1: Verzamel materialen

Verzamel materialen
Verzamel materialen

U moet beginnen met het aanvullen van uw programmeerbronnen. Je hebt de volgende programma's nodig. Gebruik hun handleidingen om u te helpen bij het installeren van deze…Firebug installerenHet is een Firefox-add-onPython installerenGa naar: python.orgGa naar:python.orgInstalleer de Mechanize-moduleGet MechanizeGet MechanizeAndere handige Spidering-tools:BeautifulSoup

Stap 2: Zoek de headers die nodig zijn om een sessie te maken

Een goed gemaakte spider zal toegang krijgen tot een webpagina alsof het een browser is die wordt bestuurd door een mens die aanwijzingen over de ware oorsprong verborgen houdt. Een deel van de interactie tussen browsers en servers gebeurt via GET- en POST-verzoeken die u in de headers kunt vinden (deze informatie wordt zelden weergegeven in een browser, maar is erg belangrijk). U kunt deze informatie bekijken door op Ctrl I (in Firefox) te drukken om het venster Pagina-info te openen. Om jezelf te vermommen als een mild gemanierde browser, moet je jezelf identificeren met dezelfde inloggegevens. Als je probeerde in te loggen op pubmatic terwijl javascript in je browser was uitgeschakeld, zou je niet ver komen aangezien de omleidingen via javascript worden gedaan. Dus gezien het feit dat de meeste spider-browsers geen javascript-interpreters hebben, moeten we inloggen via een alternatieve route. Laten we beginnen met het ontvangen van de header-informatie die vanuit de browser wordt verzonden wanneer u op verzenden klikt. Als dit een gewone browserlogin was, zou u Mechanize gebruiken om het formulier in te vullen en op verzenden te klikken. Normale inlogformulieren zijn ingekapseld in een … tag en Mechanize zou dit zonder problemen kunnen indienen en de volgende pagina kunnen pollen. Aangezien we geen ingevulde formuliertag hebben, wordt de verzendfunctie afgehandeld door javascript. Laten we de submitForm-functie van pubmatic eens bekijken. Open hiervoor eerst de webpagina in firefox en zet firebug aan door op de firefly in de rechter benedenhoek te klikken. Klik vervolgens op het scripttabblad, kopieer alle code die verschijnt en plak deze in uw favoriete tekstbewerkingssoftware. U kunt dan alle code verwijderen, behalve de functie submitForm. Het begint met de functie "submitForm(theform) {" en alles daartussenin en de functies accolade sluiten "}". Bij het zeer primitief analyseren van deze functie merken we dat er enige authenticatie plaatsvindt die een variabele met de naam xmldoc terugbrengt die wordt geparseerd als xml. Dit is een belangrijk kenmerk van AJAX, het heeft de server ondervraagd en een XML-document teruggebracht dat een boom met informatie bevat. De node session_id bevat de session_id als de authenticatie succesvol was, je kunt dit zien door naar dit stukje code te kijken: "if (session_id != null) { //login succesvol". Nu willen we voorkomen dat dit stukje javascript ons ergens heen brengt, zodat we kunnen zien wat er tijdens de authenticatie op de server wordt gepost. Om dit te doen, geven we commentaar op alle vensteromleidingen die er als volgt uitzien: "window.location=…". Om hier commentaar op te geven, voegt u dubbele schuine strepen ervoor toe, zoals: "//window.location…" dit voorkomt dat de code wordt uitgevoerd. U kunt het Javascript-bestand hieronder downloaden waarin deze bewerkingen al zijn aangebracht. Kopieer en plak dit bewerkte stukje javascript in de rechterkant van de consolevensters en klik op uitvoeren. Dit overschrijft de javascript-functie die al op de pagina staat met onze nieuwe versie. Wanneer u nu uw inloggegevens invult en op verzenden klikt, zou u POST- en GET-headerinformatie de console moeten zien vullen, maar u gaat nergens heen. De POST-informatie is de informatie die door de AJAX-functies naar de server is geschoten, u wilt zoveel mogelijk als dit mogelijk is, kopieer en plak die informatie in een notitieblok.

Stap 3: Bereid de code voor

Voordat we de nieuwe headers toevoegen die we hebben gevonden, laten we een sjabloon maken voor Mechanize login python-code. We doen dit om twee redenen, ten eerste hebben we een component die werkt om nieuwe dingen aan toe te voegen en ten tweede zodat u kunt zien hoe u normaal gesproken inlogt op een niet-AJAX-y webpagina. Open kladblok of gelijkwaardig, en kopieer en plak de volgend op. Als u klaar bent, slaat u het op als ubestandsnaam.py ergens waar u het kunt vinden.#!/usr/bin/python# -*- codering: utf-8 -*-#Begin met uw module imports:from mechanize import Browser #Maak uw browserinstantie via de functieaanroep Browser();br = Browser()#Stel de browser zo in dat deze de spiders.txt-verzoeken negeert#Doe dit voorzichtig, als de webpagina niet van spiders houdt, kunnen ze boos zijn om u daar te vinden.set_handle_robots(False) #Open de pagina waarop u wilt inloggen tobr.open("https://pubmatic.com/04_betasignin.jsp")#Omdat ik de naam van het formulier weet, kan ik het formulier eenvoudig selecteren met de naambr.select_form ("login")#Met de namen van de formulierelementen voer ik de namen van de formulierelementen inbr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () verzendt het formulier en haalt de resulterende pagina op, u maakt een nieuwe browserinstantie#response hieronder bevat de resulterende pageresponse = br.submit()#Hiermee wordt de hoofdtekst van de ontvangen webpagina afgedrukt#print response.read()

Stap 4: Stuur de juiste signalen

Stuur de juiste signalen
Stuur de juiste signalen

Mechanize heeft een eenvoudige functie om headers toe te voegen aan de headers POST, hierdoor kunnen we in dezelfde browser verschijnen die u de eerste keer gebruikte om de pagina te openen. Open het bestand met de headers die je hebt gevonden met Firebug en bewerk dit tekstbestand zodat het overeenkomt. Vervang alles tussen de aanhalingstekens door het juiste item uit de koplijst: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 = "nl-nl, nl;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.121201202087.1212791; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(rechtstreeks)|utmcsr=(direct)|utmcmd=(geen); JSESSIONID=mctmcmd=(geen); no-cache"CACHE_CONTROL ="no-cache"Hiermee wordt een reeks variabelen gemaakt die u vervolgens kunt gebruiken om aan de header ons toe te voegen gebruik deze code:br.add_header = [("Host", HOST)]br.add_headers = [("User-agent", USER_AGENT)]br.add_headers = [("Accepteren", ACCEPT)]br.add_header = [("Accept-Language", ACCEPT_LANGUAGE)]br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)]br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)]br.add_header = [("Keep-Alive ", KEEP_ALIVE)]br.add_headers = [("Verbinding", VERBINDING)]br.add_header = [("Content-Type", CONTENT_TYPE)]br.add_header = [("Verwijzer", REFERER)]br.add_header = [("Content-Length", CONTENT_LENGTH)]br.add_headers = [("Cookie", COOKIE)]br.add_headers = [("Pragma", PRAGMA)]br.add_headers = [("Cache-Control", CACHE_CONTROL)]Als we nu de pagina openen-functie aanroepen, worden de headers ook naar de server gestuurd. br.open("https://pubmatic.com/04_betasignin.jsp")

Stap 5: Gemechaniseerde cookies

Gemechaniseerde Cookies
Gemechaniseerde Cookies

Deze stap is omdat mechaniseren de verwerking van cookies automatiseert, maar het is belangrijk om te weten wat er gebeurt:

Wanneer het formulier is verzonden, heb je de juiste headers alsof je het hebt ingediend met behulp van de javascript-functie. De server verifieert deze informatie vervolgens en genereert een sessie-ID en slaat deze op in een cookie als de gebruikersnaam en het wachtwoord correct zijn. Het goede nieuws is dat Mechanize automatisch cookies eet en uitbraakt, zodat u zich geen zorgen hoeft te maken over het verzenden en ontvangen van de cookie. Dus zodra u een sessie-ID hebt gemaakt die werkt, kunt u het ledengedeelte van de website openen.

Stap 6: Sleutel tot het hart

Nu we een sessie-ID hebben verkregen en Mechanize deze in zijn cookies heeft opgeslagen, kunnen we het javascript volgen om te zien waar we heen moeten. Kijkend in de "if (session_id != null) { //login succesvol" om te zien waar te gaan op succes. Kijkend naar de vensterverplaatsingscode: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Wiskunde.willekeurig()*10000;" we zien dat we naar een website moeten gaan op https://pubmatic.com/05_homeloggedin.jsp?v=een willekeurig nummer. Dus laten we gewoon een nep willekeurig getal maken om in te voeren en een nieuwe browserinstantie maken om de pas geopende pagina te lezen:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")En dat zou moeten het zijn. Je code is nu compleet, door de juiste headers te gebruiken en de cookie-handler te mechaniseren, hebben we nu toegang tot de ingewanden van pubmatic. Open terminal, laad het python-pakket hieronder en log in. Typ hiervoor python2.5 en vervolgens het bestandspad naar het.py-bestand.

Aanbevolen: