Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

web-parser-mcp

web-parser-mcp107MIT3.7.9

🚀 MCP SERVER FIXED v3.7.9! Resolved import errors, middleware conflicts, type hints - NOW WORKING PERFECTLY!

mcp, model-context-protocol, web-scraping, html-parser, python, beautifulsoup, playwright, hybrid-architecture, javascript-sites, authentication, oauth-jwt, interactive-login, auto-pagination, infinite-scroll, parallel-processing, structured-extraction, media-download, caching, debug-screenshots, web-parsing, crawler, scraper, form-login, session-management, browser-cookies, anti-detection, stealth-mode, spa-support, dynamic-content, performance-optimization, data-mining, automation, modular-architecture, code-refactoring, clean-code, maintainable, functional-groups, organized-tools, scalable-design, clean-architecture

readme

🔧 Web Parser MCP Server v3.7.8 - CRITICAL BUGS FIXED! 🚀

РЕВОЛЮЦИОННАЯ АРХИТЕКТУРА! 🚀 ОДИН браузерный контекст для ВСЕХ инструментов! Автоматическое разделение сессии! Идеальное управление авторизацией!

🔥 КРИТИЧЕСКИЙ ФИКС v3.7.8 - BUGS ELIMINATION!

ИСПРАВЛЕНЫ КРИТИЧЕСКИЕ ПРОБЛЕМЫ:

1. 🔴 Undefined Variables Bug (login_form_tool)

  • 🐛 Проблема: Использование неопределенных переменных login_response, response.url
  • ✅ Решение: Заменены на корректные login_result.get()
  • 📁 Файл: src/tools/auth.py

2. 🔴 Missing Await Bug (api_test.py)

  • 🐛 Проблема: get_http_client() вызывался без await
  • ✅ Решение: Добавлен await для асинхронного вызова
  • 📁 Файл: src/tools/api_test.py

3. 🔴 Architectural Inconsistency (navigation.py)

  • 🐛 Проблема: Manual browser creation вместо unified session
  • ✅ Решение: Переписано для использования UnifiedHTTPClient
  • 📁 Файл: src/tools/navigation.py

4. 🔴 Bare Except Clauses (audit.py)

  • 🐛 Проблема: except: без спецификации исключений скрывает ошибки
  • ✅ Решение: Заменены на специфичные исключения
  • 📁 Файл: src/utils/audit.py

5. 🔴 Infinite Loop Risk (http_client.py)

  • 🐛 Проблема: ParallelBrowserManager мог зависнуть навсегда
  • ✅ Решение: Добавлен timeout 30 секунд
  • 📁 Файл: src/utils/http_client.py

🧪 РЕЗУЛЬТАТ ТЕСТИРОВАНИЯ:

✅ auth.py imports OK
✅ api_client OK
✅ http_client OK
🎯 All critical fixes verified!

🆕 НОВЫЕ ПРОДАКШЕН ВОЗМОЖНОСТИ (ЭТАП 4 ЗАВЕРШЕН!)

🐳 DOCKER & CONTAINIZATION

  • Multi-stage Dockerfile - оптимизированный для разработки и продакшена
  • Docker Compose - полная инфраструктура (Redis, PostgreSQL, Nginx, Prometheus, Grafana)
  • Production ready - с SSL, rate limiting, health checks
  • Development setup - hot reload, debugging, testing

🔄 CI/CD PIPELINE

  • GitHub Actions - полный pipeline с тестами, security scan, docker build
  • Automated releases - semantic versioning, PyPI publishing
  • Security scanning - Bandit, Trivy, dependency checks
  • Performance testing - nightly builds, load testing

📊 MONITORING & OBSERVABILITY

  • Prometheus metrics - comprehensive monitoring
  • Grafana dashboards - visualization and alerting
  • Health checks - multi-component system monitoring
  • Structured logging - JSON logs with context tracking

📚 PROFESSIONAL DOCUMENTATION

  • MkDocs site - comprehensive documentation
  • API reference - auto-generated from docstrings
  • Deployment guides - Docker, Kubernetes, AWS, GCP
  • Developer guides - setup, testing, contributing

🎯 ГОТОВ К ПРОДАКШЕНУ! Полная DevOps инфраструктура, мониторинг, CI/CD и документация!

🚀 РЕВОЛЮЦИОННАЯ АРХИТЕКТУРА v3.7.0 - UNIFIED BROWSER SESSION!

РЕВОЛЮЦИОННЫЕ ИЗМЕНЕНИЯ:

  • 🔄 ПОЛНЫЙ СДВИГ АРХИТЕКТУРЫ - все HTTP-инструменты теперь используют один браузерный контекст
  • 🎯 ИДЕАЛЬНОЕ УПРАВЛЕНИЕ СЕССИЕЙ - browser_login автоматически делится сессией со ВСЕМИ инструментами
  • 🚫 УБРАНЫ КОМПЛЕКСНЫЕ МЕХАНИЗМЫ - нет больше ручного переноса кук между requests и Playwright
  • ⚡ ОДИН БРАУЗЕРНЫЙ КОНТЕКСТ - для всех операций, что обеспечивает consistency

🏗️ НОВАЯ АРХИТЕКТУРА:

// Раньше: Сложная синхронизация между requests и Playwright
browser_login() → сохраняет куки в authenticated_session
fetch_html() → вручную переносит куки в requests.Session
parse_page() → вручную переносит куки в requests.Session

// Теперь: Единый браузерный контекст для всех инструментов
browser_login() → логинится в unified browser session
fetch_html() → использует тот же browser session
parse_page() → использует тот же browser session
parallel_fetch() → использует тот же browser session

🎯 ПРЕИМУЩЕСТВА НОВОЙ АРХИТЕКТУРЫ:

  • 💯 100% НАДЕЖНОЕ УПРАВЛЕНИЕ СЕССИЕЙ - нет больше проблем с синхронизацией
  • 🔒 БЕЗОПАСНОСТЬ - один браузерный контекст = consistent authentication state
  • ⚡ ПРОИЗВОДИТЕЛЬНОСТЬ - переиспользование браузерной сессии
  • 🧪 НАДЕЖНОСТЬ - нет сложной логики переноса кук
  • 🎯 ПРОСТОТА - все инструменты автоматически используют сессию

🔧 ПЕРЕПИСАННЫЕ ИНСТРУМЕНТЫ:

  • fetch_html - теперь использует UnifiedHTTPClient (Playwright only)
  • parallel_fetch - обновлен для использования unified browser session
  • browser_login - использует unified session + нет cleanup
  • auto_paginate - использует unified browser context
  • infinite_scroll - использует unified browser context
  • debug_screenshot - использует unified browser context

🚀 ИДЕАЛЬНЫЙ WORKFLOW:

// 1. Логин один раз
{
  "tool": "browser_login",
  "arguments": {
    "url": "https://site.com/login",
    "username": "user@email.com",
    "password": "password"
  }
}

// 2. ВСЕ инструменты автоматически используют сессию!
{
  "tool": "fetch_html",
  "arguments": {"url": "https://site.com/protected"}
}
// ✅ session_used: {"source": "unified_browser_session", "cookies_count": 15}

{
  "tool": "parallel_fetch",
  "arguments": {"urls": ["https://site.com/page1", "https://site.com/page2"]}
}
// ✅ Оба запроса используют авторизацию автоматически!

{
  "tool": "auto_paginate",
  "arguments": {"url": "https://site.com/data", "max_pages": 5}
}
// ✅ Весь процесс пагинации использует авторизацию!

Теперь авторизация работает идеально для ВСЕХ инструментов! 🎉

🚀 УЛУЧШЕННАЯ ЗАГРУЗКА КОНТЕНТА v3.7.1 - ENHANCED PLAYWRIGHT LOADING!

НОВЫЕ ВОЗМОЖНОСТИ ЗАГРУЗКИ КОНТЕНТА:

  • 🎯 МНОГОУРОВНЕВАЯ СТРАТЕГИЯ ОЖИДАНИЯ - domcontentloaded + networkidle + JavaScript delay
  • 🎪 ПОДДЕРЖКА СЕЛЕКТОРОВ - wait_for="#content" для ожидания конкретных элементов
  • 🔒 STEALTH РЕЖИМ - антидетекция для обхода защиты от ботов
  • ⚡ УЛУЧШЕННАЯ ДИАГНОСТИКА - performance метрики, информация о стратегиях ожидания
  • 🎯 ПОЛНЫЙ КОНТЕНТ SPA - динамический контент загружается полностью

🎯 НОВАЯ АРХИТЕКТУРА ЗАГРУЗКИ:

// Раньше: Простая загрузка
{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://spa-site.com"
  }
}
// ❌ Мог не загрузить динамический контент

// Теперь: Enhanced loading с полным контролем
{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://spa-site.com",
    "wait_for": "#main-content",
    "stealth": true,
    "debug": true
  }
}
// ✅ Полный контент + performance метрики + диагностика

🔧 СТРАТЕГИИ ОЖИДАНИЯ:

  1. domcontentloaded - базовая загрузка DOM
  2. selector waiting - ожидание конкретного элемента (если указан wait_for)
  3. networkidle - ожидание пока сеть успокоится
  4. javascript_delay - дополнительное время для JS выполнения

🛡️ STEALTH РЕЖИМ:

{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://protected-site.com",
    "stealth": true
  }
}

Включает:

  • ✅ Удаление navigator.webdriver
  • ✅ Скрытие автоматизации Chrome
  • ✅ Реалистичные browser fingerprints
  • ✅ JavaScript антидетекция
  • ✅ Геолокация и timezone spoofing

📊 УЛУЧШЕННАЯ ДИАГНОСТИКА:

{
  "method": "playwright_enhanced",
  "wait_strategies_used": ["domcontentloaded", "selector:#content", "networkidle", "javascript_delay"],
  "performance": {
    "dom_content_loaded": 245.5,
    "load_complete": 1250.8,
    "total_time": 1456.3
  },
  "page_title": "Dynamic SPA Page",
  "final_url": "https://spa-site.com/redirected"
}

Теперь fetch_html получает ПОЛНЫЙ контент современных веб-приложений! 🚀

🔄 ПОЛНАЯ МИГРАЦИЯ НА PLAYWRIGHT v3.7.2 - NO MORE REQUESTS API!

КОМПЛЕТНАЯ ЗАМЕНА REQUESTS API:

  • 🚫 УБРАНЫ ВСЕ requests СИСТЕМНЫЕ ВЫЗОВЫ - только UnifiedHTTPClient
  • 🔄 ПЕРЕПИСАНЫ ВСЕ HTTP-ИНСТРУМЕНТЫ - единая архитектура
  • 🎯 ПОЛНАЯ СОВМЕСТИМОСТЬ СЕССИЙ - все инструменты делят браузерный контекст

🔧 ПЕРЕПИСАННЫЕ ИНСТРУМЕНТЫ:

  • extract_links_tool - теперь использует UnifiedHTTPClient (был requests)
  • parse_page_tool - теперь использует UnifiedHTTPClient (был requests)
  • download_media_tool - гибридный подход: UnifiedHTTPClient для HTML + aiohttp для файлов
  • login_form_tool - теперь использует UnifiedHTTPClient (был requests)

🎯 НОВАЯ АРХИТЕКТУРА:

// Раньше: Разные API для разных инструментов
extract_links() → session.get() // requests API
parse_page() → session.get()    // requests API
download_media() → session.get() // requests API
login_form() → session.post()   // requests API

// Теперь: Единый UnifiedHTTPClient для всех
extract_links() → http_client.get() // Playwright browser
parse_page() → http_client.get()    // Playwright browser
download_media() → http_client.get() // Playwright browser
login_form() → http_client.post()   // Playwright browser

🏗️ ПРЕИМУЩЕСТВА ПОЛНОЙ МИГРАЦИИ:

  • 💯 100% ЕДИНАЯ АРХИТЕКТУРА - нет больше смешанных API
  • 🔐 СОВЕРШЕННОЕ УПРАВЛЕНИЕ СЕССИЕЙ - все запросы через один браузер
  • 🎯 ПОЛНАЯ СОВМЕСТИМОСТЬ - куки автоматически разделяются между всеми инструментами
  • ⚡ ЛУЧШАЯ НАДЕЖНОСТЬ - нет проблем синхронизации между requests и Playwright
  • 🔄 ПРОСТОТА ПОДДЕРЖКИ - один HTTP клиент для всех операций

📊 СТАТИСТИКА МИГРАЦИИ:

  • ✅ Убрано: 8+ вызовов requests API
  • ✅ Добавлено: UnifiedHTTPClient для всех HTTP операций
  • ✅ Улучшено: Управление сессиями и куками
  • ✅ Сохранено: Все существующие возможности

Теперь ВСЕ HTTP-инструменты используют Playwright через UnifiedHTTPClient! 🎉

🎯 100% ОБЪЕДИНЕННАЯ АРХИТЕКТУРА v3.7.3 - NO REQUESTS API REMAINING!

ФИНАЛЬНАЯ МИГРАЦИЯ:

  • 🚫 ПОЛНОСТЬЮ УБРАН requests API - последний инструмент исправлен
  • 🔄 extract_structured_data_tool - теперь использует UnifiedHTTPClient
  • 🎯 100% ЕДИНАЯ АРХИТЕКТУРА - все инструменты на Playwright
  • 💯 ПОЛНАЯ СОВМЕСТИМОСТЬ СЕССИЙ - идеальное управление авторизацией

🔧 ФИНАЛЬНЫЙ СПИСОК ИНСТРУМЕНТОВ:

  • fetch_html - UnifiedHTTPClient (Playwright enhanced)
  • extract_links_tool - UnifiedHTTPClient (Playwright)
  • parse_page_tool - UnifiedHTTPClient (Playwright)
  • download_media_tool - UnifiedHTTPClient (HTML) + aiohttp (files)
  • login_form_tool - UnifiedHTTPClient (Playwright)
  • extract_structured_data_tool - UnifiedHTTPClient (Playwright)

📊 ОКОНЧАТЕЛЬНАЯ СТАТИСТИКА:

  • ✅ Убрано: 10+ вызовов requests API
  • ✅ Добавлено: UnifiedHTTPClient для всех HTTP операций
  • ✅ Улучшено: 100% совместимость сессий
  • ✅ Сохранено: Все существующие возможности

🏗️ ИТОГОВАЯ АРХИТЕКТУРА:

// Раньше: Смешанные API
fetch_html() → requests.Session + Playwright (hybrid)
extract_links() → requests.Session
parse_page() → requests.Session
login_form() → requests.Session
download_media() → requests.Session
extract_structured_data() → requests.Session

