
Joseph Goodman
0
768
90
Webcrawling er yderst nyttigt til at automatisere visse opgaver, der udføres rutinemæssigt på websteder. Du kan skrive en crawler til at interagere med et websted, ligesom et menneske ville gøre.
I en tidligere artikel Sådan oprettes en grundlæggende webcrawler til at trække oplysninger fra et websted Sådan oprettes en grundlæggende webcrawler til at trække oplysninger fra et websted Har du nogensinde ønsket at indhente oplysninger fra et websted? Du kan skrive en crawler for at navigere på webstedet og udtrække lige det, du har brug for. , vi dækkede det grundlæggende ved at skrive en webcrawler Hvad er webskraber? Sådan samles data fra websteder Hvad er webskrapning? Sådan samles data fra websteder Har du nogensinde fundet dig selv at miste værdifuld tid med at læse data på websider? Her finder du, hvordan du finder de data, du ønsker, med skrabning på nettet. ved hjælp af python-modulet, skrapy. Begrænsningen af denne tilgang er, at crawlen ikke understøtter javascript. Det vil ikke fungere korrekt med de websteder, der bruger javascript kraftigt til at administrere brugergrænsefladen. I sådanne situationer kan du skrive en crawler, der bruger Google Chrome og dermed kan håndtere javascript ligesom en normal brugerdrevet Chrome-browser.
Automatisering af Google Chrome involverer brug af et kaldet værktøj Selen. Det er en softwarekomponent, der sidder mellem dit program og browseren, og hjælper dig med at køre browseren gennem dit program. I denne artikel tager vi dig gennem den komplette proces med at automatisere Google Chrome. Trinene inkluderer generelt:
- Opsætning af selen
- Brug af Google Chrome Inspector til at identificere dele af websiden
- At skrive et java-program til at automatisere Google Chrome
Med henblik på artiklen skal vi undersøge, hvordan vi læser Google Mail fra java. Mens Google leverer en API (Application Programming Interface) til at læse mail, bruger vi Selenium i denne artikel til at interagere med Google Mail til at demonstrere processen. Google Mail bruger javascript kraftigt og er derfor en god kandidat til at lære selen.
Opsætning af selen
Web Driver
Som forklaret ovenfor består Selenium af en softwarekomponent, der kører som en separat proces og udfører handlinger på Java-programmets vegne. Denne komponent kaldes Web Driver og skal downloades til din computer.
Klik her for at gå til Selenium-downloadwebstedet, klik på den seneste version og downloade den relevante fil til din computer OS (Windows, Linux eller MacOS). Det er et ZIP-arkiv, der indeholder chromedriver.exe. Ekstraher det til et passende sted, f.eks C: \ WebDrivers \ chromedriver.exe. Vi bruger dette sted senere i java-programmet.
Java-moduler
Det næste trin er at konfigurere de java-moduler, der kræves for at bruge Selenium. Forudsat at du bruger Maven til at opbygge java-programmet, tilføj følgende afhængighed til dit pom.xml.
org.seleniumhq.selen selenium-java 3.8.1
Når du kører build-processen, skal alle de nødvendige moduler downloades og opsættes på din computer.
Selenium første trin
Lad os komme i gang med Selen. Det første trin er at oprette en ChromeDriver eksempel:
WebDriver-driver = ny ChromeDriver ();
Det skal åbne et Google Chrome-vindue. Lad os navigere til Google-søgesiden.
driver.get ( "http://www.google.com");
Få en henvisning til tekstinputelementet, så vi kan udføre en søgning. Tekstinputelementet har navnet q. Vi finder HTML-elementer på siden ved hjælp af metoden WebDriver.findElement ().
WebElement-element = driver.findElement (By.name ("q"));
Du kan sende tekst til ethvert element ved hjælp af metoden SendKeys (). Lad os sende et søgeudtryk og afslutte det med en ny linje, så søgningen begynder straks.
element.sendKeys ( "terminator \ n");
Nu hvor en søgning er i gang, er vi nødt til at vente på resultatsiden. Vi kan gøre det på følgende måde:
ny WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("terminator"));
Denne kode fortæller grundlæggende, at Selenium skal vente i 10 sekunder og vende tilbage, når sidetitlen starter med terminator. Vi bruger en lambda-funktion til at specificere den tilstand, der skal vente på.
Nu kan vi få titlen på siden.
System.out.println ("Titel:" + driver.getTitle ());
Når du er færdig med sessionen, kan browservinduet lukkes med:
driver.quit ();
Og det, folkens, er en simpel browsersession, der styres ved hjælp af java via selen. Synes det er ganske enkelt, men gør det muligt for dig at programmere en masse ting, som du normalt skulle gøre ved hånden.
Brug af Google Chrome Inspector
Google Chrome-inspektør finder ud af problemer med websitet med Chrome-udviklingsværktøjer eller firebug Find ud af problemer med webstedet med Chrome-udviklingsværktøjer eller Firebug Hvis du har fulgt mine jQuery-tutorials indtil videre, har du muligvis allerede fundet nogle kodeproblemer og ikke ved, hvordan du løser dem dem. Når man står over for en ikke-funktionel kodekode, er det meget… et uvurderligt værktøj til at identificere elementer, der skal bruges med Selenium. Det giver os mulighed for at målrette det nøjagtige element fra java til at udtrække oplysninger såvel som en interaktiv handling, såsom at klikke på en knap. Her er en grundlæggende beskrivelse af, hvordan man bruger inspektøren.
Åbn Google Chrome og naviger til en side, siger IMDb-siden til Justice League (2017).
Lad os finde det element, der ønsker at målrette mod, siger filmoversigten. Højreklik på resumeet og vælg “Inspicere” fra popup-menuen.
Fra “elementer” fanen, kan vi se, at resumésteksten er en div med en klasse af summary_text.
Brug af CSS eller XPath til valg
Selenium understøtter valg af elementer fra siden ved hjælp af CSS. (CSS-dialekt understøttet er CSS2). For eksempel for at vælge resumésteksten fra IMDb-siden ovenfor, skriver vi:
WebElement-resumeEl = driver.findElement (By.cssSelector ("div.summary_text"));
Du kan også bruge XPath til at vælge elementer på en meget lignende måde (Gå her for specifikationerne). Igen, for at vælge resumésteksten, gør vi:
WebElement-resumeEl = driver.findElement (By.xpath ("// div [@ class = 'Summary_text']"));
XPath og CSS har lignende muligheder, så du kan bruge det, du er godt tilpas med.
Læsning af Google Mail fra Java
Lad os nu undersøge et mere komplekst eksempel: hentning af Google Mail.
Start Chrome Driver, naviger til gmail.com og vent, indtil siden er indlæst.
WebDriver-driver = ny ChromeDriver (); driver.get ( "https://gmail.com"); ny WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). starterWith ("gmail"));
Derefter skal du kigge efter e-mail-feltet (det navngives med id identifierId) og indtast e-mail-adressen. Klik på Næste -knappen og vent på, at adgangskodesiden indlæses.
/ * Indtast brugernavn / e-mail * / driver.findElement (By.cssSelector ("# identifierId")). SendKeys (e-mail); driver.findElement (By.cssSelector ( "RveJvd.")) klik (.); ny WebDriverWait (driver, 10) .until (d ->! d.findElements (By.xpath ("// div [@ id = 'password']")). isEmpty ());
Nu indtaster vi adgangskoden, klikker på Næste knappen igen og vent til Gmail-siden indlæses.
/ * Indtast adgangskode * / driver .findElement (By.xpath ("// div [@ id = 'password'] // input [@ type = 'password']")) .sendKeys (adgangskode); driver.findElement (By.cssSelector ( "RveJvd.")) klik (.); ny WebDriverWait (driver, 10) .until (d ->! d.findElements (By.xpath ("// div [@ class = 'Cp']")). isEmpty ());
Hent listen over e-mail-rækker og -løkke over hver post.
Liste rækker = driver .findElements (By.xpath ("// div [@ class = 'Cp'] // tabel / tbody / tr")); til (WebElement tr: rækker)
Hent for hver post Fra Mark. Bemærk, at nogle Fra poster kan have flere elementer afhængigt af antallet af personer i samtalen.
/ * Fra element * / System.out.println ("Fra:"); for (WebElement e: tr .findElements (By.xpath (".// div [@ class = 'yW'] / *"))) System.out.println ("" + e.getAttribute ("e-mail") + "," + e.getAttribute ("navn") + "," + e.getText ());
Hent nu emnet.
/ * Emne * / System.out.println ("Sub:" + tr.findElement (By.xpath (".// div [@ class = 'y6']")). GetText ());
Og datoen og tidspunktet for meddelelsen.
/ * Dato / tid * / WebElement dt = tr.findElement (By.xpath ("./ td [8] / *")); System.out.println ("Dato:" + dt.getAttribute ("titel") + "," + dt.getText ());
Her er det samlede antal e-mail-rækker på siden.
System.out.println (rows.size () + "mails.");
Og endelig er vi færdige, så vi afslutter browseren.
driver.quit ();
For at sammenfatte kan du bruge Selenium med Google Chrome til at gennemgå de websteder, der bruger javascript kraftigt. Og med Google Chrome Inspector er det ganske nemt at udarbejde den krævede CSS eller XPath til at udtrække fra eller interagere med et element.
Har du projekter, der drager fordel af at bruge Selenium? Og hvilke problemer står I overfor? Beskriv i kommentarerne nedenfor.