Skip to content

Справочник по основным API

После того как вы получили управление над браузером Mbbrowser, самая важная задача — направлять Selenium для манипуляции страницами в соответствии с вашими намерениями. В этой главе простым языком объясняются основные API, которые вы будете использовать в 80% случаев.


1. Навигация и управление страницей

Открыть URL

python
driver.get("https://www.amazon.com")
  • Простым языком: Скажите браузеру «перейди по этому адресу».
  • Скрипт будет заблокирован здесь до тех пор, пока страница не завершит загрузку (сработает событие onload), прежде чем продолжить.

Ожидание загрузки страницы

Скорость сети варьируется. Если последующий код выполнится до того, как страница завершит отрисовку, скрипт завершится ошибкой, так как не сможет найти элементы. Самый надежный метод — использовать «умные ожидания» (см. раздел 3).

Получение информации о странице

python
title = driver.title                  # Получить заголовок страницы
url   = driver.current_url           # Получить текущий URL
html  = driver.page_source           # Получить полный HTML-код страницы

Назад, Вперед, Обновить

python
driver.back()     # Назад (эквивалент стрелки назад)
driver.forward()  # Вперед
driver.refresh()  # Обновить страницу (F5)

2. Поиск элементов страницы

IMPORTANT

Поиск элемента является предварительным условием для всех операций. Нет найденного элемента = нет точки входа = невозможно выполнить никакие действия.

Шпаргалка по типам локаторов

В Selenium 4 позиционирование стандартизировано с помощью класса By:

python
from selenium.webdriver.common.by import By
Метод позиционированияПример кодаКогда использовать
IDBy.ID, "username"Самый быстрый и стабильный; приоритетный выбор.
CSS SelectorBy.CSS_SELECTOR, "#username"Гибкий; самый универсальный инструмент.
XPathBy.XPATH, "//input[@name='user']"Необходим для сложных структур; сложен в написании.
Class NameBy.CLASS_NAME, "btn-primary"Полезен для простых случаев; осторожно с дубликатами имен.
Tag NameBy.TAG_NAME, "input"Редко используется сам по себе.
Link TextBy.LINK_TEXT, "Log In"Удобен для кликов по ссылкам.
Name AttributeBy.NAME, "password"Часто встречается у элементов форм.

Поиск одного элемента

python
# Найти элемент с id="username" (вызывает NoSuchElementException, если не найден)
element = driver.find_element(By.ID, "username")

# Найти первый элемент, соответствующий CSS-селектору
btn = driver.find_element(By.CSS_SELECTOR, ".login-form button[type='submit']")

Поиск нескольких элементов (Возвращает список)

python
# Найти все элементы списка товаров
items = driver.find_elements(By.CSS_SELECTOR, ".product-item")
print(f"Всего найдено {len(items)} товаров")

# Итерация по каждому элементу
for item in items:
    print(item.text)

Как найти селекторы в браузере? (Практический совет)

  1. Откройте целевую веб-страницу в Mbbrowser.
  2. Нажмите правой кнопкой на кнопку или поле, которым хотите манипулировать → Просмотреть код (Inspect).
  3. В HTML-коде DevTools нажмите правой кнопкой → Copy → Copy selector (CSS-селектор) или Copy XPath.
  4. Вставьте его в свой код Selenium.

3. Механизмы ожидания (Инструмент против сбоев)

CAUTION

time.sleep(N) — худший способ ожидания. Он тратит время впустую при быстрой сети и все равно приводит к сбоям при медленной. Используйте механизм «умного ожидания» Selenium.

Явное ожидание (Настоятельно рекомендуется)

Продолжать только при выполнении определенного условия, ожидая до N секунд и выдавая ошибку при превышении времени:

python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# Ждать до 15 секунд, пока элемент с id="username" не станет видимым
wait = WebDriverWait(driver, 15)
username_input = wait.until(
    EC.visibility_of_element_located((By.ID, "username"))
)

Общие условия ожидания EC.xxx:

Условие ожиданияОписание
EC.presence_of_element_locatedЭлемент присутствует в DOM (не обязательно видим).
EC.visibility_of_element_locatedЭлемент присутствует и видим (Рекомендуется).
EC.element_to_be_clickableЭлемент видим и доступен для клика.
EC.text_to_be_present_in_elementКонкретный элемент содержит указанный текст.
EC.url_containsТекущий URL содержит указанную строку.
EC.alert_is_presentПоявилось всплывающее окно.

Пример: Ждать перенаправления после входа

python
# Нажать кнопку входа
driver.find_element(By.ID, "loginBtn").click()

