- docs/BROWSERLESS_EJ_SUDRF_ESIA_LOGIN.md: использование browserless_login_esia.js - Вход/выход, типы ошибок, шаг 2 (SMS), технические детали
7.3 KiB
7.3 KiB
Авторизация ej.sudrf.ru через ЕСИА (n8n + Browserless)
Скрипт browserless_login_esia.js выполняет в headless-браузере (Browserless) авторизацию на портале ГАС «Правосудие» через ЕСИА (Госуслуги) и доводит процесс до экрана ввода SMS-кода.
Назначение
- Используется в n8n workflow: нода HTTP Request дергает Browserless по адресу вида
http://<browserless-host>:3000/function?token=...&timeout=180000. - Вход: логин (телефон/почта/СНИЛС) и пароль от ЕСИА.
- Выход: статус
waiting_for_sms, куки сессии и скриншот — для следующего шага (ввод SMS и получение финальных кук ej.sudrf.ru).
Требования
- Browserless (Puppeteer): endpoint
/functionс передачей кода и опциональноcontext/полей в body. - n8n: предыдущая нода (например, Set) передаёт
loginиpass(или они задаются в body запроса к Browserless).
Шаг 1: До экрана SMS (этот скрипт)
Что делает скрипт
- Открывает
https://ej.sudrf.ru/?fromOa=16RS0018. - Если нужно — кликает «Вход» и переходит на страницу «Авторизация пользователя».
- Ставит галочку согласия (
#iAgree), ждёт активации кнопки «Войти», нажимает её. - На ЕСИА заполняет логин и пароль (видимые поля, ввод через клавиатуру + blur/change).
- Нажимает «Войти» на ЕСИА.
- Ждёт появления полей для ввода SMS-кода (или перехода на другую страницу).
- Возвращает куки через
page.cookies()и скриншот.
Входные данные
Скрипт принимает второй аргумент input (объект из body запроса к Browserless):
| Поле | Описание |
|---|---|
login |
Телефон / эл. почта / СНИЛС (ЕСИА) |
pass или password |
Пароль ЕСИА |
Либо те же поля внутри input.context (например context.login, context.pass).
В n8n в Body запроса к Browserless можно передать:
- Отдельные поля (рекомендуется, без спецсимволов в коде):
{ "code": "<содержимое browserless_login_esia.js>", "login": "={{ $json.login }}", "pass": "={{ $json.pass }}" } - Либо один объект
context:{ "code": "...", "context": { "login": "={{ $json.login }}", "pass": "={{ $json.pass }}" } }
Пароль может содержать спецсимволы (например !); передавать его отдельным полем в body предпочтительно, чтобы не ломать разбор кода.
Выходные данные
При успехе:
status:"waiting_for_sms"url: текущий URL (страница ЕСИА с полями SMS).cookies: массив кук (для передачи во второй скрипт или сохранения).screenshot: base64 скриншот страницы.sms_inputs_count: число полей для ввода кода.session_data: заметка по использованию кук.
При ошибке:
status:"error"error_type: тип ошибки (см. ниже).error_message: текст.current_url,page_text,screenshot— для отладки.- Для
login_failedдополнительно может быть объектdebug(какой инпут использовался).
Типы ошибок
| error_type | Описание |
|---|---|
login_button_not_found |
Не найдена кнопка «Вход» на ej.sudrf.ru. |
esia_redirect_failed |
После «Войти» не произошёл редирект на ЕСИА. |
login_input_not_found |
Не найдено поле логина на странице ЕСИА. |
password_input_not_found |
Не найдено поле пароля на ЕСИА. |
login_failed |
После нажатия «Войти» на ЕСИА остались на /login/ (форма не приняла логин/пароль или валидация). |
sms_page_not_found |
Не найдены поля для ввода SMS-кода. |
Шаг 2: Ввод SMS и получение кук ej.sudrf.ru
Отдельный скрипт (или вторая нода) должен:
- Принять от пользователя SMS-код (например через Telegram или Webhook).
- Восстановить сессию: передать в Browserless сохранённые
cookiesиз шага 1. - Открыть страницу ЕСИА с полями SMS (или текущий URL из шага 1).
- Ввести код по цифре в каждое поле (или в одно поле, в зависимости от разметки ЕСИА).
- Дождаться редиректа на
ej.sudrf.ru. - Собрать куки для ej.sudrf.ru (
PHPSESSID,fromOaи др.) и вернуть их (например записать в файл или передать в следующую ноду).
Формат кук для последующих запросов к ej.sudrf.ru:
PHPSESSID=...; fromOa=16RS0018
Технические детали
- Куки в Browserless: в окружении
/functionиспользуетсяpage.cookies(), а неbrowserContext.cookies(). - Видимость полей: на ЕСИА выбираются только видимые инпуты (проверка по
boundingBox), чтобы не заполнять скрытые дубликаты. - Таймауты: по умолчанию используются таймауты порядка 15–30 с для навигации и ожидания селекторов; при необходимости их можно увеличить в параметрах вызова Browserless (
timeoutв URL).
Файлы
browserless_login_esia.js— скрипт шага 1 (до SMS).- Документация: этот файл (
docs/BROWSERLESS_EJ_SUDRF_ESIA_LOGIN.md).
См. также
- Настройка n8n: передача
login/passиз предыдущей ноды (Set) или из Credentials (Custom Auth) в body HTTP Request к Browserless. - Сохранение кук: после шага 2 записать строку кук в файл или переменную для использования в запросах к ej.sudrf.ru (подача обращений и т.д.).