Рекламное объявление
Веб-сканирование чрезвычайно полезно для автоматизации определенных задач, которые обычно выполняются на веб-сайтах. Вы можете написать поискового робота, который будет взаимодействовать с веб-сайтом так же, как это сделал бы человек.
В предыдущая статья Как создать простой веб-сканер для получения информации с веб-сайтаВы когда-нибудь хотели получить информацию с веб-сайта? Вот как написать поискового робота для навигации по веб-сайту и извлечения того, что вам нужно. Подробнее , мы рассмотрели основы написания веб-сканер Что такое веб-парсинг? Как собирать данные с веб-сайтовВы когда-нибудь теряли драгоценное время, читая данные на веб-страницах? Вот как найти нужные данные с помощью веб-скрейпинга. Подробнее используя модуль python scrapy. Ограничение этого подхода состоит в том, что поисковый робот не поддерживает javascript. Он не будет работать должным образом с теми веб-сайтами, которые интенсивно используют javascript для управления пользовательским интерфейсом. Для таких ситуаций вы можете написать сканер, который использует Google Chrome и, следовательно, может обрабатывать javascript так же, как обычный пользовательский браузер Chrome.
Автоматизация 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 селен-Java 3.8.1
Когда вы запустите процесс сборки, все необходимые модули должны быть загружены и установлены на вашем компьютере.
Селен: первые шаги
Давайте начнем с Selenium. Первый шаг - создать ChromeDriver пример:
Драйвер WebDriver = новый ChromeDriver ();
Это должно открыть окно Google Chrome. Давайте перейдем на страницу поиска Google.
driver.get (" http://www.google.com");
Получите ссылку на элемент ввода текста, чтобы мы могли выполнить поиск. Элемент ввода текста имеет имя q. Мы размещаем HTML-элементы на странице с помощью метода WebDriver.findElement ().
WebElement element = driver.findElement (By.name ("q"));
Вы можете отправить текст в любой элемент с помощью метода sendKeys (). Давайте отправим поисковый запрос и закончим его новой строкой, чтобы поиск начался немедленно.
element.sendKeys ("терминатор \ п");
Теперь, когда поиск продолжается, нам нужно дождаться страницы результатов. Мы можем сделать это следующим образом:
новый WebDriverWait (драйвер, 10) .until (d -> d.getTitle (). toLowerCase (). startWith ("терминатор"));
Этот код в основном сообщает Selenium ждать 10 секунд и возвращаться, когда заголовок страницы начинается с терминатор. Мы используем лямбда-функцию, чтобы указать условие ожидания.
Теперь мы можем получить заголовок страницы.
System.out.println ("Название:" + driver.getTitle ());
После завершения сеанса окно браузера можно закрыть с помощью:
driver.quit ();
И это, ребята, простой сеанс браузера, управляемый с помощью java через селен. Кажется довольно простым, но позволяет вам программировать множество вещей, которые обычно вам придется делать вручную.
Использование инспектора Google Chrome
Инспектор Google Chrome Выявление проблем с веб-сайтом с помощью инструментов разработчика Chrome или FirebugЕсли вы до сих пор следовали моим руководствам по jQuery, возможно, вы уже столкнулись с некоторыми проблемами кода и не знаете, как их исправить. Когда вы сталкиваетесь с нефункциональным фрагментом кода, это очень ... Подробнее - бесценный инструмент для определения элементов, которые будут использоваться с Selenium. Это позволяет нам нацеливать точный элемент из java для извлечения информации, а также для интерактивного действия, такого как нажатие кнопки. Вот учебник по использованию Инспектора.
Откройте Google Chrome и перейдите на страницу, скажем, страницу IMDb для Лига справедливости (2017).
Давайте найдем элемент, на который нужно настроить таргетинг, скажем, в кратком изложении фильма. Щелкните правой кнопкой мыши сводку и выберите «Проверить» во всплывающем меню.

На вкладке «Элементы» мы видим, что текст сводки представляет собой div с классом 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.
Запустите драйвер Chrome, перейдите на gmail.com и дождитесь загрузки страницы.
Драйвер WebDriver = новый ChromeDriver (); driver.get (" https://gmail.com"); новый WebDriverWait (драйвер, 10) .until (d -> d.getTitle (). toLowerCase (). startWith ("gmail"));
Затем найдите поле электронной почты (оно названо с идентификатором identifierId) и введите адрес электронной почты. Щелкните значок Следующий и дождитесь загрузки страницы пароля.
/ * Введите имя пользователя / адрес электронной почты * / {driver.findElement (By.cssSelector ("# identifierId")). sendKeys (электронная почта); driver.findElement (By.cssSelector (". RveJvd")). click (); } новый WebDriverWait (драйвер, 10) .until (d ->! d.findElements (By.xpath ("// div [@ id = 'пароль']")). 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 ("электронная почта") + "," + e.getAttribute ("имя") + "," + e.getText ()); } }
Теперь возьмем предмет.
{/ * Тема * / 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 ("название") + "," + dt.getText ()); }
Вот общее количество строк электронной почты на странице.
System.out.println (rows.size () + «почта»);
И, наконец, мы закончили, поэтому выходим из браузера.
driver.quit ();
Напомним, вы можете использовать Selenium с Google Chrome для сканирования тех веб-сайтов, которые активно используют javascript. А с помощью инспектора Google Chrome довольно легко определить требуемый CSS или XPath для извлечения из элемента или взаимодействия с ним.
Есть ли у вас какие-либо проекты, которые выигрывают от использования Selenium? И с какими проблемами вы сталкиваетесь? Пожалуйста, опишите в комментариях ниже.