Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
strot — Агент-скрапер API для веб-API | Kitploit
Инструменты/GitHubGitHub/vertexcover-io/strot
РазведкаСкриптинг и автоматизацияТестирование безопасности APIСбор информацииВеб-безопасностьКраулер
GitHubvertexcover-io/strot

strot

Агент-скрапер API для веб-API

Репозиторий
189 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Восстановите внутренний API любого веб-сайта с помощью естественного языка

License Python


Проблема

Современные веб-сайты загружают данные через скрытые AJAX-вызовы:

  • Данные не в HTML — они загружаются через внутренние API
  • Приходится вручную просматривать сетевые запросы
  • Сложная логика пагинации, скрытая в JavaScript
  • API часто меняют конечные точки и параметры

Решение

Strot анализирует веб-сайты и самостоятельно обнаруживает их внутренние API-вызовы.

Что на самом деле делает Strot:

  1. Анализирует веб-страницу, чтобы понять, какие данные вам нужны
  2. Перехватывает AJAX-запрос, который загружает эти данные
  3. Обнаруживает все параметры — пагинацию (limit/offset, курсоры, номера страниц) И динамические параметры (сортировка, фильтрация, поиск)
  4. Генерирует код для извлечения данных из JSON-ответа
  5. Возвращает Source, который воспроизводит собственные API-вызовы веб-сайта с полным контролем параметров

🐳 Попробуйте сейчас — никакой настройки не требуется!

Получите полный опыт Strot (веб-интерфейс + API) мгновенно:

Используя браузер Patchright

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

Или, используя браузер Steel

root@kitploit:~
STROT_BROWSER_WS_URL=wss://connect.steel.dev?apiKey=ste-XXXXXX STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

Затем посетите:

  • 🌐 Веб-панель: http://localhost:3000 — Визуальный интерфейс для анализа веб-сайтов
  • 🔌 REST API: http://localhost:1337 — Программный доступ

🐍 Библиотека Python

Установка

root@kitploit:~
pip install strot

Или с помощью uv:

root@kitploit:~
uv pip install strot

Пример 1: Восстановление API отзывов

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Review(BaseModel):
    title: str | None = None
    username: str | None = None
    rating: float | None = None
    comment: str | None = None
    date: str | None = None

async def get_reviews():
    # Strot discovers the internal API that loads reviews
    source = await strot.analyze(
        url="https://www.getcleanpeople.com/product/fresh-clean-laundry-detergent/",
        query="Customer reviews with ratings and comments",
        output_schema=Review,
        code_executor="e2b" # Defaults to "unsafe"
    )

    # Use the same API call the website uses, with full parameter control
    async for reviews in source.generate_data(limit=500, offset=100, sortBy="date desc"):
        for review in reviews:
            print(f"{review['rating']}⭐ by {review['username']}: {review['comment']}")

if __name__ == "__main__":
    asyncio.run(get_reviews())

Пример 2: Захват API списка товаров

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Product(BaseModel):
    name: str | None = None
    price: float | None = None
    rating: float | None = None
    availability: str | None = None
    description: str | None = None

async def get_products():
    # Strot finds the AJAX endpoint that loads product listings
    source = await strot.analyze(
        url="https://blinkit.com/cn/fresh-vegetables/cid/1487/1489",
        query="Listed products with names and prices.",
        output_schema=Product
    )

    # Set code executor of your choice into source
    source.set_code_executor("e2b")

    # Access all products with custom filtering and sorting
    async for products in source.generate_data(limit=100, offset=0, category="vegetables", sortBy="price"):
        for product in products:
            print(f"{product['name']}: ${product['price']} ({product['rating']}⭐)")

if __name__ == "__main__":
    asyncio.run(get_products())

🔌 MCP Сервер

Strot предоставляет MCP (Model Context Protocol) сервер, который позволяет MCP-клиентам, таким как Claude, анализировать веб-сайты и напрямую обнаруживать их внутренние API.

Настройка

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group mcp

Установите переменные окружения:

root@kitploit:~
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX
export STROT_BROWSER_MODE_OR_WS_URL=headless  # or 'headed' or ws://browser-url

Если вы хотите использовать размещенный браузер, вы можете сделать следующее:

Запустите headless-сервер внутри docker

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
export STROT_BROWSER_MODE_OR_WS_URL=ws://localhost:5678/patchright

Или подключитесь к удаленному серверу браузера:

root@kitploit:~
export STROT_BROWSER_MODE_OR_WS_URL=wss://...

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

root@kitploit:~
$ uv run strotmcp
Usage: strotmcp COMMAND

