Лёгкий API-сервис на Playwright с persistent-профилем (куки хранятся на диске). Подходит, чтобы логиниться один раз и потом автоматизировать Instagram без передачи sessionid в пайплайне.
- Сделай репозиторий из этого проекта (или импортируй ZIP).
- На Railway:
- New Project → Deploy from GitHub → выбери этот репозиторий.
- Add Volume → Mount path:
/data(обязательно). - Variables:
AUTH_TOKEN=<любой_секрет>(требуется для запросов)DEFAULT_UA=<твоя UA-строка>(опционально)USER_DATA_DIR=/data/ig-profile(опционально)
- После деплоя открой Networking и создай публичный домен.
# здоровье
curl "https://<your>.up.railway.app/health" \
-H "Authorization: Bearer <AUTH_TOKEN>"
# проверка логина (вернёт isLoggedIn и apiStatus)
curl -X POST "https://<your>.up.railway.app/run" \
-H "Authorization: Bearer <AUTH_TOKEN>" -H "Content-Type: application/json" \
-d '{"action":"loginCheck"}'Проверка, что контекст поднят.
Однократно «посеять» куки из твоего браузера (если не хочешь логиниться скриптом). Body:
{ "cookies": [{ "name": "sessionid", "value": "..." }, ...] }Общий экшн с телом:
{ "action": "<loginCheck|openSettings|followersLinks>", "username": "miki", "targetUser": "nik_112524", "needScreenshot": false }loginCheck– открывает главную и дергает закрытый API/api/v1/accounts/edit/web_form_data/.apiStatus: 200⇒ вы залогинены.openSettings– открывает/accounts/edit/.followersLinks– открывает профиль, кликаетFollowers(или переходит напрямую), ждёт модалку и собирает ссылки профилей{href,text}. Если переданtargetUser, вернётfoundTarget: true, если такой ник найден.
HTTP Request (POST) → https://<your>.up.railway.app/run
Headers:
Authorization: Bearer <AUTH_TOKEN>
Content-Type: application/json
Пример тела:
{ "action": "loginCheck" }- Профиль сохраняется в volume
/data/ig-profile. Это переживает перезапуск контейнера. - Не запускайте много параллельных запросов: в коде есть очередь; при необходимости масштабируйте сервис.
- Для IG не используем
networkidle, чтобы избежать подвисаний; используемdomcontentloadedи гонки.
MIT License.