Skip to content

Библиотека реальных примеров

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


Пример 1: Автозаполнение и вход

Сценарий: Автоматический вход на различные платформы (маркетплейсы, соцсети, рекламные кабинеты и т.д.).

python
import requests
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

API_URL     = "http://127.0.0.1:8186"
SESSION_ID  = "вставьте_ваш_session_id"
DRIVER_PATH = r"C:\Program Files (x86)\Mbbrowser_v7.10.20.219\chromedriver.exe"


def get_driver_from_mbbrowser(session_id: str) -> webdriver.Chrome | None:
    """Вспомогательная функция: открыть среду Mbbrowser и вернуть драйвер Selenium"""
    resp = requests.post(
        f"{API_URL}/api/v1/browser/start",
        json={"Session_ID": session_id},
        timeout=30
    )
    data = resp.json()
    if data.get("code") != 0:
        print(f"❌ Ошибка запуска среды: {data.get('message')}")
        return None

    debugger_address = data["data"]["http"]
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", debugger_address)
    service = Service(executable_path=DRIVER_PATH)
    driver = webdriver.Chrome(service=service, options=chrome_options)
    return driver


def auto_login():
    driver = get_driver_from_mbbrowser(SESSION_ID)
    if not driver:
        return

    wait = WebDriverWait(driver, 20)

    try:
        # ── 1. Открытие страницы входа ────────────────────────────────
        driver.get("https://example.com/login")

        # ── 2. Ожидание поля аккаунта и ввод логина ────────────────────
        username_input = wait.until(
            EC.visibility_of_element_located((By.ID, "username"))
        )
        username_input.clear()
        username_input.send_keys("my_account@email.com")
        time.sleep(0.5)  # Короткая пауза для симуляции человеческого ритма

        # ── 3. Ввод пароля ───────────────────────────────────────────
        password_input = driver.find_element(By.ID, "password")
        password_input.clear()
        password_input.send_keys("my_password_123")
        time.sleep(0.3)

        # ── 4. Нажатие кнопки входа ───────────────────────────────────
        login_btn = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
        )
        login_btn.click()

        # ── 5. Ожидание входа (URL перенаправлен на dashboard)
        wait.until(EC.url_contains("/dashboard"))
        print(f"✅ Вход выполнен! Текущая страница: {driver.current_url}")

        # ── 6. После входа Mbbrowser автоматически сохраняет Cookies
        print("🔒 Cookies автоматически сохранены в среде Mbbrowser.")

    except Exception as e:
        print(f"❌ Ошибка при входе: {e}")
        driver.save_screenshot("login_error.png")  # Скриншот при ошибке
    finally:
        driver.quit()


if __name__ == "__main__":
    auto_login()

Сценарий: У вас уже есть данные Cookie для аккаунта, и вы хотите пропустить шаги входа.

python
def inject_cookies_and_enter():
    driver = get_driver_from_mbbrowser(SESSION_ID)
    if not driver:
        return

    # ── 1. Сначала нужно открыть целевой домен ──────────────────────
    driver.get("https://www.amazon.com")

    # ── 2. Подготовка данных Cookie ───────────────────────────────
    cookies = [
        {
            "name": "session-id",
            "value": "123-4567890-1234567",
            "domain": ".amazon.com",
            "path": "/",
            "secure": True
        }
    ]

    # ── 3. Поочередная инъекция Cookies ───────────────────────────
    driver.delete_all_cookies()  # Очистить старые (опционально)
    for cookie in cookies:
        driver.add_cookie(cookie)
    print(f"✅ Внедрено {len(cookies)} Cookies")

    # ── 4. Обновление страницы для применения ─────────────────────
    driver.refresh()
    time.sleep(2)

    # ── 5. Проверка успешного входа ───────────────────────────────
    if "Hello" in driver.page_source or "Account" in driver.title:
        print("✅ Инъекция Cookie успешна, вход выполнен!")
    else:
        print("⚠️ Срок действия Cookies мог истечь.")

    driver.quit()

Пример 3: Пакетный парсинг данных (Список товаров)

Сценарий: Извлечение данных со страниц под авторизацией.

python
def scrape_product_list():
    driver = get_driver_from_mbbrowser(SESSION_ID)
    if not driver:
        return

    wait = WebDriverWait(driver, 20)
    all_products = []

    try:
        driver.get("https://example.com/products?page=1")

        # ── Логика парсинга с пагинацией ────────────────────────────
        page_num = 1
        while True:
            print(f"📄 Парсинг страницы {page_num}...")

            wait.until(EC.presence_of_element_located(
                (By.CSS_SELECTOR, ".product-list")
            ))

            items = driver.find_elements(By.CSS_SELECTOR, ".product-item")
            for item in items:
                try:
                    name  = item.find_element(By.CSS_SELECTOR, ".name").text.strip()
                    price = item.find_element(By.CSS_SELECTOR, ".price").text.strip()
                    all_products.append({"name": name, "price": price, "page": page_num})
                except Exception:
                    pass

            # Поиск кнопки «Далее»; остановка, если не найдена или отключена
            next_btns = driver.find_elements(
                By.CSS_SELECTOR, "a.pagination-next:not([aria-disabled='true'])"
            )
            if not next_btns:
                print("✅ Последняя страница достигнута!")
                break

            next_btns[0].click()
            page_num += 1
            time.sleep(1.5)

    finally:
        driver.quit()

    print(f"\nВсего собрано {len(all_products)} товаров:")
    return all_products

Пример 4: Многопоточность для нескольких аккаунтов

Сценарий: Одновременная работа с несколькими средами Mbbrowser.

python
import threading
import requests

SESSION_LIST = ["ENV_ID_1", "ENV_ID_2", "ENV_ID_3"]

def operate_one_account(session_id: str, thread_id: int):
    print(f"[Поток {thread_id}] Запуск среды {session_id[:8]}...")
    try:
        resp = requests.post(f"{API_URL}/api/v1/browser/start", json={"Session_ID": session_id}, timeout=30)
        data = resp.json()
        if data.get("code") != 0:
            print(f"[Поток {thread_id}] ❌ Ошибка: {data.get('message')}")
            return

        debugger_address = data["data"]["http"]
        chrome_options = Options()
        chrome_options.add_experimental_option("debuggerAddress", debugger_address)
        driver = webdriver.Chrome(service=Service(executable_path=DRIVER_PATH), options=chrome_options)

        driver.get("https://example.com")
        print(f"[Поток {thread_id}] ✅ Операция завершена: {driver.title}")
        driver.quit()
    except Exception as e:
        print(f"[Поток {thread_id}] ❌ Исключение: {e}")
    finally:
        requests.post(f"{API_URL}/api/v1/browser/stop", json={"Session_ID": session_id}, timeout=10)

def batch_operate():
    threads = []
    for i, session_id in enumerate(SESSION_LIST):
        t = threading.Thread(target=operate_one_account, args=(session_id, i + 1))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()
    print("\n🎉 Все аккаунты обработаны!")

Резюме лучших практик

СоветОписание
Явные ожиданияЗамените time.sleep() на WebDriverWait для стабильности.
Скриншоты при ошибкахДелайте save_screenshot() в блоках except для отладки.
Человеческий темпДобавляйте задержки 0.3~1.0s между кликами для имитации реального пользователя.
Не делитесь драйверамиКаждому потоку/аккаунту нужен свой Session_ID и экземпляр драйвера.

TIP

🎉 Поздравляем! Вы освоили полный стек автоматизации для Mbbrowser + Selenium.

По всем вопросам обращайтесь к Справочнику по основным API или используйте Менеджер скриптов автоматизации для управления на Python.