Mainos
Verkkoindeksointi on erittäin hyödyllinen tiettyjen verkkosivustoilla rutiininomaisesti suoritettavien tehtävien automatisoinnissa. Voit kirjoittaa indeksointirobotin olemaan vuorovaikutuksessa verkkosivuston kanssa aivan kuten ihminen tekisi.
Sisään aikaisempi artikkeli Perus-indeksointirobotin rakentaminen tietojen hakemiseksi verkkosivustoltaOletko koskaan halunnut kaapata tietoa verkkosivustolta? Näin kirjoitat indeksointirobotin, jolla voit navigoida verkkosivustolla ja poimia tarvitsemasi. Lue lisää , käsittelimme kirjoittamisen perusteet a verkkoindeksointirobotti Mitä on verkkoraapiminen? Kuinka kerätä tietoja verkkosivustoiltaOletko koskaan huomannut, että menetät arvokasta aikaa verkkosivujen tietojen lukemiseen? Näin löydät haluamasi tiedot verkkokaappauksen avulla. Lue lisää käyttämällä python-moduulia, scrapy. Tämän lähestymistavan rajoitus on, että indeksointirobotti ei tue JavaScriptiä. Se ei toimi kunnolla niiden verkkosivustojen kanssa, jotka käyttävät paljon JavaScriptiä käyttöliittymän hallintaan. Tällaisissa tilanteissa voit kirjoittaa indeksointirobotin, joka käyttää Google Chromea ja pystyy siten käsittelemään javascriptiä aivan kuten tavallinen käyttäjälähtöinen Chrome-selain.
Google Chromen automatisointiin kuuluu työkalun käyttö Seleeni. Se on ohjelmistokomponentti, joka sijaitsee ohjelman ja selaimen välissä ja auttaa sinua ajamaan selainta ohjelman läpi. Tässä artikkelissa käymme läpi koko Google Chromen automatisointiprosessin. Vaiheet sisältävät yleensä:
- Seleenin asettaminen
- Google Chrome Inspectorin käyttäminen verkkosivun osien tunnistamiseen
- Java-ohjelman kirjoittaminen Google Chromen automatisoimiseksi
Artikkelin tarkoitusta varten meidän on tutkittava, kuinka lukea Google Mailia javasta. Vaikka Google tarjoaa API: n (Application Programming Interface) sähköpostin lukemiseen, tässä artikkelissa käytämme Seleniumia vuorovaikutuksessa Google Mailin kanssa prosessin esittelyssä. Google Mail käyttää paljon javascriptiä ja on siten hyvä ehdokas seleenin oppimiseen.
Seleenin asettaminen
Web-ajuri
Kuten edellä selitettiin, Seleeni koostuu ohjelmistokomponentista, joka toimii erillisenä prosessina ja suorittaa toimintoja Java-ohjelman puolesta. Tätä komponenttia kutsutaan Web-ajuri ja se on ladattava tietokoneellesi.
Klikkaa tästä Siirry Selenium-lataussivustolle napsauttamalla viimeisintä julkaisua ja lataa tietokoneesi käyttöjärjestelmälle (Windows, Linux tai MacOS) sopiva tiedosto. Se on ZIP-arkisto, joka sisältää chromedriver.exe. Pura se sopivaan paikkaan, esim C:\WebDrivers\chromedriver.exe. Käytämme tätä sijaintia myöhemmin java-ohjelmassa.
Java moduulit
Seuraava vaihe on Seleniumin käyttöön tarvittavien java-moduulien määrittäminen. Olettaen, että käytät Mavenia Java-ohjelman rakentamiseen, lisää seuraava riippuvuus POM.xml.
org.seleniumhq.selenium seleeni-java 3.8.1
Kun suoritat rakennusprosessin, kaikki tarvittavat moduulit tulee ladata ja määrittää tietokoneellesi.
Seleeni ensimmäiset askeleet
Aloitetaan seleenin kanssa. Ensimmäinen askel on luoda a ChromeDriver ilmentymä:
WebDriver-ohjain = uusi ChromeDriver();
Tämän pitäisi avata Google Chrome -ikkuna. Siirrytään Googlen hakusivulle.
driver.get(" http://www.google.com");
Hanki viittaus tekstinsyöttöelementtiin, jotta voimme suorittaa haun. Tekstinsyöttöelementillä on nimi q. Etsimme HTML-elementtejä sivulta menetelmällä WebDriver.findElement().
WebElement-elementti = driver.findElement (By.name("q"));
Voit lähettää tekstiä mihin tahansa elementtiin menetelmällä sendKeys(). Lähetämme hakusanan ja lopetamme sen rivinvaihdolla, jotta haku alkaa välittömästi.
element.sendKeys("pääte\n");
Nyt kun haku on käynnissä, meidän on odotettava tulossivua. Voimme tehdä sen seuraavasti:
new WebDriverWait (ohjain, 10) .until (d -> d.getTitle().toLowerCase().startsWith("pääte"));
Tämä koodi periaatteessa käskee Seleniumia odottamaan 10 sekuntia ja palaamaan, kun sivun otsikko alkaa terminaattori. Käytämme lambda-funktiota määrittääksemme odottavan ehdon.
Nyt saamme sivun otsikon.
System.out.println("Otsikko: " + driver.getTitle());
Kun istunto on valmis, selainikkuna voidaan sulkea seuraavilla tavoilla:
driver.quit();
Ja se, ihmiset, on yksinkertainen selainistunto, jota ohjataan javalla seleenin kautta. Vaikuttaa melko yksinkertaiselta, mutta sen avulla voit ohjelmoida monia asioita, jotka normaalisti sinun pitäisi tehdä käsin.
Google Chrome Inspectorin käyttö
Google Chrome Inspector Selvitä sivustoon liittyvät ongelmat Chrome-kehittäjätyökalujen tai Firebugin kanssaJos olet toistaiseksi seurannut jQuery-opetusohjelmiani, olet ehkä jo törmännyt joihinkin koodiongelmiin etkä tiedä kuinka korjata ne. Kun kohtaat toimimattoman koodin, se on erittäin... Lue lisää on korvaamaton työkalu seleenin kanssa käytettävien elementtien tunnistamiseen. Sen avulla voimme kohdistaa tarkan elementin Javasta tiedon poimimiseen sekä interaktiiviseen toimintoon, kuten painikkeen napsautukseen. Tässä on opas Inspectorin käyttöön.
Avaa Google Chrome ja siirry sivulle, esimerkiksi IMDb-sivulle Justice League (2017).
Etsitään elementti, johon haluat kohdistaa, sano elokuvan yhteenveto. Napsauta yhteenvetoa hiiren kakkospainikkeella ja valitse ponnahdusvalikosta "Tarkista".
"Elementit"-välilehdeltä näemme, että yhteenvetoteksti on a div luokan kanssa yhteenveto_teksti.
CSS: n tai XPathin käyttö valinnassa
Selenium tukee elementtien valintaa sivulta CSS: n avulla. (CSS-murre tuettu on CSS2). Jos esimerkiksi valitaan yhteenvetoteksti yllä olevalta IMDb-sivulta, kirjoitamme:
WebElement summaryEl = driver.findElement (By.cssSelector("div.summary_text"));
Voit myös käyttää XPathia elementtien valitsemiseen hyvin samalla tavalla (Go tässä tekniset tiedot). Jälleen valitaksesi yhteenvetotekstin, toimisimme seuraavasti:
WebElement summaryEl = driver.findElement (By.xpath("//div[@class='summary_text']"));
XPathilla ja CSS: llä on samanlaiset ominaisuudet, joten voit käyttää kumpaa tahansa.
Google Mailin lukeminen Javasta
Tarkastellaan nyt monimutkaisempaa esimerkkiä: Google Mailin hakemista.
Käynnistä Chrome-ajuri, siirry osoitteeseen gmail.com ja odota, kunnes sivu latautuu.
WebDriver-ohjain = uusi ChromeDriver(); driver.get(" https://gmail.com"); new WebDriverWait (ohjain, 10) .until (d -> d.getTitle().toLowerCase().startsWith("gmail"));
Etsi seuraavaksi sähköpostikenttä (se on nimetty tunnuksella identifierId) ja anna sähköpostiosoite. Klikkaa Seuraava -painiketta ja odota salasanasivun latautumista.
/* Kirjoita käyttäjänimi/sähköpostiosoite */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (sähköposti); driver.findElement (By.cssSelector(".RveJvd")).click(); } uusi WebDriverWait (ohjain, 10) .until (d ->! d.findElements (By.xpath("//div[@id='salasana']")).isEmpty() );
Nyt annamme salasanan, napsauta Seuraava -painiketta uudelleen ja odota, että Gmail-sivu latautuu.
/* Kirjoita salasana */ { ohjain .findElement (By.xpath("//div[@id='salasana']//input[@type='salasana']")) .sendKeys (salasana); driver.findElement (By.cssSelector(".RveJvd")).click(); } uusi WebDriverWait (ohjain, 10) .until (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );
Hae sähköpostirivien luettelo ja siirry jokaisen merkinnän päälle.
Listarivit = kuljettaja .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: rivit) { }
Hae jokaisen merkinnän kohdalla From ala. Huomaa, että joissakin From-merkinnöissä voi olla useita elementtejä keskustelussa olevien ihmisten lukumäärän mukaan.
{ /* Elementistä */ System.out.println("Lähettäjä: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("nimi") + ", " + e.getText()); } }
Hae nyt aihe.
{ /* Aihe */ System.out.println("Ali: " + tr.findElement (By.xpath(".//div[@class='yNN']")).getText()); }
Ja viestin päivämäärä ja kellonaika.
{ /* Päivämäärä/aika */ WebElement dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Päivämäärä: " + dt.getAttribute("otsikko") + ", " + dt.getText()); }
Tässä on sivun sähköpostirivien kokonaismäärä.
System.out.println (rows.size() + " sähköpostit.");
Ja lopuksi olemme valmiita, joten suljemme selaimen.
driver.quit();
Yhteenvetona totean, että voit käyttää Seleniumia Google Chromen kanssa sellaisten verkkosivustojen indeksointiin, jotka käyttävät paljon JavaScriptiä. Ja Google Chrome Inspectorin avulla on melko helppoa selvittää tarvittava CSS tai XPath elementistä poimimiseen tai vuorovaikutukseen elementin kanssa.
Onko sinulla projekteja, jotka hyötyvät Seleenin käytöstä? Ja mitä ongelmia sinulla on sen kanssa? Ole hyvä ja kuvaile alla olevissa kommenteissa.