╭─ Commands ─────────────────────────────────────────────╮
│ http             Start an http server.                 │
│ sse              Start an sse server.                  │
│ stdio            Start a stdio server.                 │
│ streamable-http  Start a streamable http server.       │
╰────────────────────────────────────────────────────────╯

С Claude Code

  • stdio транспорт

    root@kitploit:~
    claude mcp add strot-mcp "uv run strotmcp stdio" --transport stdio \
      --env STROT_ANTHROPIC_API_KEY=$STROT_ANTHROPIC_API_KEY STROT_BROWSER_MODE_OR_WS_URL=$STROT_BROWSER_MODE_OR_WS_URL
    
  • sse, http, streamable-http транспорты

    Запустите MCP сервер с нужным транспортом в отдельном терминале:

    root@kitploit:~
    uv run strotmcp sse --port 8888
    # uv run strotmcp http --host 0.0.0.0
    # uv run strotmcp streamable-http --host 127.0.0.1 --port 8777
    

    Добавьте MCP сервер в Claude:

    root@kitploit:~
    claude mcp add strot-mcp http://127.0.0.1:8888/sse --transport sse
    

🧪 Оценка

Тестируйте и проверяйте точность анализа Strot на разных веб-сайтах и отдельных компонентах. Система оценки поддерживает пять типов входных данных:

  • существующие задания (оценить завершенные задания по ID),
  • новые задания (создать и оценить полные задачи анализа),
  • обнаружение запросов (тестировать комбинации URL и запросов),
  • обнаружение параметров (тестировать анализ отдельных параметров запроса — как пагинации, так и динамических параметров),
  • структурированное извлечение (тестировать парсинг ответов с определенными схемами).

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

Настройка

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group eval

Настройка Airtable

  1. Создайте новую базу Airtable:

    • Перейдите в Workspaces
    • Нажмите кнопку Create в нужном рабочем пространстве
    • Выберите Build an app on your own
    • Скопируйте Base ID из URL (например, appXXXXXXXXXXXXXX)
  2. Создайте персональный токен доступа:

    • Перейдите в /create/tokens
    • Добавьте следующие разрешения:
      • data.records:read
      • data.records:write
      • schema.bases:read
      • schema.bases:write
    • Предоставьте доступ к базе, созданной на шаге 1
    • Нажмите Create token и скопируйте токен (например, patXXXXXXXXXXXXXX)
  3. Установите переменные окружения:

Примечание: Необходимые таблицы автоматически создаются с правильной схемой при запуске оценок.

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

root@kitploit:~
$ uv run stroteval
Usage: stroteval [OPTIONS]

Evaluate multiple job-based or task-based inputs from a file or stdin.

╭─ Parameters ──────────────────────────────────────────────────────────────────╮
│ --file  -f  Path to the JSON/JSONL file. If not provided, reads from stdin.   │
╰───────────────────────────────────────────────────────────────────────────────╯

Убедитесь, что сервер API запущен, если вы оцениваете входные данные на основе заданий.

root@kitploit:~
echo '[
  {
    "job_id": "existing-job-uuid",
    "expected_source": "https://api.example.com/reviews",
    "expected_pagination_keys": ["cursor", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"],
    "expected_entity_count": 243
  },
  {
    "site_url": "https://example.com/category/abc",
    "query": "Listed products with name and prices",
    "expected_source": "https://api.example.com/products",
    "expected_pagination_keys": ["limit", "offset"],
    "expected_dynamic_keys": ["category", "sortBy"],
    "expected_entity_count": 100
  },
  {
    "request": {
      "method": "GET",
      "url": "https://example.com/api/products",
      "type": "ajax",
      "queries": {"page": "2", "limit": "50", "sortBy": "price", "category": "electronics"}
    },
    "expected_pagination_keys": ["page", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"]
  },
  {
    "response": {
      "value": "",
      "request": {
        "method": "GET",
        "url": "https://example.com/api/reviews",
        "type": "ajax"
      },
      "preprocessor": {"element_selector": ".reviews-container"}
    },
    "output_schema_file": "review_schema.json",
    "expected_entity_count": 10
  }
]' | uv run stroteval

🆘 Нужна помощь?

  • 💬 GitHub Discussions — Задавайте вопросы
  • 🐛 Report Issues — Нашли ошибку?

📄 Лицензия

MIT License — Используйте как хотите!


Сделано с ❤️ компанией Vertexcover Labs

Скачать инструмент
root@kitploit:~
export STROT_AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
export STROT_AIRTABLE_TOKEN=patXXXXXXXXXXXXXX

# установите следующее, если хотите оценивать отдельные задачи
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX