September 25, 2024

Selenium... Почему так вкусно?

Автор: Мутный Движ - @mytnui_dvij

Данная статья создана исключительно для ознакомления и не призывает к действиям!

Доброго времени суток всем любителям киберпиастров!

Сегодня поговорим о такой прекрасной вещи как библиотека selenium, но для начала, немного ввода для тех кто только постигает азы.

Ввод для неофитов

Selenium это библиотека автоматизации для языков Java, C#,JavaScript, Ruby и Kotlin и Python. В основном она используется для автоматизации тестирования веб-сайтов и парсинга, но как и в любой теме программирования, ее применение ограничивается лишь вашей фантазией. Для начала работы с selenium достаточно ознакомиться с документацией библиотеки, а так же знать основы вашего языка программирования. В нашем случае мы разберем ее на примере языка Python.

Почему selenium?

Потому что. Всем спасибо, до свидания.

1. Webdriver.
Основным преимуществом selenium является WebDriver. Именно этот инструмент развязывает нам руки, и позволяет делать то, что мы хотим делать. Webdriver предоставляет нам интерфейс взаимодействия с браузером словно это обычный объект в коде. Проще говоря, строчка кода == действие пользователя в браузере.

2. Proxy.
Selenium имеет инструменты для интеграции прокси в свою работу, что позволят нам анонимизировать работу нашего кода, а так же избегать таких неприятностей как капча.

3. Скрапинг.
Да да, с помощью selenium мы можем собирать данные с сайта и использовать их в своем парсинге.

4. Совместимость с другими библиотеками.
Работа selenium легко совмещается с работами других библиотек вашего языка программирования, что позволяет нам создавать комбо-приложения для решения наших задач. Например на языке python используя selenium совместно с библиотекой BeatifulSoup мы можем создать парсер. Устали делать одно и тоже каждый день в своем браузере? Selenium + Aiogram позволит вам делать это одной кнопкой в телеграмм боте.

5. Кросс-браузерная совместимость.
Код написанный с помощью этой библиотеки будет работать со всеми популярными браузерами, такими как Chrome или FireFox, а при должной настройке даже с Tor браузером.

Ради правды - минусы.

К сожалению как и всё в этом мире, библиотека selenium не лишена недостатков.

1. Хрупкость
Код написанный на selenium весьма уязвим к изменении структуры веб-приложения. Иными словами, если чудо-разработчик например решит переместить кнопку своего
сайта которую мы используем в нашем коде, нам придется это учесть, и переписать ту часть нашего кода которая отвечает за взаимодействие с этой кнопкой.

2. Скорость.
Так как selenium взаимодействует с браузером, его скорость в большинстве случаев будет ниже чем в других инструментах, которые используют сетевые протоколы напрямую.

3. Необходимость установки браузера.
Иногда из преимуществ вытекают и недостатки. Так как selenium использует браузер, этот самый браузер придется установить и использовать для работы библиотеки. Это означает, что мы в большинстве случаев не сможем успешно использовать наш код selenium на малопроизводительном VPS, например на каком-нибудь 1 ядро 0.5ггц 500мб ОЗУ.

Бонус!

Для тех кто решил ознакомиться с работой данной библиотеки - небольшая шпаргалка по основным командам на языке Python.

''' Подключаем необходимые модули'''

# Установить библиотеку selenium
pip install selenium

# Подключить веб-драйвер
from selenium import webdriver

# Подключить класс для поиска элементов
from selenium.webdriver.common.by import By

# Подключить класс для работы с формами(ввод текста)
from selenium.webdriver.common.keys import Keys

''' Создание экземпляра WebDriver '''

# Для Chrome
driver = webdriver.Chrome()

# Для Firefox
driver = webdriver.Firefox()

''' Открытие веб-страницы: '''

# Открыть страницу по указанному адресу
driver.get("address")

''' Нахождение элементов на странице: '''

# Поиск элемента по ID
element = driver.find_element(By.ID, "my_element_id")

# Поиск элемента по имени
element = driver.find_element(By.NAME, "my_element_name")

# Поиск элемента по CSS селектору
element = driver.find_element(By.CSS_SELECTOR, "#my_element_id")

# Поиск элемента по XPATH
element = driver.find_element(By.XPATH, "//input[@id='my_element_id']")

''' Взаимодействие с элементами веб-приложения '''

# Клик левой кнопкой мышки по элементу
element.click()

# Ввести указанный текст
element.send_keys("Hello, world!")

# Получить указанный текст
text = element.text

# Очистить поле ввода
element.clear()

''' Работа с окнами и вкладками '''

# Получить текущий URL
current_url = driver.current_url

# Перейти на новую вкладку
driver.execute_script("window.open('');")

# Взять список ID всех открытых вкладок браузера
window_handles = driver.window_handles

# Переключиться на указанную вкладку
driver.switch_to.window(window_handles[1])

''' Закрытие браузера: '''

# Завершить работу браузера
driver.quit()

''' Другое '''

# Сделать скриншот (он сохранится в папке проекта)
driver.save_screenshot("screenshot.png")

# Вернуть список всех cookies, сохраненных в текущем сеансе браузера
driver.get_cookies()

# Добавить новый cookie в текущий сеанс браузера
driver.add_cookie(cookie_dict)