Innehållsförteckning:

Betraktar en Ajax -webbplats med ett asynkront inloggningsformulär: 6 steg (med bilder)
Betraktar en Ajax -webbplats med ett asynkront inloggningsformulär: 6 steg (med bilder)

Video: Betraktar en Ajax -webbplats med ett asynkront inloggningsformulär: 6 steg (med bilder)

Video: Betraktar en Ajax -webbplats med ett asynkront inloggningsformulär: 6 steg (med bilder)
Video: 2 Föreläsning AJAX 2024, Juli
Anonim
Överväger en Ajax -webbplats med ett asynkront inloggningsformulär
Överväger en Ajax -webbplats med ett asynkront inloggningsformulär

Problemet: Spidering -verktyg tillåter inte AJAX -inloggningsautentisering.

Denna instruktör visar dig hur du loggar in via ett AJAX -formulär med Python och en modul som heter Mechanize. Spindlar är webbautomatiseringsprogram som blir allt populärare för människor att samla in data online. De kryper runt på nätet och samlar värdefullt material för att driva de mest kraftfulla webbföretagen runt. Andra kryper runt och samlar specifika uppsättningar data för att förbättra beslutsfattandet, eller dra slutsatser om vad som för närvarande finns”eller hitta de billigaste resvägarna. Spindlar (webcrawlers, webbots eller skärmskrapor) är fantastiska för att göra HTML -goop till en sken av intelligenta data, men vi har ett problem när det gäller AJAX -aktiverade webbsidor som har JavaScript- och cookie -aktiverade sessioner som inte kan navigeras med normal uppsättning spiderverktyg. I denna instruerbara kommer vi att få tillgång till vår egen medlemssida på pubmatic.com. Dessa steg visar dig en metod att följa, men din sida kommer att vara annorlunda. Ha så kul!

Steg 1: Samla material

Samla material
Samla material

Du måste börja komplettera dina programmeringsresurser. Du behöver följande program. Använd deras guider för att hjälpa dig att installera dessa … Installera FirebugDet är ett Firefox -tilläggInstallera PythonGo till: python.orgGå till: python.orgInstallera Mechanize ModuleGet MechanizeGet Mechanize Andra användbara Spidering -verktyg: BeautifulSoup

Steg 2: Hitta rubrikerna som behövs för att skapa en session

En välgjord spindel kommer åt en webbsida som om det vore en webbläsare som styrs av en människa och håller ledtrådar om dess sanna ursprung dolt. En del av interaktionen mellan webbläsare och servrar sker genom GET- och POST -förfrågningar som du kan hitta i rubrikerna (denna information visas sällan i en webbläsare, men är mycket viktig). Du kan se en del av denna information genom att trycka på Ctrl I (i Firefox) för att öppna fönstret Sidinfo. För att dölja dig själv som en mildare webbläsare måste du identifiera dig med samma referenser. Om du försökte logga in på pubmatic med JavaScript inaktiverat i din webbläsare skulle du inte komma så långt eftersom omdirigeringarna görs via javascript. Så med tanke på att de flesta spindelwebbläsare inte har javascript -tolkar måste vi komma in genom inloggningen via en alternativ rout. Låt oss börja med att få rubrikinformationen skickad från webbläsaren när du klickar på skicka. Om detta var en vanlig webbläsarinloggning skulle du använda Mekanisera för att fylla i formuläret och klicka på skicka. Normala inloggningsformulär är inkapslade i en … tagg och Mechanize skulle kunna skicka detta och avfråga nästa sida utan problem. Eftersom vi inte har en ifylld formulärtagg hanteras inlämningsfunktionen med javascript. Låt oss kontrollera pubmatikens submitForm -funktion. För att göra detta, öppna först webbsidan i firefox och slå på firebug genom att klicka på eldflugan i nedre högra hörnet. Klicka sedan på skriptfliken, kopiera all kod som visas och klistra in den i din favorit textredigeringsbit. Du kan sedan radera all kod förutom funktionen submitForm. Det börjar med funktionen "submitForm (theform) {" och allt däremellan och funktionerna som stänger lockig parentes "}". Vid analys av den här funktionen mycket primitivt märker vi att viss autentisering händer och tar tillbaka en variabel som heter xmldoc som analyseras som xml. Detta är en nyckelfunktion i AJAX, den har undersökt servern och tagit tillbaka några XML -dokument som innehåller ett informationsträd. Noden session_id innehåller session_id om autentiseringen lyckades. Du kan se detta genom att titta på denna kodbit: "if (session_id! = Null) {// inloggning lyckad". Nu vill vi förhindra att denna bit av javascript tar oss någonstans så att vi kan se vad som läggs ut på servern under autentisering. För att göra detta kommenterar vi alla fönsteromdirigeringar som ser ut så här: "window.location = …". För att kommentera detta lägg till dubbla snedstreck före dem så här: "//window.location …" detta förhindrar att koden körs. Du kan ladda ner Javascript -filen nedan som har dessa ändringar redan gjorda. Kopiera och klistra in den redigerade biten av javascript i konsolens fönster till höger och klicka på kör. Detta åsidosätter javascript -funktionen som redan finns på sidan med vår nya version. Nu när du fyller i dina autentiseringsuppgifter och klickar på skicka ska du se POST- och HÄMTA -information fylla konsolen, men du kommer inte att gå någonstans. POST -informationen är informationen som sköt till servern med AJAX -funktionerna, du vill vara lika mycket så här som möjligt, kopiera och klistra in den informationen i ett anteckningsblock.

