Reklaam

Veebiindekseerimine on äärmiselt kasulik teatud veebisaitidel rutiinselt tehtavate toimingute automatiseerimiseks. Saate kirjutada roomaja, et veebisaidiga suhelda täpselt nagu inimene.

sisse varasem artikkel Kuidas luua põhiline veebiroomik, mis võimaldab veebisaidilt teavet hankidaKas olete kunagi tahtnud veebisaidilt teavet jäädvustada? Siit saate teada, kuidas kirjutada veebisaidil navigeerimiseks ja vajaliku väljavõtmiseks roomaja. Loe rohkem , käsitlesime kirjutamise põhitõdesid a veebiroomaja Mis on veebikraapimine? Kuidas veebisaitidelt andmeid kogudaKas olete kunagi avastanud, et kaotate väärtuslikku aega veebilehtede andmete lugemisel? Siit saate teada, kuidas veebikraapimisega soovitud andmeid leida. Loe rohkem kasutades pythoni moodulit, scrapy. Selle lähenemisviisi piirang seisneb selles, et roomaja ei toeta JavaScripti. See ei tööta korralikult nende veebisaitidega, mis kasutavad kasutajaliidese haldamiseks palju JavaScripti. Selliste olukordade jaoks saate kirjutada roomaja, mis kasutab Google Chrome'i ja saab seega hakkama JavaScriptiga nagu tavaline kasutaja juhitav Chrome'i brauser.

instagram viewer

Google Chrome'i automatiseerimine hõlmab tööriista nimega Seleen. See on tarkvarakomponent, mis asub teie programmi ja brauseri vahel ning aitab teil brauserit programmi kaudu juhtida. Selles artiklis tutvustame teid Google Chrome'i automatiseerimise täielikul protsessil. Tavaliselt hõlmavad sammud järgmist:

  • Seleeni seadistamine
  • Google Chrome Inspectori kasutamine veebilehe jaotiste tuvastamiseks
  • Java programmi kirjutamine Google Chrome'i automatiseerimiseks

Artikli tarbeks uurime, kuidas Google Maili javast lugeda. Kuigi Google pakub meilide lugemiseks API-t (Application Programming Interface), kasutame selles artiklis Google Mailiga suhtlemiseks protsessi demonstreerimiseks Seleeni. Google Mail kasutab palju javascripti ja on seega hea kandidaat seleeni õppimiseks.

Seleeni seadistamine

Veebidraiver

Nagu eespool selgitatud, Seleen koosneb tarkvarakomponendist, mis töötab eraldi protsessina ja teeb toiminguid java programmi nimel. Seda komponenti nimetatakse Veebidraiver ja see tuleb arvutisse alla laadida.

Kliki siia Seleniumi allalaadimissaidile minemiseks klõpsake uusimal versioonil ja laadige alla oma arvuti OS-i (Windows, Linux või MacOS) jaoks sobiv fail. See on ZIP-arhiiv, mis sisaldab chromedriver.exe. Ekstraheerige see sobivasse kohta, näiteks C:\WebDrivers\chromedriver.exe. Kasutame seda asukohta hiljem java programmis.

Java moodulid

Järgmine samm on Seleniumi kasutamiseks vajalike java moodulite seadistamine. Eeldades, et kasutate Java-programmi koostamiseks Mavenit, lisage omale järgmine sõltuvus POM.xml.

org.seleniumhq.seleniumseleen-java3.8.1

Koostamisprotsessi käivitamisel tuleks kõik vajalikud moodulid alla laadida ja arvutisse seadistada.

Seleeni esimesed sammud

Alustame seleeniga. Esimene samm on luua a ChromeDriver näide:

WebDriver draiver = uus ChromeDriver(); 

See peaks avama Google Chrome'i akna. Liigume Google'i otsingulehele.

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

Hankige viide tekstisisestuselemendile, et saaksime otsida. Tekstisisestuselemendil on nimi q. Leiame lehel HTML-i elemendid meetodi abil WebDriver.findElement().

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

Selle meetodi abil saate teksti saata mis tahes elemendile sendKeys(). Saadame otsingusõna ja lõpetame selle reavahetusega, nii et otsing algab kohe.

element.sendKeys("terminaator\n"); 

Nüüd, kui otsing on pooleli, peame ootama tulemuste lehte. Saame seda teha järgmiselt:

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

Põhimõtteliselt käsib see kood Seleniumil 10 sekundit oodata ja naasta, kui lehe pealkiri algab terminaator. Oodatava tingimuse määramiseks kasutame lambda-funktsiooni.

Nüüd saame lehe pealkirja.

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

Kui olete seansi lõpetanud, saate brauseriakna sulgeda järgmisega:

