Библиотека реальных примеров
В этой главе представлены четыре шаблона бизнес-скриптов, которые можно напрямую применять в реальных проектах. Они охватывают наиболее распространенные сценарии автоматизации для нескольких аккаунтов.
Пример 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()Пример 2: Инъекция Cookie для мгновенного входа
Сценарий: У вас уже есть данные 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.
