Selenium или автоматизация работы браузера
Предположим, что вам нужно выгрузить большое количество документов, генерируемых автоматически или подгружаемых в систему человеком. Но ручное выполнение этой задачи займет огромное количество времени. На помощь приходит Selenium WebDriver! Подробнее в сегодняшней статье
Selenium WebDriver – библиотека языка Python для управления работой браузера. По сути, такой веб-драйвер создает бота для автоматизации работы в браузере.
Одно из неоспоримых преимуществ Selenium WebDriver – это возможность выполнения действий на странице с «ожиданием». Веб-драйвер позволяет «ожидать», как бы ожидал человек, пока не появится необходимый элемент.
Но есть и минусы:
- Работа возможно только с первой вкладкой браузера;
- Иногда поведение в разных браузерах разнится;
- Драйвер может «упасть» прямо посреди работы;
- Бывают сложности с поиском элементов (XPath не всегда работает, но помогает замена поиска по ID);
- Необходимо четко продумать алгоритм действий.
Связка Python-Selenium имеет удобный API для доступа ко многим браузерам.
Допустим, что библиотека уже установлена (иначе нужно запустить в CMD команду «pip install selenium»). Для работы будем использовать программный интерфейс Anaconda 3, а именно Jupiter Notebook.
Практика применения
В рамках работы по проекту нам нужно было получить для обработки приблизительно 10 тыс. документов формата. docx. Выгрузка одного объекта занимала от 30 до 40 секунд или 5-6 действий.
Автоматизация выгрузки была выполнена с помощью следующих действий:
1. Получение объектов с веб-страниц
Для поиска объектов используются локаторы (строки, которые идентифицируют элемент страницы).
Примеры:
- by_id – осуществляется поиск по атрибуту id;
- by_xpath – поиск элемента по XPath выражению;
- by_cssSelector – поиск, основанный на описаниях таблиц стилей (CSS)
После поиска объектов, с ними можно выполнять различные действия. Например с помощью метода click() можно нажать на объект веб-страницы.
2. Работа с выпадающими списками
Метод используется для работы с выпадающими списками
Локатор by_id ищет элемент, необходимый для выбора. Далее выбирает строку со значением `EQUAL`.
3. Имитация работы клавиатуры
Ниже представлен пример имитации нажатия клавиши на клавиатуре. Создаем экземпляр класса ActionChains, в который передаем browser. Далее вызываем метод SendKeys, в котором указываем действие, в данном случае – нажатие на Enter.
Action.perform() – командует выполнение.
Модуль time.sleep() дает нам то необходимое ожидание, которое нужно нам для получения объектов страницы в полном объеме.
И в заключение:
Установка драйвера для каждого браузера имеет свои особенности. Ознакомиться с информацией и узнать все возможности можно на официальном сайте ПО – selenium-python.com. Там же можно найти инструкции по установке и настройке библиотеки для различных ОС.
А работает ли это все в терминальной сессии, например ... по ночам.
Просто делали похожие вещи на c# библиотеках - в результате были проблемы с теневым запуском.
Получилось, что почти под каждый проект нужна виртуалка...
Puppeteer, headless браузер, работает.