// Теперь: 100% Unified Playwright
fetch_html() → http_client.get()     // Playwright enhanced
extract_links() → http_client.get()  // Playwright
parse_page() → http_client.get()     // Playwright
login_form() → http_client.post()    // Playwright
download_media() → http_client.get() // Playwright + aiohttp
extract_structured_data() → http_client.get() // Playwright

🎉 ВСЕ ИНСТРУМЕНТЫ ТЕПЕРЬ ИСПОЛЬЗУЮТ PLAYWRIGHT ЧЕРЕЗ UNIFIEDHTTPCLIENT!

Больше НЕТ requests API в инструментах! 🚀

🚶 ПОЛНАЯ ИМИТАЦИЯ ЧЕЛОВЕКА v3.7.4 - HUMAN-LIKE NAVIGATION!

ПОЛНАЯ ИМИТАЦИЯ ПОВЕДЕНИЯ ЧЕЛОВЕКА:

  • 🎯 НАБОР URL В АДРЕСНОЙ СТРОКЕ - посимвольный ввод с задержками
  • ⌨️ НАЖАТИЕ ENTER - вместо page.goto()
  • 👀 ПРОКРУТКА СТРАНИЦЫ - имитация чтения человеком
  • 🖱️ ДВИЖЕНИЯ МЫШИ - реалистичные перемещения курсора
  • ⏱️ СЛУЧАЙНЫЕ ПАУЗЫ - между действиями

🎯 НОВАЯ АРХИТЕКТУРА НАВИГАЦИИ:

// Раньше: Прямые HTTP запросы
page.goto(url)           // API вызов
page.content()           // Чтение HTML

// Теперь: Имитация человека
await keyboard.type(url, {delay: 50})  // Набор текста
await keyboard.press('Enter')           // Нажатие Enter
await page.mouse.wheel(0, 300)         // Прокрутка
await page.mouse.move(x, y, {steps: 20}) // Движение мыши

🚀 ПАРАЛЛЕЛЬНЫЕ БРАУЗЕРЫ:

// parallel_fetch теперь использует:
Browser Pool (до 5 браузеров)
├── Browser 1 → URL 1 (human navigation)
├── Browser 2 → URL 2 (human navigation)
├── Browser 3 → URL 3 (human navigation)
└── Browser 4 → URL 4 (human navigation)

🎯 ПРЕИМУЩЕСТВА НОВОЙ АРХИТЕКТУРЫ:

  • 🕵️ ОБХОД ЗАЩИТЫ - детекторы ботов не распознают автоматизацию
  • 🎭 РЕАЛИСТИЧНОЕ ПОВЕДЕНИЕ - движения мыши, прокрутка, паузы
  • ⚡ ИСТИННЫЙ ПАРАЛЛЕЛИЗМ - каждый URL в отдельном браузере
  • 🔒 ЛУЧШАЯ СОВМЕСТИМОСТЬ - с динамическими и защищенными сайтами

📊 СТАТИСТИКА ИМИТАЦИИ:

  • ✅ 10+ шагов имитации поведения человека
  • ✅ 50ms задержка между символами при наборе URL
  • ✅ 20 шагов движения мыши к элементам
  • ✅ 3 прокрутки страницы для имитации чтения
  • ✅ 5 браузеров максимум для параллельной работы

Теперь инструменты ведут себя как настоящий пользователь! 🎭

🚀 ЭФФЕКТИВНЫЙ API + БРАУЗЕРНАЯ СЕССИЯ v3.7.5 - BEST OF BOTH WORLDS!

ГИБРИДНАЯ АРХИТЕКТУРА - ЛУЧШЕЕ ОТ ДВУХ МИРОВ:

  • 🚀 БЫСТРЫЕ API ЗАПРОСЫ - requests для высокой производительности
  • 🔐 СОВЕРШЕННОЕ УПРАВЛЕНИЕ СЕССИЕЙ - куки из браузерной сессии
  • 🎯 АВТОМАТИЧЕСКОЕ ПРОКИДЫВАНИЕ КУК - после browser_login все работает
  • ⚡ ЭФФЕКТИВНОСТЬ + БЕЗОПАСНОСТЬ - скорость requests + надежность браузера

🏗️ НОВАЯ АРХИТЕКТУРА:

// Раньше: Чистый Playwright (медленный для больших объемов)
page.goto(url) → ожидание загрузки → чтение HTML

// Теперь: Гибридный подход
1. browser_login() → создает браузерную сессию с куками
2. fetch_html() → использует SessionAPIClient с браузерными куками
3. Все инструменты → автоматически используют session cookies

🎯 ПРЕИМУЩЕСТВА НОВОГО ПОДХОДА:

  • 🚀 ВЫСОКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ - requests API для быстрой работы
  • 🔐 НАДЕЖНАЯ АУТЕНТИФИКАЦИЯ - куки из реальной браузерной сессии
  • ⚡ ЭФФЕКТИВНОСТЬ - нет overhead от браузерной автоматизации
  • 🎯 ПРОСТОТА ИСПОЛЬЗОВАНИЯ - один browser_login, все остальное работает
  • 🔄 АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ - куки обновляются из браузерной сессии

📊 КАК ПРОКИДЫВАЮТСЯ КУКИ:

// 1. Логин в браузере
browser_login(url, username, password)
// ✅ Создает браузерную сессию с куками

// 2. Автоматическое обновление API клиента
api_client.update_from_browser_session()
// ✅ Копирует куки из браузера в requests.Session

// 3. Все последующие запросы используют куки
api_client.get("https://protected-site.com/api/data")
// ✅ Автоматически отправляет session cookies

🛠️ КАК ЭТО РАБОТАЕТ:

# SessionAPIClient - эффективный requests клиент с браузерными куками
class SessionAPIClient:
    def update_from_browser_session(self):
        """Копирует куки из браузерной сессии в requests.Session"""

    def get(self, url, headers=None, params=None):
        """GET запрос с session куками"""

    def post(self, url, data=None, json_data=None):
        """POST запрос с session куками"""

🎯 IDEAL WORKFLOW:

// 1. Один раз логинимся в браузере
{
  "tool": "browser_login",
  "arguments": {
    "url": "https://site.com/login",
    "username": "user",
    "password": "pass"
  }
}

// 2. Все инструменты автоматически используют session cookies
{
  "tool": "fetch_html",
  "arguments": {"url": "https://site.com/protected"}
}
// ✅ Использует browser session cookies

{
  "tool": "extract_links_tool",
  "arguments": {"url": "https://site.com/data"}
}
// ✅ Автоматически аутентифицирован

{
  "tool": "parallel_fetch",
  "arguments": {"urls": ["url1", "url2", "url3"]}
}
// ✅ Все запросы с session cookies

🎉 Теперь у вас БЫСТРЫЕ API запросы + НАДЕЖНАЯ браузерная аутентификация!

🔧 АРХИТЕКТУРНЫЕ ИСПРАВЛЕНИЯ v3.7.6 - CRITICAL FIXES!

ИСПРАВЛЕНЫ КРИТИЧЕСКИЕ ПРОБЛЕМЫ:

1. 🔄 УНИФИЦИРОВАННАЯ АРХИТЕКТУРА

  • debug_screenshot_tool теперь использует UnifiedHTTPClient вместо старой архитектуры
  • Все инструменты работают через единую систему
  • Убрана неконсистентность между инструментами

