В этой статье мы разберем, как написать веб-скрапер (web scraper) с помощью Selenium. Веб-скрапинг – это поиск нужной информации в Интернете или автоматизация какой-либо веб-задачи. Вам потребуются базовые навыки работы с терминалом, а именно знание команд cd
и mkdir
. Также у вас должны быть установлены pip и Python3.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Установка Selenium
Итак, одним из модулей для веб-скрапинга в Python3 является Selenium. Чтобы установить Selenium в свою систему, введите в терминале или командной строке следующую команду:
pip3 install selenium
Установка Selenium в виртуальном окружении
Если вы решите пойти по альтернативному пути, включающему установку модуля виртуальной среды, то введите в командной строке pip3 install virtualenv.
После этого перейдите в директорию рабочего стола и создайте новую папку:
cd desktop mkdir selenium_basics
Теперь смените директорию на selenium_basics и создайте виртуальное окружение:
cd selenium_basics virtualenv -p python .
Если в вашем терминале появится сообщение, подобное тому, что вы видите на скриншоте ниже, то все прошло успешно:
Теперь активируйте виртуальную среду, введя в терминале следующую команду:
source Scripts/activate
А для Windows введите в командной строке:
Scripts/activate
Если вы увидите, что в командной строке появилось что-то подобное, поздравляем, ваша виртуальная среда готова и активирована:
Теперь мы можем приступить к основной части! Введите:
pip3 install selenium
Должно получиться что-то вроде этого:
Установка chromedriver
Итак, вы успешно установили Selenium в виртуальном окружении. Теперь создайте папку с именем src и перейдите в нее:
mkdir src cd src
Мы создаем дополнительную папку src, потому что, как вы могли заметить, папка selenium_basics уже содержит некоторые файлы. Мы не хотим, чтобы наша программа конфликтовала с ними.
Создайте новый файл Python и назовите его как угодно. Файл в примере называется tut, сокращенно от tutorial. Вы можете использовать любой редактор, мы же будем использовать vim.
Для запуска тестов Selenium нам необходимо установить программное обеспечение. Так, для запуска тестов в Chrome у есть chromedriver.exe, для Firefox – geckodriver.exe, а для Microsoft Edge – edge driver. Мы будем работать на базе Chrome, следовательно, устанавливаем chromedriver.exe. Это можно сделать, перейдя по ссылке.
Обратите внимание, что chromedriver.exe устанавливается в зависимости от вашей версии Chrome. Чтобы узнать версию вашего браузера, введите в его адресной строке chrome://version. Наша версия Chrome — 87.
Поэтому выбираем соответствующую версию ChromeDriver и устанавливаем файл win32.zip. Распаковываем архив в папку src.
Веб-скрапинг YouTube при помощи Selenium
В сегодняшнем коде мы будем открывать YouTube и искать в нем нужную информацию. Это не затронет ваш персональный аккаунт. И если вы видите, что при попытке войти в систему, а затем выйти из chromedriver.exe, вы выходите из своего аккаунта, и весь кэш удаляется, это сделано в целях безопасности.
Теперь давайте немного поработаем над кодом. Сначала импортируем класс webdriver
из Selenium:
from selenium import webdriver
Затем укажем местоположение драйвера Chrome:
driver = webdriver.Chrome('/path/to/chromedriver.exe')
В конце должен стоять ‘/chromedriver.exe’. После этого нам нужно открыть YouTube, поэтому пишем:
drive.get('https://www.youtube.com')
Если вы запустите код сейчас, через несколько секунд автоматически откроется окно YouTube:
Если это произошло, поздравляем — вы только что написали свою первую программу автоматизации.
Теперь нам нужно ввести что-то в поле поиска. Для перехода в DevTools на клавиатуре нажмите Ctrl+Shift+I для Windows. Для пользователей Mac — command+option+I. Обратите внимание, что эти команды специфичны для Chrome.
Справа от страницы YouTube откроются инструменты разработчика – DevTools. Нажмите на кнопку со стрелочкой в левом углу верхней панели DevTools.
Теперь наведите курсор мыши на поисковую строку YouTube и щелкните по ней:
Вы увидите, что один из разделов HTML-кода стал голубым. Щелкните правой кнопкой мыши по этому разделу и скопируйте XPath элемента:
После этого перейдите к своему коду и введите:
driver.find_element_by_xpath('#Сюда вставьте xPath').send_keys('#То, что вы хотите искать')
.send_keys()
отправляет какой-либо текст и, в некоторых случаях, комбинации клавиш.
Мы также хотим, чтобы Selenium автоматически нажимал кнопку поиска. Скопируем XPath для элемента кнопки, как делали это для строки поиска:
Обратите внимание, что курсор нужно ставить не на значок, а на поле, в котором находится значок поиска. После этого введите:
driver.find_element_by_xpath('#Сюда вставьте XPath').click()
Здесь довольно понятный код, который говорит: найди элемент с этим XPath и щелкни по нему. Запустив программу,
…вы увидите, что поиск был автоматически завершен. Теперь вам остается только нажать на нужное видео.
Мы можем сделать эту программу еще более интересной. Сначала импортируем модуль time
, а затем попросим пользователя указать, что он хочет найти. Чтобы убедиться, что у нас достаточно времени, чтобы успеть щелкнуть по окну chromedriver, мы можем указать программе сделать паузу на две секунды, прежде чем продолжить. Примерно так:
import time ask_search = input(str('What do you want to search: ')) time.sleep(2)
Затем мы отредактируем эту строку:
driver.find_element_by_xpath('//*[<a href="http://twitter.com/id" target="_blank" rel="noreferrer noopener">@id</a>="search"]').send_keys("Whatever you want to search")
И изменим её на:
driver.find_element_by_xpath('//*[<a href="http://twitter.com/id" target="_blank" rel="noreferrer noopener">@id</a>="search"]').send_keys(ask_search)
Итак, мы запускаем этот сценарий, и вводим, например, Dani:
И получаем в окне chromedriver:
Готово! Теперь мы можем искать любой текст, который нам нужен, и поиск будет происходить автоматически!
Вот весь код целиком:
from selenium import webdriver import time driver = webdriver.Chrome('/path/to/chromedriver.exe') ask_search = input(str('What do you want to search: ')) time.sleep(2) driver.get('https://www.youtube.com') driver.find_element_by_xpath('//*[@id="search"]').send_keys("Dani") driver.find_element_by_xpath('//*[@id="search-icon-legacy"]').click()
Перевод статьи «Basics of Selenium in Python3».