{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

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. Получение объектов с веб-страниц

Для поиска объектов используются локаторы (строки, которые идентифицируют элемент страницы).

Примеры:

  1. by_id – осуществляется поиск по атрибуту id;
  2. by_xpath – поиск элемента по XPath выражению;
  3. by_cssSelector – поиск, основанный на описаниях таблиц стилей (CSS)

После поиска объектов, с ними можно выполнять различные действия. Например с помощью метода click() можно нажать на объект веб-страницы.

2. Работа с выпадающими списками

Метод используется для работы с выпадающими списками

Локатор by_id ищет элемент, необходимый для выбора. Далее выбирает строку со значением `EQUAL`.

3. Имитация работы клавиатуры

Ниже представлен пример имитации нажатия клавиши на клавиатуре. Создаем экземпляр класса ActionChains, в который передаем browser. Далее вызываем метод SendKeys, в котором указываем действие, в данном случае – нажатие на Enter.

Action.perform() – командует выполнение.

Модуль time.sleep() дает нам то необходимое ожидание, которое нужно нам для получения объектов страницы в полном объеме.

И в заключение:

Установка драйвера для каждого браузера имеет свои особенности. Ознакомиться с информацией и узнать все возможности можно на официальном сайте ПО – selenium-python.com. Там же можно найти инструкции по установке и настройке библиотеки для различных ОС.

0
2 комментария
Дмитрий Малахов

А работает ли это все в терминальной  сессии, например ... по ночам.

Просто делали похожие вещи на c# библиотеках - в результате были проблемы с теневым запуском.
Получилось, что почти под каждый проект нужна виртуалка...

Ответить
Развернуть ветку
Alexandr Palachev

Puppeteer,  headless браузер, работает.

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда