Реклама

Уеб обхождането е изключително полезно за автоматизиране на определени задачи, изпълнявани рутинно на уебсайтове. Можете да напишете робот, който да взаимодейства с уебсайт точно както би направил човек.

В по-ранна статия Как да създадете основен уеб робот за изтегляне на информация от уебсайтИскали ли сте някога да улавяте информация от уебсайт? Ето как да напишете робот, който да навигира в уебсайт и да извлича това, от което се нуждаете. Прочетете още , разгледахме основите на писането на a уебкраун Какво е Web Scraping? Как да събираме данни от уебсайтовеСлучвало ли ви се е да губите ценно време за четене на данни в уеб страници? Ето как да намерите данните, които искате с уеб изстъргване. Прочетете още използвайки модула python, scrapy. Ограничението на този подход е, че роботът не поддържа javascript. Той няма да работи правилно с тези уебсайтове, които използват силно javascript за управление на потребителския интерфейс. За такива ситуации можете да напишете робот, който използва Google Chrome и следователно може да обработва javascript точно като обикновен браузър Chrome, управляван от потребителя.

instagram viewer

Автоматизирането на Google Chrome включва използването на инструмент, наречен Селен. Това е софтуерен компонент, който се намира между вашата програма и браузъра и ви помага да управлявате браузъра през вашата програма. В тази статия ще ви преведем през пълния процес на автоматизиране на Google Chrome. Стъпките обикновено включват:

  • Настройка на Selenium
  • Използване на Google Chrome Inspector за идентифициране на секции от уеб страницата
  • Написване на java програма за автоматизиране на Google Chrome

За целите на статията, нека да проучим как да четем Google Mail от java. Въпреки че Google предоставя API (интерфейс за програмиране на приложения) за четене на поща, в тази статия използваме Selenium за взаимодействие с Google Mail за демонстриране на процеса. Google Mail използва силно javascript и по този начин е добър кандидат за изучаване на Selenium.

Настройка на Selenium

Уеб драйвер

Както беше обяснено по-горе, Селен се състои от софтуерен компонент, който работи като отделен процес и изпълнява действия от името на java програмата. Този компонент се нарича Уеб драйвер и трябва да бъдат изтеглени на вашия компютър.

Натисни тук за да отидете на сайта за изтегляне на Selenium, щракнете върху най-новата версия и изтеглете съответния файл за операционната система на вашия компютър (Windows, Linux или MacOS). Това е ZIP архив, съдържащ chromedriver.exe. Извлечете го на подходящо място, като напр C:\WebDrivers\chromedriver.exe. Ще използваме това местоположение по-късно в java програмата.

Java модули

Следващата стъпка е да настроите java модулите, необходими за използване на Selenium. Ако приемем, че използвате Maven за изграждане на java програмата, добавете следната зависимост към вашата POM.xml.

org.seleniumhq.seleniumселен-java3.8.1

Когато стартирате процеса на изграждане, всички необходими модули трябва да бъдат изтеглени и настроени на вашия компютър.

Селен Първи стъпки

Нека започнем със Selenium. Първата стъпка е да създадете a ChromeDriver пример:

Драйвер за уеб драйвер = нов ChromeDriver(); 

Това трябва да отвори прозорец на Google Chrome. Нека отидем до страницата за търсене в Google.

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

Получете препратка към елемента за въвеждане на текст, за да можем да извършим търсене. Елементът за въвеждане на текст има име q. Намираме HTML елементи на страницата с помощта на метода WebDriver.findElement().

WebElement елемент = driver.findElement (По.име("q")); 

Можете да изпратите текст до всеки елемент, като използвате метода sendKeys(). Нека изпратим термин за търсене и да го завършим с нов ред, така че търсенето да започне незабавно.

element.sendKeys("терминатор\n"); 

Сега, когато търсенето е в ход, трябва да изчакаме страницата с резултати. Можем да направим това по следния начин:

нов WebDriverWait (драйвер, 10) .until (d -> d.getTitle().toLowerCase().startsWith("terminator")); 

Този код основно казва на Selenium да изчака 10 секунди и да се върне, когато заглавието на страницата започне с терминатор. Използваме ламбда функция, за да посочим условието, което да чакаме.

Сега можем да получим заглавието на страницата.

