npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

web-parser-mcp

v3.7.9

Published

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

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": "[email protected]",
    "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_html → SessionAPIClient ✅
├── extract_links_tool → SessionAPIClient ✅
├── parse_page_tool → SessionAPIClient ✅
├── download_media_tool → SessionAPIClient ✅
├── extract_structured_data → SessionAPIClient ✅
└── debug_screenshot_tool → UnifiedHTTPClient ✅

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

🚨 КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ 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": "[email protected]",
    "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": "[email protected]",
    "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": "[email protected]",
    "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
  1. Установите зависимости Python (рекомендуется использовать uv):
# Если у вас установлен uv (рекомендуется)
uv sync

# Или использовать pip
pip install -r requirements.txt

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

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

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
  }
}

4. extract_links

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

Параметры:

  • 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": "[email protected]",
    "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": "[email protected]",
    "password": "password123"
  }
}
  1. Проверить статус сессии:
{
  "tool": "get_session_info",
  "arguments": {}
}
  1. Получить защищенный контент:
{
  "tool": "fetch_html",
  "arguments": {
    "url": "https://site.com/private-area"
  }
}
  1. Очистить сессию при необходимости:
{
  "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
  }
}
  1. Получение данных после загрузки 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"
  }
}
  1. Доступ к защищенному контенту:
{
  "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
  }
}
  1. Глубокий парсинг с 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"
  }
}
  1. Параллельная обработка защищенных страниц:
{
  "tool": "parallel_fetch",
  "arguments": {
    "urls": ["https://secured-site.com/page1", "https://secured-site.com/page2"],
    "use_browser": true,
    "max_workers": 3
  }
}
  1. Автопагинация с извлечением данных:
{
  "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"
  }
}
  1. Бесконечный скролл с извлечением данных:
{
  "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"
    }
  }
}
  1. Структурированное извлечение и кэширование:
{
  "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"]
    }
  }
}
  1. Параллельная обработка связанных страниц:
{
  "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"
    }
  }
}
  1. Скачивание отчетов и debug скриншот:
{
  "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)

{
  "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": "[email protected]",
    "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}}
  1. Импорт cookies с диагностикой:
{"tool": "import_browser_cookies", "arguments": {"browser": "chrome", "verbose": true}}
  1. Логин с полной диагностикой:
{"tool": "browser_login", "arguments": {"url": "https://site.com/login", "verbose": true, "auto_screenshot_on_error": true}}
  1. Альтернативный логин через форму:
{"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