6.8 KiB
name, author, version, description
| name | author | version | description |
|---|---|---|---|
| ops-browser | ours | 0.1.0 | Use when a task needs a real browser — личный кабинет, заказы, чеки, yt-digest, скриншот живого сайта, «дёрни внутренний API». Свой СКРЫТЫЙ браузер агента: отдельный профиль, CDP, `fetch()` ИЗ страницы, хендофф человеку для пароля/капчи. |
ops-browser — свой скрытый браузер агента
Есть задача, которой нужен браузер? Работай в своём браузере, скрыто, и не подсовывай куки. Профиль владеет сессией сам (куки продлеваются браузером, а не руками) — это и есть лечение боли «куки протухли».
Когда ЭТОТ инструмент, а когда другой
| Ситуация | Чем работать |
|---|---|
| Публичная страница без логина | web_search / web_extract / curl — браузер не нужен |
| Личный кабинет, заказы, чеки, внутренний API сайта, антибот | ops-browser.sh (этот скил) |
| Нужны ЕГО логины и ЕГО Chrome (Avito, кабинеты поставщиков) | канал оператора: Hermes browser_exec / pi тул browser / CC chrome-devtools — всё под арендой driver.lock |
| Посмотреть глазами, кликнуть по живому сайту, показать ему | панель предпросмотра (desktop_preview + drive_preview) — без JS, только текст/клики |
ops-browser не заменяет канал оператора: там его сессии, здесь — мой профиль.
И то и другое живёт под правилом «один водитель» (у ops свой замок ops.lock).
Команды
OB="$HOME/.config/browser-harness/bin/ops-browser.sh"
bash "$OB" start # headless + аренда (окон нет)
bash "$OB" open https://site/path # перейти
bash "$OB" read 2000 # видимый текст страницы
bash "$OB" eval 'fetch("/api/x",{credentials:"include"}).then(r=>r.json()).then(j=>JSON.stringify(j))'
bash "$OB" screenshot [path] # PNG, печатает путь
bash "$OB" cookies https://site # имена кук (без значений)
bash "$OB" status # аренда + CDP + текущая страница
bash "$OB" stop # ШТАТНО закрыть и отпустить
bash "$OB" handoff <url> # человеку: пароль/2FA/капча (см. ниже)
eval выполняет JS в контексте страницы — значит fetch() идёт с её куками и заголовками:
так дёргают внутренние эндпоинты приложения (то, что недоступно извне и чего не умеет панель).
Хендофф человеку (пароль, 2FA, капча, согласие)
Останавливаюсь и отдаю экран сам, без «скажи готово»:
bash "$OB" handoff <url>— закрывает headless (профиль нельзя открыть дважды) и поднимает видимое окно ТОГО ЖЕ профиля на нужной странице;- человек вводит, что нужно (пароль/2FA/капчу вводит только он);
- признак успеха ловлю сам: URL ушёл со страницы логина/auth или выросли куки домена;
- штатно закрываю окно и возвращаюсь в headless — логин остался в профиле.
Скриншот делаю до шага (что от человека хотят) и после (что получилось); во время ввода пароля не снимаю. Если признак успеха не увидел — окно остаётся открытым, а я говорю об этом прямо.
Границы (не двигаются)
- Пароли, 2FA, капчу — вводит человек. Я к ним не подхожу.
- Деньги, оформление заказов, формы с перс.данными — только с явного согласия оператора.
- Куки не выгружаю и не расшифровываю; содержимое залогиненных страниц не уходит в логи/вику.
- Антибот-челленджи не обхожу; если сайт невзлюбил
headless— это повод дляhandoff, а не для трюков.
Грабли (стоили времени, проверены живьём)
- Закрывать только штатно (
stop→Browser.close). Жёсткий kill может не сбросить профиль → потеря логина. Сессионные куки (без срока) перезапуск не переживают по дизайну — настоящие логины живут. - MSYS-пути: нативным программам нужен вид
C:/...(cygpath -m), аpowershell -File— толькоC:\...(cygpath -w). Иначе «модуль не найден» / «файл .ps1 не найден». - Экранирование PowerShell внутри bash-строки тихо ломается (
$_подменяется) — PS-запросы держим в отдельных.ps1. - Профиль нельзя открыть дважды — перед видимым окном headless обязан остановиться (это делает
handoff). - Профиль:
~/.config/browser-harness/profiles/ops; порт CDP:OPS_CDP_PORT(9346).
Аренда
BL="$HOME/.config/browser-harness/bin/browser-lease.sh"
bash "$BL" --lock ops status # состояние ops-замка (у Chrome оператора — driver.lock)
Чужой держатель ops.lock → start честно отказывает (rc=1). Мёртвый держатель отпускается по PID/TTL.
Идёшь в браузер сам (в обход ops-browser.sh)? Возьми ops.lock так же, как любой другой харнесс.
Контракт: mappa concepts/ops-browser-contract (проект pi-extensions),
требования requirements:42, план plan:35. Исходники: репо pi-extensions/scripts/browser/
(установка just install-browser).