tak.lol
11 январь 2025
7
0
Не нравится 0 Нравится

Библиотека 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-алерт.
• Нажимает на кнопку и принимает алерт.
• После этого проверяет, что страница перезагрузилась или изменился какой-либо элемент на странице (например, текст или заголовок).
Комментарии к материалу
Комментировать
Ваш комментарий: