Python - это мощный язык сценариев, который позволяет использовать самые разные регистры. Например, Python можно использовать для изучения данных, автоматизации, серверной разработки, анализа данных - применения поистине безграничны. Основная идея этой статьи будет касаться автоматизации, поскольку автоматизация через Python через Selenium изменила правила автоматизации или, как другие называют это боттингом.

Что такое селен? Почему он так хорошо работает с Python?

Selenium позволяет Python управлять различными веб-браузерами. Будь то Google Chrome, Mozilla Firefox или даже Internet Explorer. Что отличает Selenium от контроллера веб-браузера VB.NET или VB6, так это то, что плагины и профили могут быть настроены, а сценарии могут быть введены в сам браузер для дальнейшего улучшения автоматизации. Очевидно, что Selenium можно импортировать в Visual Studio, но то, что отличает пакет Selenium через Python от других, - это его кроссплатформенные возможности.

Возможность использовать Selenium не только в Windows, MacOS и Linux имеет огромное значение из-за доступности. Например, кодирование проекта в Windows и возможность перенести его на Ubuntu VPS значительно упрощается. Благодаря тому, что Linux VPS имеет 99,99% времени безотказной работы, почти ничего не стоит и не требует постоянного внимания. Раньше он использовался для запуска автоматизированных приложений браузера, но Windows VPS потребовался бы из-за неспособности VB.NET быть действительно кроссплатформенной.

Установка Selenium

Достаточно о способностях Selenium, пора приступить к установке и использованию Selenium. Предпосылки для этого - Linux VPS, загруженный с Ubuntu 18.04, Python 3 и Mozilla Firefox (geckodriver). Mozilla Firefox был выбран из-за того, что Mozilla Firefox разрешает разработку. По мере того, как Google Chrome становится все менее удобным для разработчиков, Internet Explorer становится менее гибким.

Прежде всего, поскольку используется Ubuntu 18.04, Python 3 предустановлен. Однако при использовании Ubuntu 16.10 или новее установка Python 3 просто выполняется с помощью следующих команд в терминале:

sudo apt-get update sudo apt-get install python3.6

Как только Python 3.6 станет доступен для использования, самое время установить pip. Пип позволит установить необходимые привязки. Установить можно, выполнив следующие команды:

sudo apt-get update sudo apt-get install python3-pip

Теперь можно установить Selenium:

sudo pip3 install selenium

Другой способ или установка выглядит следующим образом:

sudo python3 -m pip install selenium

Установка Gecko

Поскольку установка selenium не включает geckodriver; установка может быть произведена с помощью этих команд:

wget https://github.com/mozilla/geckodriver/releases/download/v 0.20.1/geckodriver-v0.20.1-linux64.tar.gz
tar xvfz geckodriver*
chmod +x geckodriver
sudo mv geckodriver /usr/local/bin/
export PATH=$PATH:/ usr/local/bin/geckodriver

Краткое изложение того, что происходит в этих командах:

  1. wget хватает геккодрайвера.
  2. tar xvfz извлекает geckodriver.
  3. chmod + x делает geckodriver исполняемым файлом.
  4. mv geckodriver перемещает исполняемый файл в локальную папку пользователя.
  5. export PATH добавляет geckodriver в среду операционной системы.

Прежде чем продолжить, важно убедиться, что geckodriver действительно установлен и доступен. Выполнение следующей команды сделает именно это:

whereis geckodriver

Должен появиться следующий вывод:

geckodriver: /usr/local/bin/geckodriver

Установка Mozilla Firefox

С установленным Python 3, pip, selenium и geckodriver. Пришло время установить Firefox, чтобы geckodriver работал правильно и, следовательно, селен:

sudo apt-get install firefox

Еще раз проверяем установку:

whereis firefox

Также подойдет выполнение следующей команды:

firefox --version

Селен Тестовый прогон

Когда все установлено, пришло время протестировать Selenium. Выполните следующую команду, чтобы запустить текстовый редактор в терминале:

nano main.py

Теперь откройте текстовый редактор и вставьте его в окно терминала:

from selenium import webdriver

from selenium.webdriver.firefox.options import Options



options = Options()

options.add_argument("--headless")

driver = webdriver.Firefox(firefox_options=options)

driver.get("https://www.google.com")

print(driver.title)

driver.quit()

После сохранения скрипт python легко запустить, выполнив следующие действия:

python3 main.py

Ваш результат должен выглядеть следующим образом:

Вывод текста «Google» означает, что Selenium успешно открыл Firefox без головы, загрузил домашнюю страницу Google, и в результате был выведен заголовок страницы.

Почему Безголовый?

Важно знать, что запуск Firefox без заголовка означает, что браузер работает без графического пользовательского интерфейса. Работа без головы может привести к ошибкам из-за того, что Linux VPS не имеет реального графического интерфейса для взаимодействия. Означает ли это, что он должен работать без головы? Не обязательно. Установка xvfb вместе с x11vnc может дать возможность запускать настоящий графический интерфейс для дальнейшей отладки.

Как это может быть автоматизация?

Учитывая тот факт, что Python 3 вместе с Selenium дает возможность инструктировать браузер - будь то Google Chrome, Mozilla Firefox или Internet Explorer - возможности поистине безграничны. Хотите, чтобы государственный студенческий долг увеличивался каждую секунду? Не проблема:

from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.firefox.options import Options

import time



capabilities = DesiredCapabilities.FIREFOX

capabilities["marionette"] = True

options = Options()

options.add_argument("--headless")

driver = webdriver.Firefox(firefox_options=options, capabilities=capabilities)

driver.get('https://studentdebtclock.org')

while True:

               debt = driver.find_element_by_class_name("slogan").text

               print("Current Student Debt:", debt)

               time.sleep(1)

driver.quit()

Как видите, он открывает Firefox, загружает страницу Часы студенческого долга и начинает вывод на консоль в реальном времени:

Конец

Видно, что Python 3 вместе с Selenium довольно мощный. Возможность получить элемент на статической HTML-странице, в то время как JavaScript обновляет такой элемент, и иметь возможность выводить его на консоль? Это феноменально. Selenium может не только захватывать текст элемента при обновлении с помощью JavaScript, но также может входить на веб-сайты, запоминать страницы и многое другое. Вот почему Selenium - отличный выбор для автоматизации с помощью Python.