2. 📦 ИСПРАВЛЕНЫ ВЕРСИИ

  • pyproject.toml: v3.7.6 ✅
  • main.py: обновлен до актуальной архитектуры ✅
  • Консистентность версий во всех файлах ✅

3. 🗑️ УБРАН ДУБЛИРУЮЩИЙСЯ КОД

  • Создан ensure_session_updated() в SessionAPIClient
  • Убраны повторяющиеся вызовы update_from_browser_session()
  • Централизованное управление сессиями

4. 🧹 УБРАНЫ НЕИСПОЛЬЗУЕМЫЕ ИМПОРТЫ

  • Удален неиспользуемый session из media.py
  • Очищены импорты от устаревших переменных
  • Оптимизирована загрузка модулей

5. 🔒 УЛУЧШЕННАЯ БЕЗОПАСНОСТЬ

  • Ротация User-Agent при каждом запуске SessionAPIClient
  • Добавлены security headers (Sec-Fetch-*, Cache-Control)
  • Методы rotate_user_agent() и get_security_info()
  • Анти-детекционные заголовки

🎯 НОВЫЕ ВОЗМОЖНОСТИ БЕЗОПАСНОСТИ:

api_client = get_api_client()

# Ротация User-Agent
api_client.rotate_user_agent()

# Информация о безопасности
security_info = api_client.get_security_info()
# {
#   "user_agent": "Mozilla/5.0...",
#   "cookies_count": 15,
#   "session_updated": true,
#   "headers_count": 12,
#   "has_browser_session": true
# }

🏗️ ФИНАЛЬНАЯ АРХИТЕКТУРА:

🔧 SessionAPIClient (v3.7.6)
├── ✅ Rotating User-Agent
├── ✅ Auto session updates
├── ✅ Security headers
├── ✅ Browser cookie sync
└── ✅ Unified tool interface

📊 Все инструменты:
├── fetch_htmlSessionAPIClient ✅
├── extract_links_toolSessionAPIClient ✅
├── parse_page_toolSessionAPIClient ✅
├── download_media_toolSessionAPIClient ✅
├── extract_structured_dataSessionAPIClient ✅
└── debug_screenshot_toolUnifiedHTTPClient

🔧 КРИТИЧЕСКИЕ ПРОБЛЕМЫ ИСПРАВЛЕНЫ! АРХИТЕКТУРА УНИФИЦИРОВАНА!

🚨 КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ v3.6.1 - BROWSER_LOGIN FIXES!

КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ:

  • 🚨 browser_login - исправлена проблема зависания и неработоспособности
  • ⏰ Увеличено время ожидания - 3s + networkidle для полной загрузки форм
  • 🎯 Улучшена автодетекция - 20+ селекторов для username, 10+ для password
  • 🖱️ Человекоподобное заполнение - клик → пауза → медленный ввод (50ms)
  • 🔍 Расширенная диагностика - анализ доступных элементов при ошибках

АРХИТЕКТУРНЫЕ ДОСТИЖЕНИЯ:

  • 🎯 Функциональные группы - инструменты логически разделены по назначению
  • 📁 Модульная структура - каждая группа в отдельном файле
  • 🔧 Maintainability - легкое добавление новых инструментов
  • ⚡ Performance - оптимизированные импорты и кеширование
  • 🧪 Testability - каждую группу можно тестировать отдельно

🏗️ СТРУКТУРА TOOL GROUPS:

📁 src/tools/definitions/
├── 🔍 fetch_tools.py      # 4 инструмента: HTML fetching и basic extraction
├── 🔐 auth_tools.py       # 2 инструмента: Form и browser authentication
├── 📊 session_tools.py    # 5 инструментов: Session management и auth setup
├── 🧭 navigation_tools.py # 3 инструмента: Pagination и parallel processing
├── 🎬 media_tools.py      # 2 инструмента: Screenshots и media download
└── 📋 data_tools.py       # 3 инструмента: Structured data processing

🔄 ПРЕДЫДУЩЕЕ v3.3.0 - SESSION MANAGEMENT!

ГЛАВНАЯ ФУНКЦИОНАЛЬНОСТЬ:

  • 🔐 Автоматический sharing сессии - после browser_login все инструменты используют полученные куки
  • 🔗 Seamless integration - fetch_html, parse_page автоматически подхватывают авторизацию
  • 🧹 Полная очистка - новый инструмент clear_session сбрасывает всё состояние
  • ⏰ Smart session management - сессия действует 1 час, потом автоматически expires
  • 📊 Детальная диагностика - видите какие куки используются и когда

🔥 Как это работает:

// 1. Логинимся через browser_login
{
  "tool": "browser_login",
  "arguments": {
    "url": "https://site.com/login",
    "username": "user@email.com",
    "password": "password"
  }
}

// ✅ Результат: session сохраняется глобально
{
  "success": true,
  "progress_steps": [...],
  "cookies_imported": 15,
  "session_saved": "Tools can now use 15 cookies"
}

// 2. Теперь fetch_html АВТОМАТИЧЕСКИ использует куки!
{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://site.com/protected-page"
    // 🔥 НЕ НУЖНО указывать куки - они уже есть!
  }
}

// ✅ Результат: получаем защищенный контент
{
  "html": "...protected content...",
  "authenticated_session_used": true,
  "cookies_from_login": 15
}

// 3. Очищаем сессию когда нужно
{
  "tool": "clear_session",
  "arguments": {
    "clear_cache": true
  }
}

// ✅ Результат: полная очистка
{
  "status": "completed",
  "cleared_items": [
    "Authenticated session for https://site.com/login",
    "Session cookies (15 items)",
    "Memory cache (5 items)"
  ]
}

🚨 ПРЕДЫДУЩИЕ КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ v3.2.1!

БЫЛА ПРОБЛЕМА:

  • browser_login зависал при передаче username/password
  • Нужно было вручную заполнять поля в браузере
  • Инструмент не завершался и требовал manual intervention

ИСПРАВЛЕНО:

  • Автоматическое заполнение полей username/password через Playwright
  • Умная детекция полей формы (email, user, login, password)
  • Автоматическое нажатие кнопки входа
  • Progress feedback - видите каждый шаг процесса
  • Graceful timeout - корректное завершение при ошибках

🔥 Теперь работает так:

{
  "tool": "browser_login",
  "arguments": {
    "url": "https://stepik.org/login",
    "username": "your@email.com",
    "password": "yourpassword",
    "headless": true
  }
}

Результат:

{
  "success": true,
  "automatic_login": true,
  "form_filled": true,
  "button_clicked": true,
  "progress_steps": [
    {"step": "Initializing browser", "status": "completed"},
    {"step": "Page loaded", "status": "completed"},
    {"step": "Form fields detected", "status": "completed"},
    {"step": "Username filled", "status": "completed"},
    {"step": "Password filled", "status": "completed"},
    {"step": "Login button clicked", "status": "completed"},
    {"step": "Login completed successfully", "status": "completed"}
  ]
}

🚨 НОВЫЕ КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ v3.6.1 - BROWSER_LOGIN

ЧТО БЫЛО НЕ ТАК:

  • Browser_login зависал - запускался и сразу закрывался без действий
  • Не заполнял поля - username/password не вводились
  • Не нажимал кнопку - submit не происходил
  • Плохая автодетекция - не находил поля формы на сложных сайтах

ЧТО ИСПРАВЛЕНО:

1. ⏰ УЛУЧШЕННОЕ ОЖИДАНИЕ ЗАГРУЗКИ:

// БЫЛО: Быстрая загрузка
await page.wait_for_load_state('domcontentloaded')

// СТАЛО: Полное ожидание формы
await page.wait_for_load_state('domcontentloaded')
await asyncio.sleep(3)  // Ожидание JS рендеринга
await page.wait_for_load_state('networkidle', timeout=15000)

2. 🎯 РАСШИРЕННАЯ АВТОДЕТЕКЦИЯ СЕЛЕКТОРОВ:

// БЫЛО: 8 базовых селекторов
username_candidates = [
  "input[type='email']",
  "input[name*='user']",
  "input[type='text']:first-of-type"
]

// СТАЛО: 20+ продвинутых селекторов
username_candidates = [
  "input[type='email']",
  "input[name*='email' i]",
  "input[name*='user' i]",
  "input[name*='login' i]",
  "input[placeholder*='email' i]",
  "input[autocomplete='email']",
  "[data-testid*='username']",
  "[data-test*='email']",
  "input:not([type='password']):not([type='hidden'])",
  // ... и еще 10+ вариантов
]

3. 🖱️ ЧЕЛОВЕКОПОДОБНОЕ ЗАПОЛНЕНИЕ:

// БЫЛО: Быстрое заполнение
await element.fill(username)

// СТАЛО: Реалистичное взаимодействие
await page.wait_for_selector(selector, state="visible", timeout=10000)
await element.click()  // Фокус поля
await asyncio.sleep(0.5)  // Пауза перед вводом
await element.fill("")  // Очистка поля
await element.type(username, delay=50)  // Медленный ввод

🎯 ПОДДЕРЖИВАЕМЫЕ ТИПЫ ФОРМ:

  • Стандартные формы - input[type="email"] + input[type="password"]
  • React/Vue SPA - data-testid, data-test атрибуты
  • Сложные формы - placeholder, autocomplete поиск
  • Многоязычные - "Войти", "Login", "Sign in" поддержка
  • Динамические - ожидание JS загрузки

🚀 ОБНОВЛЕННЫЙ ПРИМЕР ИСПОЛЬЗОВАНИЯ:

{
  "tool": "browser_login",
  "arguments": {
    "url": "https://site.com/login",
    "username": "your@email.com",
    "password": "yourpassword",
    "headless": false,
    "verbose": true
  }
}

**Результат:**
```json
{
  "success": true,
  "automatic_login": true,
  "form_filled": true,
  "button_clicked": true,
  "progress_steps": [
    {"step": "Initializing browser", "status": "completed"},
    {"step": "Waiting for form elements to load", "status": "completed"},
    {"step": "Auto-detecting username field", "status": "completed", "details": "input[name='email']"},
    {"step": "Username filled", "status": "completed"},
    {"step": "Password filled", "status": "completed"},
    {"step": "Login button clicked", "status": "completed"},
    {"step": "Login completed successfully", "status": "completed"}
  ]
}

Теперь browser_login работает стабильно на большинстве сайтов! 🎉

🔥 Ранее в v3.2 - ПРОФЕССИОНАЛЬНАЯ ДИАГНОСТИКА:

🔍 Browser Login - Детальная диагностика

  • Логи браузера - console, page errors, failed requests
  • Автоматические скриншоты при ошибках и таймаутах
  • Детекция защиты - CAPTCHA, Cloudflare, Bot Detection, 2FA
  • Анализ ошибок - почему логин не удался + рекомендации
  • Таймаут контроль - детальная информация о времени выполнения

📊 Login Form - Умный анализ ответов

  • Redirect chain - отслеживание перенаправлений
  • Анализ статусов - 403/401 с детализацией причин
  • Детекция ошибок форм - валидация, CSRF, капча
  • Response анализ - проверка содержимого ответа
  • Score система - интеллектуальная оценка успеха логина

🍪 Import Browser Cookies - Диагностика доступа

  • Проверка браузера - установлен ли, найдена ли папка данных
  • Анализ cookies - сколько найдено, сколько для домена
  • Права доступа - диагностика файловых разрешений
  • Детализация ошибок - permission denied, database locked, файлы не найдены
  • Кросс-платформенность - Windows, macOS, Linux пути

🎯 Parse Page - Умное извлечение

  • Fallback селекторы - автоматические альтернативы для CSRF, логин полей
  • Умное извлечение атрибутов - value для input, content для meta, href для ссылок
  • Типизированные данные - text, attribute, html режимы
  • Структурный анализ - статистика элементов страницы
  • Детальная диагностика - какой селектор сработал, сколько попыток

🔧 ПОЛНЫЙ СПИСОК ИНСТРУМЕНТОВ (19 штук!) 🎯

Обновлено v3.6.1 - browser_login теперь работает правильно!

Базовые:

  • fetch_html - 🔥 Hybrid получение HTML (requests + Playwright)
  • extract_text - Извлечение чистого текста
  • find_elements - Поиск элементов по CSS селекторам
  • extract_links - Умное извлечение ссылок с фильтрацией
  • parse_page - Комплексный парсинг страницы

Аутентификация:

  • set_oauth_token - 🆕 OAuth/JWT токены для API
  • browser_login - 🆕 Интерактивный браузерный логин
  • login_form - Автоматический логин через формы
  • import_browser_cookies - Импорт cookies из браузеров
  • set_basic_auth - HTTP Basic Authentication

Навигация и производительность:

  • auto_paginate - Автоматическая пагинация с умными селекторами
  • infinite_scroll - 🆕 Бесконечный скроллинг и автозагрузка
  • parallel_fetch - Параллельная обработка URL (до 50 одновременно)
  • debug_screenshot - Скриншоты для отладки

Извлечение и обработка данных:

  • extract_structured_data - 🆕 Структурированное извлечение по схемам
  • download_media - 🆕 Автоматическое скачивание медиа файлов
  • cache_results - 🆕 Умное кэширование результатов

Управление сессией:

  • get_session_info - Информация о текущей сессии
  • clear_session - Очистка всех данных сессии

Установка

Глобальная установка через npx

npm install -g web-parser-mcp

Локальная установка

  1. Клонируйте репозиторий:

    git clone <repository-url>
    cd web-parser-mcp
  2. Установите зависимости Python (рекомендуется использовать uv): `bash

    Если у вас установлен uv (рекомендуется)

    uv sync

Или использовать pip

pip install -r requirements.txt


## Использование

### Через npx (глобальная установка)

```bash
npx web-parser-mcp

Локальный запуск

# С uv
uv run main.py

# Или с обычным Python
python main.py

В качестве MCP сервера

Добавьте в конфигурацию вашего MCP клиента:

{
  "mcpServers": {
    "web-parser": {
      "command": "npx",
      "args": ["web-parser-mcp"]
    }
  }
}

Или для локального использования:

{
  "mcpServers": {
    "web-parser": {
      "command": "uv",
      "args": ["run", "/path/to/web-parser-mcp/main.py"]
    }
  }
}

Доступные инструменты

1. fetch_html (🔥 Hybrid Architecture)

Получает HTML контент с автоматическим выбором метода парсинга.

Параметры:

  • url (обязательный): URL веб-страницы
  • timeout (опционально): Таймаут запроса в секундах (по умолчанию: 10)
  • headers (опционально): Пользовательские заголовки HTTP
  • use_browser (опционально): Принудительно использовать Playwright (по умолчанию: false)
  • wait_for (опционально): CSS селектор для ожидания загрузки
  • import_cookies_from (опционально): Импорт cookies из браузера ('chrome', 'firefox', 'edge', 'safari')
  • anti_detection (опционально): Включить антидетекцию (по умолчанию: false)
  • debug (опционально): Подробные логи (по умолчанию: false)
  • stealth (опционально): Stealth режим (по умолчанию: false)

Примеры использования:

Простой сайт (автоматически использует requests):

{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://example.com"
  }
}

JavaScript SPA (автоматически определяет и использует Playwright):

{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://react-app.com/dashboard",
    "wait_for": "#content",
    "debug": true
  }
}

Сложный сайт с anti-detection:

{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://protected-site.com",
    "use_browser": true,
    "stealth": true,
    "anti_detection": true,
    "import_cookies_from": "chrome"
  }
}

2. extract_text

Извлекает чистый текст из HTML контента.

Параметры:

  • html (обязательный): HTML контент для обработки
  • preserve_formatting (опционально): Сохранять форматирование (по умолчанию: false)

Пример использования:

{
  "tool": "extract_text",
  "arguments": {
    "html": "<div><p>Hello <strong>World</strong></p></div>",
    "preserve_formatting": true
  }
}

3. find_elements

Находит HTML элементы по CSS селекторам.

Параметры:

  • html (обязательный): HTML контент для поиска
  • selector (обязательный): CSS селектор (например: "div.class", "#id", "a[href]")
  • attribute (опционально): Конкретный атрибут для извлечения
  • limit (опционально): Максимальное количество элементов (по умолчанию: 10)

Пример использования:

{
  "tool": "find_elements",
  "arguments": {
    "html": "<div><a href='http://example.com'>Link</a></div>",
    "selector": "a[href]",
    "attribute": "href",
    "limit": 5
  }
}

Извлекает и фильтрует ссылки с расширенными возможностями. Идеален для получения списка страниц для дальнейшего обхода.

Параметры:

  • url (опционально): URL веб-страницы для извлечения ссылок
  • html (опционально): HTML контент для извлечения ссылок
  • base_url (опционально): Базовый URL для разрешения относительных ссылок
  • internal_only (опционально): Только внутренние ссылки (тот же домен)
  • external_only (опционально): Только внешние ссылки (другие домены)
  • url_pattern (опционально): Regex паттерн для фильтрации URL
  • text_pattern (опционально): Regex паттерн для фильтрации текста ссылок
  • exclude_fragments (опционально): Исключить фрагменты (#section) (по умолчанию: true)
  • unique_only (опционально): Только уникальные URL (по умолчанию: true)
  • limit (опционально): Максимальное количество ссылок (по умолчанию: 100)

Примеры использования:

Получить все внутренние ссылки с сайта:

{
  "tool": "extract_links",
  "arguments": {
    "url": "https://example.com",
    "internal_only": true,
    "limit": 50
  }
}

Найти ссылки на статьи (по паттерну URL):

{
  "tool": "extract_links",
  "arguments": {
    "url": "https://blog.example.com",
    "url_pattern": "/article/",
    "internal_only": true
  }
}

Получить пагинацию (ссылки "Далее", "Next"):

{
  "tool": "extract_links",
  "arguments": {
    "url": "https://example.com/posts",
    "text_pattern": "(Next|Далее|>)",
    "internal_only": true
  }
}

5. login_form

Выполняет авторизацию через веб-формы и сохраняет сессию для последующих запросов.

Параметры:

  • login_url (обязательный): URL страницы с формой логина
  • username (обязательный): Имя пользователя или email
  • password (обязательный): Пароль
  • username_field (опционально): Имя поля для username (автоопределение)
  • password_field (опционально): Имя поля для password (автоопределение)
  • additional_fields (опционально): Дополнительные поля формы (CSRF токены и т.д.)
  • submit_url (опционально): URL для отправки формы (автоопределение)

Пример использования:

{
  "tool": "login_form",
  "arguments": {
    "login_url": "https://example.com/login",
    "username": "myuser@example.com",
    "password": "mypassword",
    "additional_fields": {
      "_token": "csrf_token_value"
    }
  }
}

6. set_basic_auth

Устанавливает HTTP Basic Authentication для всех последующих запросов.

Параметры:

  • username (обязательный): Имя пользователя
  • password (обязательный): Пароль

Пример использования:

{
  "tool": "set_basic_auth",
  "arguments": {
    "username": "api_user",
    "password": "api_password"
  }
}

7. import_browser_cookies (🔥 Новое!)

Импортирует cookies из браузера для аутентификации без повторного логина.

Параметры:

  • browser (обязательный): Браузер для импорта ('chrome', 'firefox', 'edge', 'safari')
  • domain (опционально): Домен для импорта cookies (по умолчанию: все)

Примеры использования:

Импорт всех cookies из Chrome:

{
  "tool": "import_browser_cookies",
  "arguments": {
    "browser": "chrome"
  }
}

Импорт cookies для конкретного сайта:

{
  "tool": "import_browser_cookies",
  "arguments": {
    "browser": "chrome",
    "domain": "example.com"
  }
}

8. get_session_info

Получает информацию о текущей сессии, включая cookies и статус аутентификации.

Пример использования:

{
  "tool": "get_session_info",
  "arguments": {}
}

9. clear_session

Очищает все данные сессии, включая cookies и аутентификацию.

Пример использования:

{
  "tool": "clear_session",
  "arguments": {}
}

10. parse_page

Комплексный парсинг веб-страницы с извлечением структурированных данных.

Параметры:

  • url (обязательный): URL веб-страницы
  • extract_title (опционально): Извлечь заголовок страницы (по умолчанию: true)
  • extract_meta (опционально): Извлечь мета-теги (по умолчанию: true)
  • extract_links (опционально): Извлечь все ссылки (по умолчанию: false)
  • extract_images (опционально): Извлечь все изображения (по умолчанию: false)
  • custom_selectors (опционально): Пользовательские CSS селекторы

Пример использования:

{
  "tool": "parse_page",
  "arguments": {
    "url": "https://news.ycombinator.com",
    "extract_links": true,
    "extract_images": true,
    "custom_selectors": {
      "headlines": ".titleline > a",
      "scores": ".score"
    }
  }
}

🔐 Работа с авторизацией

Типичный workflow для сайтов с авторизацией:

  1. Залогиниться через форму:

    {
    "tool": "login_form",
    "arguments": {
     "login_url": "https://site.com/login",
     "username": "user@example.com",
     "password": "password123"
    }
    }
  2. Проверить статус сессии:

    {
    "tool": "get_session_info",
    "arguments": {}
    }
  3. Получить защищенный контент:

    {
    "tool": "fetch_html",
    "arguments": {
     "url": "https://site.com/private-area"
    }
    }
  4. Очистить сессию при необходимости:

    {
    "tool": "clear_session",
    "arguments": {}
    }

Пример с Basic Auth:

{
  "tool": "set_basic_auth",
  "arguments": {
    "username": "api_user",
    "password": "api_key"
  }
}

После этого все запросы будут использовать Basic Authentication.

🔥 Новые workflow сценарии v2.0

💫 Scenario 1: Современный SPA сайт

  1. Автоматическое определение:

    {
    "tool": "fetch_html",
    "arguments": {
     "url": "https://admin.modern-spa.com",
     "wait_for": "#dashboard-content",
     "debug": true
    }
    }
  2. Получение данных после загрузки JS:

    {
    "tool": "extract_links",
    "arguments": {
     "url": "https://admin.modern-spa.com",
     "use_browser": true,
     "internal_only": true
    }
    }

🍪 Scenario 2: Импорт session из браузера

  1. Импорт cookies из Chrome:

    {
    "tool": "import_browser_cookies",
    "arguments": {
     "browser": "chrome",
     "domain": "secure-site.com"
    }
    }
  2. Доступ к защищенному контенту:

    {
    "tool": "fetch_html",
    "arguments": {
     "url": "https://secure-site.com/private-data"
    }
    }

🛡️ Scenario 3: Антидетекция для сложных сайтов

{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://protected-site.com/data",
    "use_browser": true,
    "stealth": true,
    "anti_detection": true,
    "wait_for": ".content-loaded",
    "debug": true
  }
}

Scenario 4: Смешанный workflow (hybrid approach)

  1. Быстрая проверка доступности (requests):

    {
    "tool": "fetch_html",
    "arguments": {
     "url": "https://example.com",
     "use_browser": false
    }
    }
  2. Глубокий парсинг с JS (Playwright):

    {
    "tool": "parse_page",
    "arguments": {
     "url": "https://example.com/dynamic",
     "use_browser": true,
     "extract_links": true,
     "wait_for": "#content"
    }
    }

🔧 Автодетекция сайтов

Система автоматически определяет тип сайта и выбирает оптимальный метод:

Playwright автоматически используется для:

  • SPA приложений (React, Vue, Angular)
  • Gmail, Facebook, Twitter, LinkedIn
  • Сайтов с dashboard, admin, portal в URL
  • При наличии параметров wait_for или stealth

Requests используется для:

  • Статических HTML сайтов
  • API endpoints
  • Простых страниц без JavaScript
  • Когда Playwright недоступен

🆕 Новые workflow сценарии v3.0

🔐 Scenario 1: OAuth API интеграция

{
  "tool": "set_oauth_token",
  "arguments": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "provider": "google"
  }
}

🌐 Scenario 2: Интерактивный браузерный логин

{
  "tool": "browser_login",
  "arguments": {
    "url": "https://complex-auth-site.com/login",
    "headless": false,
    "wait_for_user": true,
    "timeout": 300,
    "success_indicator": "#dashboard"
  }
}

📄 Scenario 3: Автоматическая пагинация

{
  "tool": "auto_paginate",
  "arguments": {
    "url": "https://news-site.com/articles",
    "max_pages": 10,
    "wait_between": 2,
    "extract_data": {
      "titles": "h2.article-title",
      "links": "a.read-more",
      "dates": ".article-date"
    }
  }
}

Scenario 4: Параллельная обработка списка URL

{
  "tool": "parallel_fetch",
  "arguments": {
    "urls": [
      "https://site1.com/page1",
      "https://site2.com/page2",
      "https://site3.com/page3"
    ],
    "max_workers": 5,
    "extract_data": {
      "titles": "h1",
      "prices": ".price"
    }
  }
}

📷 Scenario 5: Debug скриншоты

{
  "tool": "debug_screenshot",
  "arguments": {
    "url": "https://complex-page.com",
    "path": "debug_complex_page.png",
    "full_page": true,
    "wait_for": "#content-loaded"
  }
}

🔥 Scenario 6: Комплексный workflow

  1. Импорт cookies из браузера:

    {
    "tool": "import_browser_cookies",
    "arguments": {
     "browser": "chrome",
     "domain": "secured-site.com"
    }
    }
  2. Параллельная обработка защищенных страниц:

    {
    "tool": "parallel_fetch",
    "arguments": {
     "urls": ["https://secured-site.com/page1", "https://secured-site.com/page2"],
     "use_browser": true,
     "max_workers": 3
    }
    }
  3. Автопагинация с извлечением данных:

    {
    "tool": "auto_paginate",
    "arguments": {
     "url": "https://secured-site.com/data",
     "max_pages": 5,
     "extract_data": {
       "records": ".data-record",
       "values": ".field-value"
     }
    }
    }

🆕 Новые workflow сценарии v3.1 - ФИНАЛЬНЫЕ!

♾️ Scenario 1: Бесконечный скроллинг (социальные сети, ленты)

{
  "tool": "infinite_scroll",
  "arguments": {
    "url": "https://social-feed.com",
    "trigger_selector": ".load-more-btn",
    "max_scrolls": 20,
    "scroll_pause_time": 3,
    "extract_data": {
      "posts": ".post-content",
      "authors": ".post-author",
      "likes": ".like-count"
    },
    "stop_condition": ".end-of-feed"
  }
}

📊 Scenario 2: Структурированное извлечение (e-commerce продукты)

{
  "tool": "extract_structured_data",
  "arguments": {
    "url": "https://shop.com/product/123",
    "schema": "product",
    "output_format": "json"
  }
}

Пользовательская схема для курсов:

{
  "tool": "extract_structured_data",
  "arguments": {
    "url": "https://learning-platform.com/course/python",
    "schema": "custom",
    "custom_schema": {
      "title": ["h1.course-title", ".main-title"],
      "instructor": [".teacher-name", ".instructor"],
      "price": [".price", ".cost"],
      "duration": [".length", ".duration"],
      "students": [".enrollment-count", ".students"]
    },
    "output_format": "table"
  }
}

💾 Scenario 3: Кэширование для производительности

// Сначала проверяем кэш
{
  "tool": "cache_results",
  "arguments": {
    "action": "get",
    "key": "product_data_123"
  }
}

// Если нет в кэше - загружаем и кэшируем
{
  "tool": "cache_results",
  "arguments": {
    "action": "set",
    "key": "product_data_123",
    "value": "fetched_product_data",
    "duration": "1h"
  }
}

// Статистика кэша
{
  "tool": "cache_results",
  "arguments": {
    "action": "stats"
  }
}

📥 Scenario 4: Массовое скачивание медиа

{
  "tool": "download_media",
  "arguments": {
    "url": "https://gallery.com/photos",
    "types": ["images", "videos"],
    "download_path": "./media_files/",
    "max_files": 100,
    "min_size": 10,
    "max_size": 50
  }
}

Скачивание документов:

{
  "tool": "download_media",
  "arguments": {
    "url": "https://research-site.com/papers",
    "types": ["pdfs", "documents"],
    "download_path": "./research_papers/",
    "max_files": 20,
    "min_size": 100,
    "max_size": 10
  }
}

🏆 Scenario 5: Комплексный enterprise workflow

  1. Импорт cookies из браузера:

    {
    "tool": "import_browser_cookies",
    "arguments": {
     "browser": "chrome",
     "domain": "enterprise-platform.com"
    }
    }
  2. Бесконечный скролл с извлечением данных:

    {
    "tool": "infinite_scroll",
    "arguments": {
     "url": "https://enterprise-platform.com/data-feed",
     "max_scrolls": 50,
     "extract_data": {
       "records": ".data-record",
       "timestamps": ".record-time",
       "values": ".metric-value"
     }
    }
    }
  3. Структурированное извлечение и кэширование:

    {
    "tool": "extract_structured_data",
    "arguments": {
     "url": "https://enterprise-platform.com/analytics",
     "schema": "custom",
     "custom_schema": {
       "metrics": [".metric", ".kpi"],
       "trends": [".trend-data", ".chart-data"],
       "alerts": [".alert", ".warning"]
     }
    }
    }
  4. Параллельная обработка связанных страниц:

    {
    "tool": "parallel_fetch",
    "arguments": {
     "urls": ["https://enterprise-platform.com/dept1", "https://enterprise-platform.com/dept2"],
     "max_workers": 5,
     "extract_data": {
       "department_data": ".dept-metrics",
       "staff_count": ".staff-counter"
     }
    }
    }
  5. Скачивание отчетов и debug скриншот: `json { "tool": "download_media", "arguments": { "url": "https://enterprise-platform.com/reports", "types": ["pdfs", "documents"], "download_path": "./enterprise_reports/" } }

{ "tool": "debug_screenshot", "arguments": { "url": "https://enterprise-platform.com/dashboard", "path": "./debug/enterprise_dashboard.png", "full_page": true } }


## 🔥 **Новые диагностические возможности v3.2.0**

### 🔍 **Scenario 1: Детальная диагностика логина (browser_login)**

```json
{
  "tool": "browser_login",
  "arguments": {
    "url": "https://stepik.org/login",
    "headless": false,
    "success_indicator": ".navbar-profile",
    "verbose": true,
    "auto_screenshot_on_error": true
  }
}

Получите детальный анализ:

{
  "success": false,
  "diagnostics": {
    "error_details": "CAPTCHA detected on page with selector: .g-recaptcha",
    "protection_detected": "CAPTCHA",
    "browser_logs": [
      "[console] Loading reCAPTCHA...",
      "[ERROR] Failed to verify reCAPTCHA"
    ],
    "final_screenshot": "./debug/browser_login_1703123456.png",
    "login_errors": ["Invalid credentials"],
    "response_status": 200
  },
  "recommendations": [
    "Manual CAPTCHA solving required. Use headless=false for user interaction.",
    "Consider using anti-captcha services for automation."
  ]
}

📊 Scenario 2: Умный анализ формы логина (login_form)

{
  "tool": "login_form",
  "arguments": {
    "login_url": "https://stepik.org/login",
    "username": "test@example.com",
    "password": "password123",
    "verbose": true
  }
}

Получите полный анализ:

{
  "status_code": 403,
  "likely_success": false,
  "success_score": "2/12",
  "failure_score": "4/7",
  "response_time_seconds": 1.2,
  "diagnostics": {
    "error_details": "403 Forbidden - Bot detection active",
    "protection_detected": "Bot Detection",
    "response_protection": "Bot Detection",
    "login_errors": ["Too many login attempts"],
    "redirect_chain": [
      {"url": "https://stepik.org/login", "status": 200, "final_url": "https://stepik.org/login"},
      {"url": "https://stepik.org/api/auth", "status": 403, "final_url": "https://stepik.org/blocked"}
    ],
    "form_analysis": {
      "action": "/api/auth",
      "method": "POST",
      "inputs": [
        {"name": "email", "type": "email", "required": true},
        {"name": "password", "type": "password", "required": true},
        {"name": "csrfmiddlewaretoken", "type": "hidden", "value": "***"}
      ]
    }
  },
  "recommendations": [
    "403 Forbidden suggests bot protection. Try browser_login with manual interaction.",
    "Import real browser cookies before login attempt."
  ]
}

🍪 Scenario 3: Диагностика импорта cookies (import_browser_cookies)

{
  "tool": "import_browser_cookies",
  "arguments": {
    "browser": "chrome",
    "domain": "stepik.org",
    "verbose": true
  }
}

Получите детальную диагностику:

{
  "cookies_imported": 0,
  "diagnostics": {
    "browser_found": true,
    "cookie_file_path": "C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data",
    "total_cookies_in_file": 150,
    "domain_matches": 0,
    "access_error": "Permission denied - browser data directory not accessible",
    "cookie_breakdown": {
      "total_found": 150,
      "domain_filtered": 0,
      "successfully_imported": 0,
      "import_failures": 0
    },
    "system_info": {
      "platform": "Windows",
      "architecture": "64bit"
    }
  },
  "recommendations": [
    "No cookies found for domain 'stepik.org' in chrome.",
    "Visit stepik.org in chrome browser first to create cookies.",
    "Check domain spelling or try without domain filter."
  ]
}

🎯 Scenario 4: Умное извлечение с fallback (parse_page)

{
  "tool": "parse_page",
  "arguments": {
    "url": "https://stepik.org/login",
    "custom_selectors": {
      "csrf_token": {
        "selector": "input[name='csrfmiddlewaretoken']",
        "extract": "attribute",
        "attribute": "value",
        "fallbacks": [
          "meta[name='csrf-token']",
          "input[name*='csrf']"
        ]
      },
      "login_field": {
        "selector": "input[name='email']",
        "extract": "attribute",
        "attribute": "name"
      }
    },
    "smart_extraction": true,
    "verbose": true
  }
}

Получите точное извлечение:

{
  "custom": {
    "csrf_token": {
      "values": ["xyz123token456"],
      "count": 1,
      "selector_used": "input[name='csrfmiddlewaretoken']",
      "selectors_tried": 3,
      "success": true,
      "diagnostics": {
        "primary_selectors": ["input[name='csrfmiddlewaretoken']"],
        "fallback_selectors": ["meta[name='csrf-token']", "input[name*='csrf']"],
        "extract_type": "attribute",
        "attribute_name": "value"
      }
    },
    "login_field": {
      "values": ["email"],
      "count": 1,
      "selector_used": "input[name='email']",
      "success": true
    }
  },
  "extraction_stats": {
    "successful_extractions": 2,
    "failed_extractions": 0,
    "total_values_extracted": 2
  }
}

🏆 Scenario 5: Комплексная диагностика workflow

  1. Диагностика страницы:

    {"tool": "parse_page", "arguments": {"url": "https://site.com/login", "verbose": true}}
  2. Импорт cookies с диагностикой:

    {"tool": "import_browser_cookies", "arguments": {"browser": "chrome", "verbose": true}}
  3. Логин с полной диагностикой:

    {"tool": "browser_login", "arguments": {"url": "https://site.com/login", "verbose": true, "auto_screenshot_on_error": true}}
  4. Альтернативный логин через форму:

    {"tool": "login_form", "arguments": {"login_url": "https://site.com/login", "username": "user", "password": "pass", "verbose": true}}

📦 Зависимости

Основные:

  • Python 3.12+
  • mcp - MCP протокол
  • beautifulsoup4 - HTML парсинг
  • requests - HTTP запросы
  • lxml - XML/HTML парсер

Новые в v2.0:

  • playwright - 🔥 Браузерная автоматизация для JS сайтов
  • browser-cookie3 - 🍪 Импорт cookies из браузеров

Автоматическая установка:

При первом запуске автоматически установятся:

  • Chromium браузер для Playwright
  • Все Python зависимости через uv/pip

Разработка

  1. Клонируйте репозиторий
  2. Установите зависимости: uv sync
  3. Запустите сервер: uv run main.py

Лицензия

MIT License