Библиотека 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 вашей системы.
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Edge: EdgeDriver
- Safari: SafariDriver
Выберите браузер и инициализируйте 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 пытается автоматически определить установленную в системе версию браузера и загрузить соответствующий драйвер. Это означает, что пользователям больше не нужно вручную скачивать драйвер и задавать путь к нему, если только им не нужна конкретная версия драйвера.
Пример
driver = webdriver.Chrome() # Если используете другой браузер, например Firefox, измените соответствующим образом
В отечественных сетевых средах автоматическое обнаружение и загрузка драйвера требуют иной сетевой среды, поэтому рекомендуется вручную скачать драйвер, а затем указать путь к драйверу.
В Selenium 4 вместо прямого указания пути к драйверу в webdriver.Chrome вы задаёте его путём введения объекта Service. Это позволяет избежать предупреждений об устаревании и гарантирует правильную загрузку драйвера. Например:
Пример
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.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:
Пример
# Использовать браузер Chrome
driver = webdriver.Chrome()
# Или используйте браузер Firefox
# driver = webdriver.Firefox()
# Или используйте браузер Edge
# driver = webdriver.Edge()
Открыть веб-страницу
Используйте метод get() для открытия веб-страницы:
driver.get("https://www.baidu.com")
Найти элементы страницы
Элементы страницы можно находить различными способами, например, по 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.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.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() |