# Ждать, пока URL не будет содержать "/dashboard" (признак успешного входа)
wait = WebDriverWait(driver, 20)
wait.until(EC.url_contains("/dashboard"))
print("Перенаправление после входа успешно!")

4. Симуляция человеческого взаимодействия

Ввод текста

python
# Очистить поле ввода и ввести данные
import time

input_box = driver.find_element(By.ID, "username")
input_box.clear()           # Очистить текущее содержимое
input_box.send_keys("mbbrowser_user")  # Ввести текст

# Симуляция человеческого набора (посимвольный ввод с задержкой)
def human_type(element, text, delay=0.08):
    """Имитирует скорость набора текста человеком с паузами между символами."""
    for char in text:
        element.send_keys(char)
        time.sleep(delay)

Клики по элементам

python
btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
btn.click()

Симуляция клавиш клавиатуры

python
from selenium.webdriver.common.keys import Keys

# Нажать Enter (часто используется для отправки поиска)
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Mbbrowser")
search_box.send_keys(Keys.RETURN)

# Выделить все + Удалить
input_box.send_keys(Keys.CONTROL + "a")  # Ctrl+A
input_box.send_keys(Keys.DELETE)          # Del

Выбор в выпадающем списке (Dropdown)

python
from selenium.webdriver.support.ui import Select

# Выбор по видимому тексту
select = Select(driver.find_element(By.ID, "country"))
select.select_by_visible_text("USA")

# Выбор по атрибуту value
select.select_by_value("US")

5. Получение информации об элементах

python
el = driver.find_element(By.ID, "user-info")

# Получить видимый текст
text = el.text

# Получить значение конкретного атрибута
href  = el.get_attribute("href")
value = el.get_attribute("value")
cls   = el.get_attribute("class")

# Определение статуса
el.is_displayed()   # Видим ли он?
el.is_enabled()     # Доступен ли для взаимодействия?
el.is_selected()    # Выбран ли чекбокс/радиокнопка?

Среды Mbbrowser сохраняют Cookies постоянно, но вы также можете манипулировать ими через код:

python
# Получить все Cookies
all_cookies = driver.get_cookies()
print(all_cookies)

# Добавить Cookie (Нужно сначала открыть URL этого домена)
driver.get("https://example.com")
driver.add_cookie({
    "name": "session_id",
    "value": "abc123",
    "domain": ".example.com"
})

# Удалить все Cookies
driver.delete_all_cookies()

7. Обработка всплывающих окон (Alerts)

python
# Ждать появления алерта
wait.until(EC.alert_is_present())

# Переключиться на объект алерта
alert = driver.switch_to.alert

# Прочитать текст алерта
print(alert.text)

# Принять (ОК)
alert.accept()

# Отклонить (Отмена)
alert.dismiss()

8. Работа с несколькими вкладками/окнами

python
# Открыть новую вкладку
driver.switch_to.new_window("tab")

# Получить дескрипторы всех окон
handles = driver.window_handles
print(f"Всего вкладок: {len(handles)}")

# Переключиться на указанную вкладку
driver.switch_to.window(handles[-1])   # Перейти к последней (новой)

9. Переключение iframe

Окна входа или реклама иногда размещаются внутри тегов iframe. Вы должны переключиться в iframe перед поиском элементов внутри него:

python
# Переключиться в iframe по CSS-селектору
iframe = driver.find_element(By.CSS_SELECTOR, "iframe#loginFrame")
driver.switch_to.frame(iframe)

# Теперь взаимодействуем с элементами внутри iframe
driver.find_element(By.ID, "username").send_keys("my_user")

# Вернуться к основной странице по завершении
driver.switch_to.default_content()

10. Скриншоты

python
# Скриншот всей страницы
driver.save_screenshot("screenshot.png")

# Скриншот одного элемента
element = driver.find_element(By.ID, "product-image")
element.screenshot("product.png")

11. Инъекция JavaScript (Расширенный уровень)

Если элементы «не кликаются» (заблокированы или перехвачены JS), вы можете внедрить JS для обхода:

python
# Принудительный клик через JS
driver.execute_script("arguments[0].click();", element)

# Прокрутка к элементу
driver.execute_script("arguments[0].scrollIntoView();", element)

# Прокрутка в самый низ страницы
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Получить результат выполнения JS
title = driver.execute_script("return document.title;")

TIP

Как только вы освоите эти API, вы сможете справиться с подавляющим большинством сценариев! В следующей главе Библиотека реальных примеров представлены четыре готовых бизнес-шаблона.