Hur man gör en webbkryptering med selen

Hur man gör en webbkryptering med selen / Programmering

Webbkryptering är extremt användbar för att automatisera vissa uppgifter som utförs rutinmässigt på webbplatser. Du kan skriva en sökrobot för att interagera med en webbplats precis som en människa skulle göra.

I en tidigare artikel Hur man bygger en grundläggande webbrobot för att dra information från en webbplats Hur man bygger en grundläggande webbrobot för att dra information från en webbplats Har du någonsin velat fånga information från en webbplats? Du kan skriva en sökrobot för att navigera på webbplatsen och extrahera precis vad du behöver. Läs mer, vi täckte grunderna för att skriva en webcrawler med pythonmodulen, scrapy. Begränsningen av det här tillvägagångssättet är att sökroboten inte stöder javascript. Det fungerar inte korrekt med de webbplatser som gör stor användning av javascript för att hantera användargränssnittet. För sådana situationer kan du skriva en sökrobot som använder Google Chrome och kan hantera javascript precis som en vanlig användardriven Chrome-webbläsare.

Automatisering av Google Chrome innebär användning av ett verktyg som heter Selen. Det är en programkomponent som sitter mellan ditt program och webbläsaren och hjälper dig att köra webbläsaren genom ditt program. I den här artikeln tar vi dig igenom hela processen med att automatisera Google Chrome. Stegen innefattar i allmänhet:

  • Ställa in Selen
  • Använda Google Chrome Inspector för att identifiera delar av webbsidan
  • Skriva ett java-program för att automatisera Google Chrome

För ändamålet med artikeln, låt oss undersöka hur du läser Google Mail från java. Medan Google tillhandahåller ett API (Application Programming Interface) för att läsa e-post, använder vi i denna artikel Selen för att interagera med Google Mail för att visa processen. Google Mail använder tungt av javascript, och är därmed en bra kandidat för att lära sig Selen.

Ställa in selen

Webdrivrutin

Som förklarat ovan består Selen av en mjukvarukomponent som kör som en separat process och utför åtgärder på uppdrag av java-programmet. Denna komponent heter Webdrivrutin och måste laddas ner till din dator.

Klicka här för att gå till Selenium-nedladdningssidan, klicka på den senaste versionen och ladda ner den lämpliga filen för datorns operativsystem (Windows, Linux eller MacOS). Det är ett ZIP-arkiv som innehåller chromedriver.exe. Extrahera den till en lämplig plats, t.ex. C: \ WebDrivers \ chromedriver.exe. Vi kommer att använda den här platsen senare i java-programmet.

Java-moduler

Nästa steg är att konfigurera de Java-moduler som krävs för att använda Selen. Förutsatt att du använder Maven för att bygga Java-programmet, lägg till följande beroende av din pom.xml.

   org.seleniumhq.selenium selen-java 3.8.1   

När du kör byggprocessen måste alla nödvändiga moduler hämtas och installeras på din dator.

Selen första stegen

Låt oss komma igång med Selen. Det första steget är att skapa en ChromeDriver exempel:

WebDriver driver = ny ChromeDriver (); 

Det ska öppna ett Google Chrome-fönster. Låt oss navigera till Googles söksida.

driver.get ( "http://www.google.com"); 

Hämta en hänvisning till textinmatningselementet så att vi kan utföra en sökning. Textinmatningselementet har namnet q. Vi hittar HTML-element på sidan med metoden WebDriver.findElement ().

WebElement element = driver.findElement (By.name ("q")); 

Du kan skicka text till något element med metoden Sendkeys (). Låt oss skicka ett sökord och avsluta det med en ny linje så sökningen börjar omedelbart.

element.sendKeys ( "terminator \ n"); 

Nu när en sökning pågår, måste vi vänta på resultatsidan. Vi kan göra det enligt följande:

new WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("terminator")); 

Denna kod berättar i grunden att Selen ska vänta i 10 sekunder och återvända när sidtiteln börjar terminator. Vi använder en lambda-funktion för att specificera villkoret att vänta på.

Nu kan vi få titeln på sidan.

System.out.println ("Titel:" + driver.getTitle ()); 

När du är klar med sessionen kan webbläsarfönstret stängas med:

driver.quit (); 

Och det är, folk, en enkel webbläsarsession kontrollerad med java via selen. Verkar ganska enkelt, men låter dig programmera många saker som du normalt skulle behöva göra för hand.

Använda Google Chrome Inspector

