В этой статье мы разберем, как написать веб-скрапер (web scraper) с помощью Selenium. Веб-скрапинг – это поиск нужной информации в Интернете или автоматизация какой-либо веб-задачи. Вам потребуются базовые навыки работы с терминалом, а именно знание команд cd
и mkdir
. Также у вас должны быть установлены pip и Python3.
БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"
Установка Selenium
Итак, одним из модулей для веб-скрапинга в Python3 является Selenium. Чтобы установить Selenium в свою систему, введите в терминале или командной строке следующую команду:
pip3 install selenium
Установка Selenium в виртуальном окружении
Если вы решите пойти по альтернативному пути, включающему установку модуля виртуальной среды, то введите в командной строке pip3 install virtualenv.
После этого перейдите в директорию рабочего стола и создайте новую папку:
cd desktop mkdir selenium_basics
Теперь смените директорию на selenium_basics и создайте виртуальное окружение:
cd selenium_basics virtualenv -p python .
Если в вашем терминале появится сообщение, подобное тому, что вы видите на скриншоте ниже, то все прошло успешно:
![Создание виртуального окружения](https://qarocks.ru/wp-content/uploads/2023/11/image-202-1024x91.png)
Теперь активируйте виртуальную среду, введя в терминале следующую команду:
source Scripts/activate
А для Windows введите в командной строке:
Scripts/activate
Если вы увидите, что в командной строке появилось что-то подобное, поздравляем, ваша виртуальная среда готова и активирована:
![](https://qarocks.ru/wp-content/uploads/2023/11/image-203.png)
Теперь мы можем приступить к основной части! Введите:
pip3 install selenium
Должно получиться что-то вроде этого:
![Установка Selenium в виртуальное окружение](https://qarocks.ru/wp-content/uploads/2023/11/image-204.png)
Установка 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](https://qarocks.ru/wp-content/uploads/2023/11/image-206.png)
Поэтому выбираем соответствующую версию 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:
![Окно YouTube](https://qarocks.ru/wp-content/uploads/2023/11/image-208-1024x693.png)
Если это произошло, поздравляем — вы только что написали свою первую программу автоматизации.
Теперь нам нужно ввести что-то в поле поиска. Для перехода в DevTools на клавиатуре нажмите Ctrl+Shift+I для Windows. Для пользователей Mac — command+option+I. Обратите внимание, что эти команды специфичны для Chrome.
Справа от страницы YouTube откроются инструменты разработчика – DevTools. Нажмите на кнопку со стрелочкой в левом углу верхней панели DevTools.
![](https://qarocks.ru/wp-content/uploads/2023/12/devtools.jpeg)
Теперь наведите курсор мыши на поисковую строку YouTube и щелкните по ней:
![Выбор элемента в DevTools режиме](https://qarocks.ru/wp-content/uploads/2023/11/image-210-1024x546.png)
Вы увидите, что один из разделов HTML-кода стал голубым. Щелкните правой кнопкой мыши по этому разделу и скопируйте XPath элемента:
![Копирование XPath элемента строки поиска](https://qarocks.ru/wp-content/uploads/2023/11/image-211.png)
После этого перейдите к своему коду и введите:
driver.find_element_by_xpath('#Сюда вставьте xPath').send_keys('#То, что вы хотите искать')
.send_keys()
отправляет какой-либо текст и, в некоторых случаях, комбинации клавиш.
Мы также хотим, чтобы Selenium автоматически нажимал кнопку поиска. Скопируем XPath для элемента кнопки, как делали это для строки поиска:
![Копирование XPath элемента кнопки поиска](https://qarocks.ru/wp-content/uploads/2023/11/image-212-1024x546.png)
Обратите внимание, что курсор нужно ставить не на значок, а на поле, в котором находится значок поиска. После этого введите:
driver.find_element_by_xpath('#Сюда вставьте XPath').click()
Здесь довольно понятный код, который говорит: найди элемент с этим XPath и щелкни по нему. Запустив программу,
![](https://qarocks.ru/wp-content/uploads/2023/11/image-213-1024x546.png)
…вы увидите, что поиск был автоматически завершен. Теперь вам остается только нажать на нужное видео.
Мы можем сделать эту программу еще более интересной. Сначала импортируем модуль 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:
![What do you want to search: Dani](https://qarocks.ru/wp-content/uploads/2023/11/image-214.png)
И получаем в окне chromedriver:
![На YouTube выведены результаты поиска Dani - соответствующий канал.](https://qarocks.ru/wp-content/uploads/2023/11/image-215-1024x693.png)
Готово! Теперь мы можем искать любой текст, который нам нужен, и поиск будет происходить автоматически!
Вот весь код целиком:
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».