--- title: "Robotex" tagline: "Браузер для ваших ботов по API" description: "Robotex проходит анти-бот защиту, выполняет сценарий на странице и отдает боту куки. Дальше бот работает обычными HTTP запросами." domain: "https://robotex.sokolab.xyz/" badge: "Бесплатно · открытый доступ" post: "/blog/robotex-browser-automation-api" postLabel: "Как устроен Robotex" build: list: never sitemap: disable: true nav: - { label: "Возможности", href: "#features" } - { label: "Как работает", href: "#how" } - { label: "Сообщество", href: "#community" } cta: - { label: "Открыть API", href: "https://app.robotex.sokolab.xyz/docs", primary: true } - { label: "Как это работает", href: "#how" } problem: title: "Зачем это нужно" lead: "Каждый бот под сайт рано или поздно упирается в одну из трех проблем:" items: - "капча" - "анти-бот защита" - "сложный JS, который нужно отрендерить, чтобы отправить форму" text: "Паук на сырых HTTP запросах тут бессилен, нужен настоящий браузер. Но браузер тяжелый, его нужно прятать от детекта и держать рядом с ботом. Robotex берет эту работу на себя: браузер включается только там, где без него никак." features: title: "Возможности" items: - title: "Сценарии" text: "Не просто открыть страницу. Заполнить форму, кликнуть, навести мышь, дождаться элемента, забрать кусок HTML." - title: "Анти-бот страницы" text: "Сам находит проверку Cloudflare до и во время сценария и проходит ее. Если она переросла в капчу с картинками, отправляет в сервис распознавания." - title: "Капча" text: "Шаг `captcha` в сценарии решает hCaptcha и другие капчи через 2captcha до отправки формы." - title: "Профили" text: "Куки, local storage и отпечаток браузера живут в одном профиле. Локаль и часовой пояс подбираются под гео прокси. Для сайта это все тот же пользователь." - title: "Настоящий Chrome" text: "Chrome под управлением Patchright, без утечек CDP, по которым анти-боты узнают автоматизацию." - title: "Любой язык" text: "Это сервис, а не библиотека. Боту нужен только HTTP клиент, на чем он написан, неважно." how: title: "Как это работает" steps: - "Бот отправляет в `POST /v1/solve` адрес, сценарий действий и свой прокси." - "Robotex открывает страницу, проходит проверки и выполняет сценарий. Профиль браузера сохраняется и возвращается в куке `session_id`." - "Бот получает куки и User-Agent и дальше ходит по сайту сам, **через тот же прокси**. Понадобится браузер снова, передаст `session_id` и продолжит в том же профиле." code: - caption: "Запрос" body: | POST https://app.robotex.sokolab.xyz/v1/solve { "url": "https://example.com/login", "actions": [ {"type": "fill", "selector": "#email", "value": "user@example.com"}, {"type": "fill", "selector": "#password", "value": "..."}, {"type": "click", "selector": "#submit"}, {"type": "wait_for", "selector": ".dashboard", "timeout": 30} ], "proxy": "socks5://user:pass@host:port" } - caption: "Ответ" body: | { "status": "ok", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...", "cookies": [ {"name": "sessionid", "value": "...", "domain": ".example.com"} ], "actions": [ {"type": "fill", "ok": true}, {"type": "fill", "ok": true}, {"type": "click", "ok": true}, {"type": "wait_for", "ok": true} ] } limits: title: "Честно о текущем состоянии" items: - "**Это ранний MVP.** Доступ открыт без регистрации и ключей, но API может меняться." - "**Бесплатно.** Платить нужно только за свои прокси и, если нужна, капчу в 2captcha." - "Прокси решает многое: на грязном IP не поможет никакой отпечаток." - "Turnstile проходит не на каждом сайте, над стабильностью работаю." community: title: "Сообщество" lead: "Вопросы, идеи и баги принимаются в Redmine. Регистрироваться не обязательно: данные гостевого аккаунта Robotex есть в [приветственной теме](https://redmine.sokolab.xyz/boards/1/topics/1) на форуме." links: - { title: "Форум", text: "Вопросы, идеи и обсуждение сценариев.", href: "https://redmine.sokolab.xyz/projects/robotex/boards" } - { title: "Баги и пожелания", text: "Что-то не работает или не хватает функции.", href: "https://redmine.sokolab.xyz/projects/robotex/issues" } - { title: "Telegram", text: "Написать мне напрямую.", href: "https://t.me/xs0k0lx" } - { title: "Исходники", text: "Код сервиса в моей Gitea.", href: "https://git.sokolab.xyz/s0k0l/robotex" } footer: "Используйте Robotex только на сайтах, где у вас есть на это право." ---