driver.quit(); 

Ja see, inimesed, on lihtne brauseri seanss, mida juhitakse seleeni kaudu Java abil. Tundub üsna lihtne, kuid võimaldab teil programmeerida palju asju, mida tavaliselt peaksite käsitsi tegema.

Google Chrome Inspectori kasutamine

Google Chrome'i inspektor Selgitage välja veebisaidi probleemid Chrome'i arendaja tööriistade või FirebugigaKui olete siiani jälginud minu jQuery õpetusi, võib teil olla juba tekkinud koodiprobleeme ja te ei tea, kuidas neid parandada. Kui puutute kokku mittefunktsionaalse koodibitiga, on see väga... Loe rohkem on hindamatu tööriist seleeniga kasutatavate elementide tuvastamiseks. See võimaldab meil sihtida Java-st täpset elementi teabe hankimiseks ja interaktiivseks toiminguks, näiteks nupul klõpsamiseks. Siin on aabits inspektori kasutamise kohta.

Avage Google Chrome ja navigeerige lehele, öelge, et IMDb leht Justice League (2017).

Otsige üles element, mida soovite sihtida, öelge filmi kokkuvõte. Paremklõpsake kokkuvõtet ja valige hüpikmenüüst "Inspekteeri".

kuidas teha seleeniga veebiroomajat

Vahekaardilt „Elemendid” näeme, et kokkuvõtlik tekst on a div klassiga kokkuvõte_tekst.

kuidas teha seleeniga veebiroomajat

CSS-i või XPathi kasutamine valimiseks

Seleen toetab lehelt elementide valimist CSS-i abil. (CSS-i dialekti toetatakse CSS2). Näiteks kokkuvõtliku teksti valimiseks ülaltoodud IMDb lehelt kirjutaksime:

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

Samuti saate XPathi kasutada elementide valimiseks väga sarnasel viisil (Go siin tehniliste andmete jaoks). Jällegi, kokkuvõtliku teksti valimiseks teeme järgmist:

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

XPathil ja CSS-il on sarnased võimalused, nii et saate kasutada seda, mis teile sobib.

Google Maili lugemine Javast

Vaatame nüüd keerukamat näidet: Google Maili toomine.

Käivitage Chrome'i draiver, liikuge aadressile gmail.com ja oodake, kuni leht laaditakse.

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

Järgmisena otsige e-posti välja (selle nimi on ID identifikaatorId) ja sisestage e-posti aadress. Klõpsake nuppu Edasi nuppu ja oodake, kuni paroolileht laaditakse.

/* Sisesta kasutajanimi/e-post */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (e-post); driver.findElement (By.cssSelector(".RveJvd")).click(); } uus WebDriverWait (draiver, 10) .until (d ->! d.findElements (By.xpath("//div[@id='parool']")).isEmpty() );

Nüüd sisestame parooli, klõpsake nuppu Edasi nuppu uuesti ja oodake, kuni Gmaili leht laaditakse.

/* Sisesta parool */ { draiver .findElement (By.xpath("//div[@id='password']//input[@type='password']")) .sendKeys (parool); driver.findElement (By.cssSelector(".RveJvd")).click(); } uus WebDriverWait (draiver, 10) .until (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );

Hankige meiliridade loend ja liikuge üle iga kirje.

Nimekiriread = draiver .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: read) { }

Iga kirje jaoks hankige Alates valdkonnas. Pange tähele, et mõnel kirjel From võib sõltuvalt vestluses osalevate inimeste arvust olla mitu elementi.

{ /* Elemendist */ System.out.println("Alates: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("nimi") + ", " + e.getText()); } }

Võta nüüd teema üles.

{ /* Teema */ System.out.println("Sub: " + tr.findElement (By.xpath(".//div[@class='yNN']")).getText()); }

Ja sõnumi kuupäev ja kellaaeg.

{ /* Kuupäev/kellaaeg */ WebElement dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Kuupäev: " + dt.getAttribute("pealkiri") + ", " + dt.getText()); }

Siin on e-kirjade ridade koguarv lehel.

System.out.println (rows.size() + " kirjad."); 

Ja lõpuks oleme valmis, nii et sulgeme brauseri.

driver.quit(); 

Kokkuvõtteks võite kasutada Seleniumi koos Google Chrome'iga nende veebisaitide roomamiseks, mis kasutavad palju JavaScripti. Ja Google Chrome Inspectoriga on üsna lihtne välja töötada vajalik CSS või XPath, et elemendist ekstraktida või sellega suhelda.

Kas teil on projekte, mis saavad seleeni kasutamisest kasu? Ja milliste probleemidega te sellega silmitsi seisate? Palun kirjeldage allolevates kommentaarides.