Библиотека Selenium
Давай поговорим о библиотеке Selenium! Если ты когда-либо мечтал управлять браузером с помощью кода, то это именно то, что тебе нужно. Selenium — это как волшебная палочка для программистов, позволяющая автоматизировать взаимодействие с веб-страницами. Но прежде чем мы начнем, давай разберемся, что это за зверь такой и как с ним дружить.
Что такое Selenium?
Selenium — это инструмент для автоматизации браузеров. Он позволяет писать тесты для веб-приложений на различных языках программирования, включая Python. Представь, что ты можешь заставить браузер делать все, что ты хочешь: кликать по кнопкам, заполнять формы и даже делать скриншоты! Это похоже на то, как супергерой управляет городом, только вместо суперсил у тебя — код.
Основные функции библиотеки Selenium
1. Управление браузером
• Запуск браузера: Создание экземпляра браузера (например, Chrome, Firefox).
from selenium import webdriver
driver = webdriver.Chrome() # Запуск Chrome
• Закрытие браузера: Закрытие текущего окна или завершение работы драйвера.
driver.quit() # Закрывает все окна и завершает сессию
driver.close() # Закрывает текущее окно
2. Навигация по страницам
• Открытие URL: Переход на указанную веб-страницу.
driver.get("http://www.example.com")
• Назад и вперед: Навигация по истории браузера.
driver.back() # Возврат на предыдущую страницу
driver.forward() # Переход вперед
• Обновление страницы: Перезагрузка текущей страницы.
driver.refresh()
3. Поиск элементов
• Поиск по различным критериям:
• По ID:
element = driver.find_element("id", "element_id")
• По имени:
element = driver.find_element("name", "element_name")
• По классу:
element = driver.find_element("class name", "class_name")
• По CSS-селектору:
element = driver.find_element("css selector", "div.class")
• По XPath:
element = driver.find_element("xpath", "//div[@class='class_name']")
• Поиск множества элементов:
elements = driver.find_elements("tag name", "input") # Находит все элементы <input>
4. Взаимодействие с элементами
• Клик по элементу:
element.click()
• Ввод текста:
element.send_keys("Текст для ввода")
• Очистка текстового поля:
element.clear()
• Получение текста элемента:
text = element.text
• Получение атрибутов элемента:
value = element.get_attribute("attribute_name")
5. Ожидания
• Неявные ожидания: Устанавливаются один раз и действуют для всей сессии.
driver.implicitly_wait(10) # Ждет до 10 секунд при поиске элементов
• Явные ожидания: Ожидание определенного условия для конкретного элемента.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'element_id'))
)
6. Работа с окнами и вкладками
• Переключение между окнами:
driver.switch_to.window(window_handle)
• Получение всех открытых окон:
window_handles = driver.window_handles
7. Скриншоты
• Сохранение скриншота страницы:
driver.save_screenshot("screenshot.png")
8. Работа с фреймами
• Переключение на фрейм:
driver.switch_to.frame("frame_name_or_id")
9. Работа с jаvascript
• Выполнение jаvascript-кода:
driver.execute_script("alert('Hello, World!');")
10. Работа с куками
• Получение всех куков:
cookies = driver.get_cookies()
• Добавление куков:
driver.add_cookie({"name": "cookie_name", "value": "cookie_value"})
• Удаление куков:
driver.delete_cookie("cookie_name")
11. Работа с загрузками
• Настройка пути для загрузок (например, для Chrome):
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
prefs = {"download.default_directory": "/path/to/download/directory"}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(service=Service("/path/to/chromedriver"), options=chrome_options)
12. Скриншоты элементов
• Сохранение скриншота конкретного элемента:
element.screenshot("element_screenshot.png")
13. Работа с действиями пользователя
• Использование ActionChains для сложных действий (например, перетаскивание, наведение мыши):
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.move_to_element(element).perform() # Наведение на элемент
14. Обработка всплывающих окон и алертов
• Принятие или отклонение алертов:
alert = driver.switch_to.alert
alert.accept() # Принять
alert.dismiss() # Отклонить
15. Сетевые запросы и HTTP-заголовки
• Использование библиотеки requests в сочетании с Selenium для работы с API.
16. Параметры запуска браузера
• Настройка различных параметров браузера (например, безголовый режим):
chrome_options.add_argument("--headless") # Запуск в безголовом режиме
17. Поддержка различных браузеров
• Работа с различными драйверами: Selenium поддерживает множество браузеров, таких как Chrome, Firefox, Safari, Edge и другие.
Установка Selenium
Чтобы начать работать с Selenium, сначала нужно установить его. Это делается с помощью pip. Открой терминал и введи:
pip install selenium
После установки не забудь скачать драйвер для своего браузера. Например, для Chrome это будет ChromeDriver. Убедись, что версия драйвера соответствует версии твоего браузера — иначе будет как в плохом фильме ужасов: "Не открывай дверь!"
Первый скрипт на Selenium
Давай напишем простой скрипт, который откроет страницу Google и выполнит поиск. Это будет наш первый шаг на пути к автоматизации!
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Создаем экземпляр драйвера
driver = webdriver.Chrome()
# Открываем страницу Google
driver.get("http://www.google.com")
# Находим поле поиска
search_box = driver.find_element("name", "q")
# Вводим текст и отправляем форму
search_box.send_keys("Selenium Python")
search_box.send_keys(Keys.RETURN)
# Закрываем браузер через 5 секунд
driver.implicitly_wait(5)
driver.quit()
Этот код открывает Google, вводит "Selenium Python" в строку поиска и нажимает Enter. А затем закрывает браузер. Легко как дважды два, правда?
Элементы управления
Теперь давай поговорим о том, как управлять элементами на странице. Selenium позволяет находить элементы по различным критериям: по ID, классу, имени и даже по XPath. Это как искать сокровища с картой!
Пример поиска элемента по ID
element = driver.find_element("id", "element_id")
element.click()
Здесь мы ищем элемент по его ID и кликаем на него. Легко! Но помни: если элемента нет на странице, то возникнет ошибка. Поэтому всегда проверяй наличие элемента перед тем, как с ним взаимодействовать.
XPath — твой лучший друг
XPath — это мощный инструмент для поиска элементов. Например:
element = driver.find_element("xpath", "//button[text()='Submit']")
element.click()
Этот код найдет кнопку "Submit" и нажмет на нее. Но будь осторожен: если на странице будет несколько таких кнопок, ты можешь попасть в ловушку!
Работа с формами
Теперь давай посмотрим, как работать с формами. Допустим, у нас есть форма регистрации. Мы можем заполнить ее следующим образом:
username = driver.find_element("name", "username")
password = driver.find_element("name", "password")
username.send_keys("my_username")
password.send_keys("my_password")
submitbutton = driver.findelement("id", "submit")
submit_button.click()
Этот код заполняет поля для имени пользователя и пароля, а затем нажимает кнопку отправки. Как будто ты сам заполняешь форму, только быстрее!
Скриншоты и ожидания
Selenium также позволяет делать скриншоты. Это полезно для проверки того, как выглядит страница после выполнения действий. Вот как это делается:
driver.save_screenshot("screenshot.png")
Теперь у тебя есть скриншот страницы! Это как сделать фото на память о своем путешествии по интернету.
Ожидания
Иногда элементы загружаются не сразу, и тут на помощь приходят ожидания. Есть два типа ожиданий: явные и неявные. Явные ожидания позволяют ждать определенного условия:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#Явное ожидание
try:
element = WebDriverWait(driver, 10).until(
EC.presenceofelement_located((By.NAME, "q"))
)
finally:
driver.quit()
Этот код будет ждать до 10 секунд, пока элемент не появится на странице. Если он появится раньше — отлично! Если нет — будет как в плохом фильме: "Скоро вернусь!"
Заключение
Вот так мы и познакомились с библиотекой Selenium! Теперь у тебя есть инструменты для автоматизации браузеров и написания тестов для веб-приложений. Помни: автоматизация — это не только удобно, но и весело! Так что вперед, к новым вершинам!
Задачи на закрепление материала
Задача 1: Автоматизация входа на сайт
Создайте скрипт, который автоматически выполняет вход на любой веб-сайт с формой авторизации (например, GitHub или любой другой). Скрипт должен:
• Открывать главную страницу.
• Заполнять поля для ввода логина и пароля.
• Нажимать кнопку "Войти".
• Проверять, что вход выполнен успешно (например, проверять наличие элемента, который виден только после входа).
Задача 2: Скачивание файла
Напишите скрипт, который:
• Открывает страницу с файлом для скачивания (например, документ или изображение).
• Настраивает путь для загрузок так, чтобы файл сохранялся в определенную папку.
• Загружает файл и проверяет, что файл действительно скачан в указанную папку.
Задача 3: Работа с таблицей данных
Создайте скрипт, который:
• Открывает страницу с таблицей (например, таблица с данными о товарах).
• Извлекает данные из таблицы (например, названия и цены товаров) и сохраняет их в CSV-файл.
• Убедитесь, что данные корректно записаны в файл.
Задача 4: Скриншоты веб-страницы
Напишите скрипт, который:
• Открывает любую веб-страницу.
• Делает скриншот всей страницы и сохраняет его в файл.
• Делает скриншот конкретного элемента на странице (например, изображения или блока текста) и сохраняет его в отдельный файл.
Задача 5: Работа с jаvascript-алертами
Создайте скрипт, который:
• Открывает страницу с кнопкой, вызывающей jаvascript-алерт.
• Нажимает на кнопку и принимает алерт.
• После этого проверяет, что страница перезагрузилась или изменился какой-либо элемент на странице (например, текст или заголовок).