Google Chrome Inspector Uträtta webbproblem med Chrome Developer Tools eller Firebug Utvärdera webbplatsproblem med Chrome Developer Tools eller Firebug Om du har följt mina jQuery-tutorials hittills har du kanske redan stött på några kodproblem och inte vetat hur du fixar dem. När det gäller en icke-funktionell kodbit, är det mycket ... Läs mer är ett ovärderligt verktyg för att identifiera element som ska användas med Selen. Det låter oss rikta in det exakta elementet från Java för att extrahera information samt en interaktiv åtgärd som att klicka på en knapp. Här är en primer om hur man använder inspektören.

Öppna Google Chrome och navigera till en sida, säg IMDb-sidan för Justice League (2017).

Låt oss hitta det element som vill rikta in sig, säg filmöversikten. Högerklicka på sammanfattningen och välj “Inspektera” från popupmenyn.

Från “element” fliken kan vi se att sammanfattande text är en div med en klass av summary_text.

Använda CSS eller XPath för urval

Selen stöder välja element från sidan med hjälp av CSS. (CSS dialekt stöds är CSS2). Till exempel för att välja sammanfattande text från IMDb-sidan ovan, skulle vi skriva:

WebElement summaryEl = driver.findElement (By.cssSelector ("div.summary_text")); 

Du kan också använda XPath för att välja element på ett mycket liknande sätt (Gå här för specifikationerna). Återigen, för att välja sammanfattande text, skulle vi göra:

WebElement summaryEl = driver.findElement (By.xpath ("// div [@ class = 'summary_text']")); 

XPath och CSS har liknande funktioner så att du kan använda vilket du är bekväm med.

Läser Google Mail från Java

Låt oss nu titta på ett mer komplext exempel: hämtar Google Mail.

Starta Chrome-drivrutinen, navigera till gmail.com och vänta tills sidan är laddad.

WebDriver driver = ny ChromeDriver (); driver.get ( "https://gmail.com"); ny WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("gmail")); 

Därefter leta efter e-postfältet (det heter med id identifierId) och ange e-postadressen. Klicka på Nästa knappen och vänta tills lösenordssidan laddas.

/ * Skriv in användarnamn / e-postadress * / driver.findElement (By.cssSelector ("# identifierId")) sendKeys (email); driver.findElement (By.cssSelector ( "RveJvd.")) klickar du på ().  new WebDriverWait (driver, 10) .until (d ->! d.findElements (By.xpath ("// div [@ id = 'lösenord']")) .Empty ()); 

Nu skriver vi in ​​lösenordet, klickar på Nästa knappen igen och vänta tills Gmail-sidan laddas.

/ * Skriv in lösenord * / driver .findElement (By.xpath ("// div [@ id = 'lösenord'] // inmatning [@ type = 'lösenord']")) .sendKeys (lösenord); driver.findElement (By.cssSelector ( "RveJvd.")) klickar du på ().  new WebDriverWait (driver, 10) .until (d ->! d.findElements (By.xpath ("// div [@ class = 'Cp']")) .Empty ()); 

Hämta listan med e-postrader och loop över varje post.

Lista rader = förare .findElements (By.xpath ("// div [@ class = 'Cp'] // tabell / tbody / tr")); för (WebElement tr: rader)  

För varje post, hämta Från fält. Observera att vissa Från poster kan ha flera element beroende på antalet personer i konversationen.

/ * Från Element * / System.out.println ("From:"); för (WebElement e: tr .findElements (By.xpath (".// div [@ class = 'yW'] / *"))) System.out.println ("" + e.getAttribute ("email") + "," + e.getAttribute ("name") + "," + e.getText ());  

Hämta nu ämnet.

/ * Subject * / System.out.println ("Sub:" + tr.findElement (By.xpath (".// div [@ class = 'y6']")). GetText ());  

Och datum och tid för meddelandet.

/ * Datum / Tid * / WebElement dt = tr.findElement (By.xpath ("./ td [8] / *")); System.out.println ("Date:" + dt.getAttribute ("title") + "," + dt.getText ());  

Här är det totala antalet e-postrader på sidan.

System.out.println (rader.size () + "mail"); 

Och äntligen är vi färdiga så vi slutar webbläsaren.

driver.quit (); 

För att återskapa kan du använda Selen med Google Chrome för att krypta de webbplatser som använder javascript kraftigt. Och med Google Chrome Inspector är det ganska lätt att träna ut den nödvändiga CSS eller XPath för att extrahera från eller interagera med ett element.

Har du några projekt som dra nytta av att använda Selen? Och vilka problem står du inför med det? Beskriv i kommentarerna nedan.

Utforska mer om: API, webbutveckling.