Steg 3: Förbered koden

Innan vi lägger till de nya rubrikerna har vi hittat, låt oss skapa en mall för mekaniserad inloggningspythonkod. Vi gör detta av två skäl, först så att vi har en komponent som fungerar för att lägga till nya saker till och för det andra så att du ser hur du normalt skulle logga in på en icke AJAX-y webbsida. Öppna anteckningsblock eller motsvarande, och kopiera och klistra in följande. När du är klar spara det som youfilename.py någonstans kan du hitta.#!/Usr/bin/python#-*-kodning: utf-8-*-#Börja med din modulimport: från mekanisera import Webbläsare#Skapa din webbläsarinstans via funktionsanropet Browser (); br = Browser ()#Ställ in webbläsaren så att den ignorerar spiders.txt -förfrågningarna#Gör detta försiktigt, om webbsidan inte gillar spindlar kan de bli upprörda över att hitta dig därbr.set_handle_robots (Falskt) #Öppna sidan du vill logga in tillbr.open ("https://pubmatic.com/04_betasignin.jsp") #Eftersom jag vet formulärnamnet kan jag helt enkelt välja formuläret med namebr.select_form ("inloggning")#Med hjälp av formelementens namn skriver jag in namnen på formuläret elementbr ['email'] = "[email protected]" br ['password'] = "Asquid22"#br.submit () skickar ut formuläret och drar den resulterande sidan, du skapar en ny webbläsarinstans#svar nedan innehåller det resulterande sidansvaret = br.submit ()#Detta kommer att skriva ut innehållet på den mottagna webbsidan#print response.read ()

Steg 4: Skicka rätt signaler

Skicka rätt signaler
Skicka rätt signaler

Mechanize har en enkel funktion för att lägga till rubriker till rubrikerna POST, detta gör att vi kan visas i samma webbläsare som du använde för att komma åt sidan första gången. Öppna filen med rubriker som du hittade med Firebug och redigera den här textfilen för att matcha den. Ersätt allt i citattecken med rätt objekt från rubriklistan: 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, töm ut "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.12101130012.1210; KADUSERCOOKIE = EA2C3249-E822-456E-847A-1FF0D4085A85; utmz = 103266945.1210113004.1.1.utmccn = (direkt) | utmcsr = (direkt) | utmcmd = (ingen); JSESSIONID = 60F194BE2A5D3C5C3C5C3C8C8C9C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CCCCCCC53 no-cache "CACHE_CONTROL =" no-cache "Detta skapar en uppsättning variabler som du sedan kan använda för att lägga till rubriken oss med denna kod: br.add_header = [("Host", HOST)] br.add_headers = [("User-agent", USER_AGENT)] br.add_headers = [("Accept", ACCEPT)] br.add_header = [("Acceptera-språk", ACCEPT_LANGUAGE)] br.add_headers = [("Acceptera-kodning", ACCEPT_ENCODING)] br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)] br.add_header = [("Keep-Alive ", KEEP_ALIVE)] br.add_headers = [(" Connection ", CONNECTION)] br.add_header = [(" Content-Type ", CONTENT_TYPE)] br.add_header = [(" Referer ", 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)] Nu när vi kallar sidan för öppen funktion kommer rubrikerna också att skickas till servern. br.open ("https://pubmatic.com/04_betasignin.jsp")

Steg 5: Mekaniserade kakor

Mekaniserade kakor
Mekaniserade kakor

Detta steg beror på att mekanisera automatiserar cookiehantering, men det är viktigt att veta vad som händer:

När formuläret skickas har du rätt rubriker som om du skickat in med javascript -funktionen. Servern autentiserar sedan denna information och genererar ett sessions -ID och sparar det i en cookie om användarnamnet och lösenordet är korrekta. Den goda nyheten är att Mechanize äter och återställer kakor automatiskt så att du inte behöver oroa dig för att skicka och ta emot kakan. Så när du har skapat ett sessions -ID som fungerar kan du sedan gå in på medlemmars enda avsnitt på webbplatsen.

Steg 6: Nyckel till hjärtat

Nu när vi har förvärvat ett sessions -ID och Mechanize sparat det i dess cookies kan vi följa javascriptet för att se vart vi behöver gå. Tittar inuti "if (session_id! = Null) {// inloggning lyckad" för att se vart du ska gå till framgång. Tittar på fönsterförflyttningskoden: "if (adurlbase.search (/pubmatic.com/)! = -1) {window.location =" https://pubmatic.com/05_homeloggedin.jsp " +"? V = " + Math.random ()*10000; " vi ser att vi måste gå till en webbplats på https://pubmatic.com/05_homeloggedin.jsp?v=något slumpmässigt nummer. Så låt oss bara skapa ett falskt slumptal för att ange och skapa en ny webbläsarinstans för att läsa den nyöppnade sidan: response2 = br.open ("https://pubmatic.com/05_homeloggedin.jsp?v=2703") Och det borde vara det. Din kod är nu komplett, genom att använda rätt rubriker och mekanisera cookiehanteraren kan vi nu komma åt pubmaticens inre. Öppna terminalen, ladda pythonpaketet nedan och logga in. För att göra den här typen python2.5 och sedan filvägen till.py -filen.

Rekommenderad: