Библиотека selenium для Python

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

Selenium предоставляет API для различных языков программирования для тестирования. Текущая официальная документация API включает C#, JavaScript, Java, Python и Ruby.

Учебник по Selenium:https://www.example.com/selenium/


Установка Selenium и WebDriver

Установка Selenium

Чтобы начать использовать Selenium, сначала нужно установить библиотеку selenium и скачать WebDriver для вашего браузера.

Установка Selenium с помощью pip:

pip install selenium

После установки вы можете использовать следующую команду, чтобы проверить информацию о версии selenium:

pip show selenium

Вы также можете проверить это с помощью кода Python:

import selenium
print(selenium.__version__)

Скачать WebDriver

Selenium требует WebDriver для взаимодействия с браузером.

Разные браузеры требуют разных WebDriver. Например, для браузера Chrome требуется ChromeDriver. Вам нужно скачать соответствующий WebDriver для используемого браузера и убедиться, что он находится в PATH вашей системы.

Выберите браузер и инициализируйте WebDriver:

Пример

from selenium import webdriver

# Использовать браузер Chrome
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# Или используйте браузер Firefox
# driver = webdriver.Firefox(executable_path='/path/to/geckodriver')

# Или используйте браузер Edge
# driver = webdriver.Edge(executable_path='/path/to/msedgedriver')

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

Пример

from selenium import webdriver

driver = webdriver.Chrome()  # Если используете другой браузер, например Firefox, измените соответствующим образом

В отечественных сетевых средах автоматическое обнаружение и загрузка драйвера требуют иной сетевой среды, поэтому рекомендуется вручную скачать драйвер, а затем указать путь к драйверу.

В Selenium 4 вместо прямого указания пути к драйверу в webdriver.Chrome вы задаёте его путём введения объекта Service. Это позволяет избежать предупреждений об устаревании и гарантирует правильную загрузку драйвера. Например:

Пример

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="PATH_TO_DRIVER")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

Следующий код указывает путь к файлу драйвера для получения заголовка страницы:

Пример

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

# Установите правильный путь к драйверу
service = ChromeService(executable_path="/EXAMPLE/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)


# Откройте веб-сайт
driver.get("https://cn.bing.com")

# Получите заголовок страницы
print(driver.title)

# Закройте браузер
driver.quit()

Базовое использование

Инициализация WebDriver

Выберите браузер и инициализируйте WebDriver:

Пример

from selenium import webdriver

# Использовать браузер Chrome
driver = webdriver.Chrome()

# Или используйте браузер Firefox
# driver = webdriver.Firefox()

# Или используйте браузер Edge
# driver = webdriver.Edge()

Открыть веб-страницу

Используйте метод get() для открытия веб-страницы:

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

Найти элементы страницы

Элементы страницы можно находить различными способами, например, по ID, имени класса, имени тега и т. д.:

Пример

# Найти элемент по ID
search_box = driver.find_element("id", "kw")

# Найти элемент по имени класса
search_button = driver.find_element("class name", "s_ipt")

# Найти элемент по имени тега
links = driver.find_elements("tag name", "a")

Имитация действий пользователя

Selenium может имитировать действия пользователя в браузере, такие как клики, ввод текста и т. д.:

Пример

# Ввод текста в поле поиска
search_box.send_keys("Selenium Python")

# Нажать кнопку поиска
search_button.click()

Получение атрибутов и текста элемента

Вы можете получить значения атрибутов или текстовое содержимое элементов страницы:

Пример

# Получить текст элемента
element_text = search_box.text

# Получить значение атрибута элемента
element_attribute = search_box.get_attribute("placeholder")

Ожидания

Иногда странице требуется время для загрузки. Вы можете использовать явное ожидание или неявное ожидание, чтобы гарантировать, что элемент доступен для взаимодействия:

Пример

from selenium.webdriver.common.by import С помощью
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, "kw"))
)

# Неявное ожидание
driver.implicitly_wait(10)

Закройте браузер

После завершения операций не забудьте закрыть браузер:

driver.quit()

Простая веб-автоматизация

Ниже приведен пример простого проекта Selenium, используемого для автоматизации поиска по ключевым словам и получения заголовка страницы результатов.

Пример

from selenium import webdriver
from selenium.webdriver.common.by import By  # Импорт модуля By
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Установите путь к драйверу и запустите браузер
service = ChromeService(executable_path="/EXAMPLE/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)


try:
    # Откройте главную страницу Baidu
    driver.get("https://www.baidu.com")

    # Найдите элемент поля поиска
    search_box = driver.find_element(By.ID, "kw")

    # Введите поисковый запрос
    search_box.send_keys("Selenium Python")

    # Отправить форму поиска
    search_box.send_keys(Keys.RETURN)

    # Дождаться загрузки результатов поиска
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "content_left"))
    )

    # Вывести заголовок страницы
    print("Заголовок страницы:", driver.title)

finally:
    # Закройте браузер
    driver.quit()

Общие методы Selenium

В следующей таблице перечислены общие методы библиотеки selenium:

МетодОписаниеПример кода
webdriver.Chrome()Инициализировать экземпляр браузера Chrome.driver = webdriver.Chrome()
driver.get(url)Перейти по указанному URL-адресу.driver.get("https://example.com")
driver.find_element(By, value)Найти первый соответствующий элемент.element = driver.find_element(By.ID, "id")
driver.find_elements(By, value)Найти все соответствующие элементы.elements = driver.find_elements(By.CLASS_NAME, "class")
element.click()Кликнуть по элементу.element.click()
element.send_keys(value)Отправить ввод с клавиатуры в поле ввода.element.send_keys("text")
element.textПолучить текстовое содержимое элемента.text = element.text
driver.back()Назад в браузере.driver.back()
driver.forward()Вперёд в браузере.driver.forward()
driver.refresh()Обновить текущую страницу.driver.refresh()
driver.execute_script(script, *args)Выполнить скрипт JavaScript.driver.execute_script("alert('Hello!')")
driver.switch_to.frame(frame_reference)Переключиться на указанный iframe.driver.switch_to.frame("frame_id")
driver.switch_to.default_content()Переключиться обратно на основной документ.driver.switch_to.default_content()
driver.quit()Закрыть браузер и завершить драйвер.driver.quit()
driver.close()Закрыть текущее окно.driver.close()
Другие расширения