Привет, Codeby!
В статье я расскажу, как можно управлять браузером, используя фреймворк Selenium. Этот фреймворк позволяет имитировать реальный браузер, управление которым будет происходить с помощью кода. Также, Selenium подходит для тестирования Web-приложений, решения рутинных задач: извлечение информации (парсинг) и др. Фреймворк написан на языке Java и был опубликован в 2004-ом разработчиком Jason Huggins.
Вы научитесь:
- Установке Selenium и так же веб-драйвера;
- Использовать веб-локатор;
- Написанию программы для взаимодействие с форумом Codeby.
Рабочие браузеры
Chromium/Google Chrome | Windows/macOS/Linux | |
Firefox | Windows/macOS/Linux | Mozilla |
Microsoft Edge | Windows 10 | Microsoft |
Internet Explorer | Windows | Selenium Project |
Safari | macOS El Capitan и более новые | Apple |
Opera | Windows/macOS/Linux | Opera |
Библиотека Selenium есть на следующих языках: Java, Python, Kotlin, JavaScript и т.п.
Установка Selenium
Итак, для установки Selenium воспользуемся командой:
pip install selenium
Доступно в
Ссылка скрыта от гостей
Драйвер
Это ещё не всё. Для Selenium нужны веб-драйвера, чтобы запускать нужный браузер при запуске.
Для браузера Chrome:
Устанавливаем драйвер Chromdriver для Windows
Chromedriver - драйвер для запуска браузера Chrome.
Драйвер должен иметь ту версиею Chrome, которая у вас установлена. Чтобы узнать версию вашего браузера, перейдите в Настройки -> О браузере Chrome:
Отлично, мы узнали версию браузера. Значит, нам нужен драйвер с версией 106. Чтобы установить Chromedriver переходим на сайт -
На сайте вы увидите две версии Chrome 107: beta & stable. Это новая версия драйвера Chrome. Этот драйвер будет работать у вас только в том случае, если браузер имеет такую же версию. Для просмотра всех версий нажимаем на кнопку Downloads, как показано на скрине:
Скачиваем ChromeDriver 106:
Супер! Файл chromedriver.exe можно оставить в любом каталоге нашей системы. В дальнейшем нам придётся указывать путь.
Chromedriver - драйвер для запуска браузера Chrome.
Драйвер должен иметь ту версиею Chrome, которая у вас установлена. Чтобы узнать версию вашего браузера, перейдите в Настройки -> О браузере Chrome:
Отлично, мы узнали версию браузера. Значит, нам нужен драйвер с версией 106. Чтобы установить Chromedriver переходим на сайт -
Ссылка скрыта от гостей
На сайте вы увидите две версии Chrome 107: beta & stable. Это новая версия драйвера Chrome. Этот драйвер будет работать у вас только в том случае, если браузер имеет такую же версию. Для просмотра всех версий нажимаем на кнопку Downloads, как показано на скрине:
Скачиваем ChromeDriver 106:
Супер! Файл chromedriver.exe можно оставить в любом каталоге нашей системы. В дальнейшем нам придётся указывать путь.
Устанавливаем драйвер Chromdriver в Linux
Здесь не так уж и сложно. Чтобы установить драйвер Chrome на Linux, переходим на сайт
Затем скачиваем архив
Здесь не так уж и сложно. Чтобы установить драйвер Chrome на Linux, переходим на сайт
Ссылка скрыта от гостей
, спускаемся ниже и выбираем версию, совместимой с вашей версией браузера Google Chrome.Затем скачиваем архив
chromedriver_linux64.zip
, открываем терминал и вводим:unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod +x /usr/local/bin/chromedriver
Для браузера Firefox:
Устанавливаем драйвер Geckodriver в Windows
Geckodriver - драйвер для запуска Firefox. Установка чуть-чуть отличается.
Для скачивания geckodriver переходим на GitHub - тыц
Версия драйвера должна совместима с версией браузера Firefox.
В моём случаю я устанавливаю
Geckodriver - драйвер для запуска Firefox. Установка чуть-чуть отличается.
Для скачивания geckodriver переходим на GitHub - тыц
Версия драйвера должна совместима с версией браузера Firefox.
В моём случаю я устанавливаю
geckodriver-v0.32.0-win64.zip
. После скачивания распакуйте архив и оставьте geckodriver.exe в любой директории системы. В дальнейшем нам придётся указывать путь.Устанавливаем драйвер Geckodriver в Linux
Скажу одно: в Linux по умолчанию установлен geckodriver для Firefox, даже не нужно указывать путь к нему.
Но. если он у вас по каким-то причинам не установлен, переходим и скачиваем архив для Linux.
Скажу одно: в Linux по умолчанию установлен geckodriver для Firefox, даже не нужно указывать путь к нему.
Но. если он у вас по каким-то причинам не установлен, переходим и скачиваем архив для Linux.
Ссылка скрыта от гостей
.Алгоритм работы
На скриншоте показан алгоритм работы нашей будущей программы. После запуска Selenium ищет путь веб-драйвера и, при успехе, открывает сайт Codeby.net.
На скриншоте показан алгоритм работы нашей будущей программы. После запуска Selenium ищет путь веб-драйвера и, при успехе, открывает сайт Codeby.net.
О веб-локаторах
На самом деле это очень важна тема, без них мы не сможем управлять страницей при помощи Selenium. Что же вообще такое веб-локаторы? Это простые элементы на HTML-странице, которые мы сможем выбирать и выполнять нужной действие. Например, нажатие кнопки: чтобы нажать на кнопку нам нужно выбрать элемент, а именно - веб-локатор, который Selenium сможет найти. Если локатор найден, то Selenium продолжает свою работу.
Чтобы Selenium смог нажать накнопку нам необходимо получить веб-локатор, для этого открываем Инструменты разработчика в браузере:
Выбрали, теперь нам нужно получить веб-локатор (XPATH) для HTML-тэга <а>.
Что такое XPATH? Это веб-локатор, который можно применять в Selenium. Кроме XPATH существует и другие типы веб-локаторов: outerHtml, Element, Full Xpath и т.п
Переходим к кодингу.
Пишем код
После успешной установки давайте напишем программу, которая будет автоматически открывать форум Codeby в веб-браузере.
Наша задача:
- Указать путь к драйверу для запуска браузера
- Указать ссылку на сайт, который будет открывать Selenium
- Найти веб-локаторы кнопки Сервисы Codeby и кликнуть на неё, а затем нажать на Пентест.
- Бинго!
Python:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
Создаём класс
На примере я буду использовать ООП, для меня он понятнее. Создаем класс под название
ButtonCodeby
.
Python:
class ButtonCodeby:
pass
Конструктор класса
Python:
def __init__(self, executable_path: str):
self.url = 'https://codeby.net'
self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a'
self.pentest = '/html/body/div[5]/div/a[2]'
self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))
Для конструктора
__init__
определяем атрибуты. В качестве параметра он принимает сам путь драйвера который нам придется указать в конце.self.url
- принимает ссылку на сайт, в нашем случае codebyself.service
- принимает веб-локатор XPATH, кнопка "Сервисы Codeby"self.pentest
- принимает веб-локатор XPATH, кнопка "Пентест"self.browser
- когда путь драйвера будет указан, всё это выполнится.Создаём функцию [ go_codeby ]
Python:
def go_codeby(self):
print(f'Переход на страницу {self.url}')
self.browser.get(self.url)
go_codeby
- переходит на сайт Codeby с помощью browser.get.Создаём функцию [ service_codeby ]
Python:
def service_codeby(self):
self.browser.find_element(By.XPATH, self.service).click()
time.sleep(0.5)
service_codeby
выполнят нажатие на кнопку Сервисы Codeby.Создаём функцию [ pentest_codeby ]
Python:
def pentest_codeby(self):
self.browser.find_element(By.XPATH, self.pentest).click()
time.sleep(5)
self.browser.quit()
pentest_codeby
- нажимает на кнопку Пентест, затем выходим с браузера.И последний штрих
Python:
def start_click(self):
self.go_codeby()
self.service_codeby()
self.pentest_codeby()
btn_cod = ButtonCodeby('/сhromedriver/chromedriver.exe')
start_click
- выполняет все функции, которые мы написали выше. В конце мы создаем переменную btn_cod, которая необходима для запуска браузера с определенным путем драйвера.Полный код
Python:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
class ButtonCodeby:
def __init__(self, executable_path: str):
self.url = 'https://codeby.net'
self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a'
self.pentest = '/html/body/div[5]/div/a[2]'
self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))
def go_codeby(self):
print(f'Переход на страницу {self.url}')
self.browser.get(self.url)
def service_codeby(self):
self.browser.find_element(By.XPATH, self.service).click()
time.sleep(0.5)
def pentest_codeby(self):
self.browser.find_element(By.XPATH, self.pentest).click()
time.sleep(5)
self.browser.quit()
def start_click(self):
self.go_codeby()
self.service_codeby()
self.pentest_codeby()
btn_cod = ButtonCodeby('/chromedriver/chromedriver.exe')
Лекарство селениум, от боли суставы и многое другое.
Документация Selenium python3 -
Ссылка скрыта от гостей
Что такое вебдрайвера - тык
Нашли ошибку в коде или тексте? Сообщите!
Последнее редактирование: