reklama
Procházení webu je mimořádně užitečné pro automatizaci určitých úloh běžně prováděných na webových stránkách. Můžete napsat prohledávač pro interakci s webem stejně jako člověk.
v dřívější článek Jak vytvořit základní webový prohledávač pro získávání informací z webuChtěli jste někdy zachytit informace z webových stránek? Zde je návod, jak napsat prohledávač pro navigaci na webu a extrahování toho, co potřebujete. Přečtěte si více , probrali jsme základy psaní a webcrawler Co je škrábání webu? Jak sbírat data z webových stránekPřistihli jste se někdy, že ztrácíte drahocenný čas čtením dat na webových stránkách? Zde je návod, jak pomocí webového scrapingu najít požadovaná data. Přečtěte si více pomocí modulu python, scrapy. Omezení tohoto přístupu spočívá v tom, že prohledávač nepodporuje javascript. Nebude správně fungovat s těmi webovými stránkami, které intenzivně využívají javascript ke správě uživatelského rozhraní. Pro takové situace můžete napsat prohledávač, který používá Google Chrome, a proto zvládne javascript stejně jako běžný uživatelsky řízený prohlížeč Chrome.
Automatizace Google Chrome zahrnuje použití nástroje tzv Selen. Jedná se o softwarovou komponentu, která je umístěna mezi vaším programem a prohlížečem a pomáhá vám ovládat prohlížeč vaším programem. V tomto článku vás provedeme celým procesem automatizace prohlížeče Google Chrome. Kroky obecně zahrnují:
- Nastavení selenu
- Použití Google Chrome Inspector k identifikaci částí webové stránky
- Psaní java programu pro automatizaci Google Chrome
Pro účely tohoto článku se podívejme, jak číst Google Mail z Java. I když Google poskytuje API (Application Programming Interface) pro čtení pošty, v tomto článku používáme Selenium k interakci s Google Mail za účelem předvedení procesu. Google Mail intenzivně využívá javascript, a je tedy dobrým kandidátem na učení se selenu.
Nastavení selenu
Webový ovladač
Jak je vysvětleno výše, Selen sestává ze softwarové komponenty, která běží jako samostatný proces a provádí akce jménem java programu. Tato složka se nazývá Webový ovladač a musí být stažen do vašeho počítače.
Klikněte zde Chcete-li přejít na stránku stahování Selenium, klikněte na nejnovější verzi a stáhněte si příslušný soubor pro operační systém vašeho počítače (Windows, Linux nebo MacOS). Jedná se o ZIP archiv obsahující chromedriver.exe. Extrahujte jej na vhodné místo, např C:\WebDrivers\chromedriver.exe. Toto umístění použijeme později v programu Java.
Java moduly
Dalším krokem je nastavení java modulů potřebných k používání Selenium. Za předpokladu, že používáte Maven k sestavení programu Java, přidejte do svého programu následující závislost POM.xml.
org.seleniumhq.selenium selen-java 3.8.1
Když spustíte proces sestavení, všechny požadované moduly by měly být staženy a nastaveny na vašem počítači.
První kroky selenu
Začněme se selenem. Prvním krokem je vytvoření a ChromeDriver instance:
Ovladač WebDriver = nový ChromeDriver();
Tím by se mělo otevřít okno Google Chrome. Přejdeme na stránku vyhledávání Google.
driver.get(" http://www.google.com");
Získejte odkaz na prvek pro zadávání textu, abychom mohli provést vyhledávání. Prvek pro zadávání textu má název q. Pomocí metody lokalizujeme prvky HTML na stránce WebDriver.findElement().
Element WebElement = driver.findElement (By.name("q"));
Pomocí této metody můžete odeslat text libovolnému prvku sendKeys(). Odešleme hledaný výraz a ukončíme jej novým řádkem, aby vyhledávání začalo okamžitě.
element.sendKeys("terminátor\n");
Nyní, když probíhá vyhledávání, musíme počkat na stránku s výsledky. Můžeme to udělat následovně:
nový WebDriverWait (ovladač, 10) .until (d -> d.getTitle().toLowerCase().startsWith("terminátor"));
Tento kód v podstatě říká Selenu, aby počkal 10 sekund a vrátil se, když název stránky začíná terminátor. K určení podmínky čekání používáme funkci lambda.
Nyní můžeme získat název stránky.
System.out.println("Titul: " + driver.getTitle());
Po dokončení relace lze okno prohlížeče zavřít pomocí:
driver.quit();
A to, lidi, je jednoduchá relace prohlížeče ovládaná pomocí Java přes selen. Vypadá to docela jednoduše, ale umožňuje vám naprogramovat spoustu věcí, které byste normálně museli dělat ručně.
Pomocí Google Chrome Inspector
Google Chrome Inspector Zjistěte problémy s webovými stránkami pomocí nástrojů pro vývojáře Chrome nebo FirebugPokud jste doposud sledovali mé návody jQuery, možná jste již narazili na nějaké problémy s kódem a nevíte, jak je opravit. Když čelíte nefunkčnímu kousku kódu, je to velmi... Přečtěte si více je neocenitelným nástrojem k identifikaci prvků, které se mají použít se selenem. Umožňuje nám zacílit přesný prvek z javy pro extrakci informací a také interaktivní akci, jako je kliknutí na tlačítko. Zde je základní informace o tom, jak používat Inspektor.
Otevřete Google Chrome a přejděte na stránku, řekněte stránku IMDb pro Liga spravedlnosti (2017).
Pojďme najít prvek, na který chceme cílit, řekněme shrnutí filmu. Klikněte pravým tlačítkem na souhrn a z vyskakovací nabídky vyberte „Prozkoumat“.
Na kartě „Prvky“ vidíme, že souhrnný text je a div s třídou souhrnný_text.
Použití CSS nebo XPath pro výběr
Selenium podporuje výběr prvků ze stránky pomocí CSS. (Je podporován dialekt CSS CSS2). Chcete-li například vybrat souhrnný text ze stránky IMDb výše, napsali bychom:
WebElement SummaryEl = driver.findElement (By.cssSelector("div.summary_text"));
Můžete také použít XPath k výběru prvků velmi podobným způsobem (Go tady pro specifikace). Opět, abychom vybrali souhrnný text, udělali bychom:
WebElement SummaryEl = driver.findElement (By.xpath("//div[@class='summary_text']"));
XPath a CSS mají podobné možnosti, takže můžete použít, co vám vyhovuje.
Čtení Google Mail z Javy
Podívejme se nyní na složitější příklad: načítání pošty Google.
Spusťte ovladač Chrome, přejděte na gmail.com a počkejte, dokud se stránka nenačte.
Ovladač WebDriver = nový ChromeDriver(); driver.get(" https://gmail.com"); nový WebDriverWait (ovladač, 10) .until (d -> d.getTitle().toLowerCase().startsWith("gmail"));
Dále vyhledejte pole e-mailu (je pojmenováno pomocí id identifierId) a zadejte e-mailovou adresu. Klikněte na další a počkejte, až se načte stránka s heslem.
/* Zadejte uživatelské jméno/e-mail */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (e-mail); driver.findElement (By.cssSelector(".RveJvd")).click(); } nový WebDriverWait (ovladač, 10) .until (d ->! d.findElements (By.xpath("//div[@id='heslo']")).isEmpty() );
Nyní zadáme heslo a klikneme na další znovu a počkejte, až se stránka Gmail načte.
/* Zadejte heslo */ { driver .findElement (By.xpath("//div[@id='heslo']//input[@type='password']")) .sendKeys (heslo); driver.findElement (By.cssSelector(".RveJvd")).click(); } nový WebDriverWait (ovladač, 10) .until (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );
Načtěte seznam e-mailových řádků a opakujte každý záznam.
Seznamrows = driver .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: řádky) { }
Pro každý záznam stáhněte Z pole. Všimněte si, že některé položky Od mohou mít více prvků v závislosti na počtu lidí v konverzaci.
{ /* Od prvku */ System.out.println("Od: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("e-mail") + ", " + e.getAttribute("jméno") + ", " + e.getText()); } }
Teď si vyzvedněte předmět.
{ /* Předmět */ System.out.println("Sub: " + tr.findElement (By.xpath(.//div[@class='yNN']")).getText()); }
A datum a čas zprávy.
{ /* Datum/Čas */ WebElement dt = tr.findElement (By.xpath(./td[8]/*")); System.out.println("Datum: " + dt.getAttribute("title") + ", " + dt.getText()); }
Zde je celkový počet e-mailových řádků na stránce.
System.out.println (rows.size() + "maily.");
A nakonec jsme hotovi, takže ukončíme prohlížeč.
driver.quit();
Abychom to zrekapitulovali, můžete použít Selenium s Google Chrome k procházení těch webových stránek, které intenzivně využívají javascript. A pomocí Google Chrome Inspector je docela snadné vypracovat požadovaný CSS nebo XPath pro extrahování z prvku nebo interakci s prvkem.
Máte nějaké projekty, které těží z používání selenu? A jaké problémy s tím máte? Popište prosím v komentářích níže.