System.out.println("Заглавие: " + driver.getTitle()); 

След като приключите със сесията, прозорецът на браузъра може да бъде затворен с:

driver.quit(); 

И това, хора, е проста сесия на браузъра, контролирана с помощта на Java чрез selenium. Изглежда доста просто, но ви позволява да програмирате много неща, които обикновено трябва да правите на ръка.

Използване на Google Chrome Inspector

Инспектор на Google Chrome Разберете проблеми с уебсайта с инструменти за разработчици на Chrome или FirebugАко досега сте следвали моите уроци по jQuery, може би вече сте се сблъсквали с някои проблеми с кода и не знаете как да ги поправите. Когато се сблъскате с нефункционален бит код, това е много... Прочетете още е безценен инструмент за идентифициране на елементи, които да се използват със Selenium. Позволява ни да се насочим към точния елемент от java за извличане на информация, както и интерактивно действие, като щракване върху бутон. Ето пример за това как да използвате инспектора.

Отворете Google Chrome и отидете на страница, кажете страницата на IMDb за Лигата на справедливостта (2017).

Нека намерим елемента, към който искате да се насочите, да кажем резюмето на филма. Щракнете с десния бутон върху резюмето и изберете „Проверка“ от изскачащото меню.

как да направите уеб робот със селен

От раздела „Елементи“ можем да видим, че текстът на обобщението е a раздел с клас от summary_text.

как да направите уеб робот със селен

Използване на CSS или XPath за избор

Selenium поддържа избор на елементи от страницата с помощта на CSS. (Поддържаният CSS диалект е CSS2). Например, за да изберете обобщения текст от страницата на IMDb по-горе, бихме написали:

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

Можете също да използвате XPath, за да изберете елементи по много подобен начин (Go тук за спецификациите). Отново, за да изберем обобщения текст, ще направим:

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

XPath и CSS имат подобни възможности, така че можете да използвате каквото ви е удобно.

Четене на Google Mail от Java

Нека сега разгледаме по-сложен пример: извличане на Google Mail.

Стартирайте драйвера на Chrome, отидете до gmail.com и изчакайте, докато страницата се зареди.

Драйвер за уеб драйвер = нов ChromeDriver(); driver.get(" https://gmail.com"); нов WebDriverWait (драйвер, 10) .until (d -> d.getTitle().toLowerCase().startsWith("gmail")); 

След това потърсете полето за имейл (то е именувано с id identifierId) и въведете имейл адреса. Щракнете върху Следващия и изчакайте страницата с парола да се зареди.

/* Въведете потребителско име/имейл */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (имейл); driver.findElement (By.cssSelector(.RveJvd")).click(); } нов WebDriverWait (драйвер, 10) .until (d ->! d.findElements (By.xpath("//div[@id='password']")).isEmpty() );

Сега въвеждаме паролата, щракваме върху Следващия натиснете отново и изчакайте страницата на Gmail да се зареди.

/* Въведете парола */ { драйвер .findElement (By.xpath("//div[@id='password']//input[@type='password']")) .sendKeys (парола); driver.findElement (By.cssSelector(.RveJvd")).click(); } нов WebDriverWait (драйвер, 10) .until (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );

Извадете списъка с редове за имейли и превъртете всеки запис.

Списъкrows = driver .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: rows) { }

За всеки запис изтеглете От поле. Имайте предвид, че някои записи From могат да имат множество елементи в зависимост от броя на хората в разговора.

{ /* От елемент */ System.out.println("От: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("name") + ", " + e.getText()); } }

Сега вземете темата.

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

И датата и часа на съобщението.

{ /* Дата/Час */ WebElement dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Дата: " + dt.getAttribute("title") + ", " + dt.getText()); }

Ето общия брой имейл редове на страницата.

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

И накрая, приключихме, така че напуснахме браузъра.

driver.quit(); 

За да обобщим, можете да използвате Selenium с Google Chrome за обхождане на тези уебсайтове, които използват силно javascript. А с Google Chrome Inspector е доста лесно да изработите необходимия CSS или XPath за извличане от или взаимодействие с елемент.

Имате ли проекти, които се възползват от използването на Selenium? И какви проблеми се сблъсквате с него? Моля, опишете в коментарите по-долу.