Files
crm.clientright.ru/docs/BROWSERLESS_EJ_SUDRF_ESIA_LOGIN.md
Fedor fd54177ada docs: авторизация ej.sudrf.ru через ЕСИА (Browserless + n8n)
- docs/BROWSERLESS_EJ_SUDRF_ESIA_LOGIN.md: использование browserless_login_esia.js
- Вход/выход, типы ошибок, шаг 2 (SMS), технические детали
2026-02-04 10:54:03 +03:00

7.3 KiB
Raw Blame History

Авторизация 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 (этот скрипт)

Что делает скрипт

  1. Открывает https://ej.sudrf.ru/?fromOa=16RS0018.
  2. Если нужно — кликает «Вход» и переходит на страницу «Авторизация пользователя».
  3. Ставит галочку согласия (#iAgree), ждёт активации кнопки «Войти», нажимает её.
  4. На ЕСИА заполняет логин и пароль (видимые поля, ввод через клавиатуру + blur/change).
  5. Нажимает «Войти» на ЕСИА.
  6. Ждёт появления полей для ввода SMS-кода (или перехода на другую страницу).
  7. Возвращает куки через 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

Отдельный скрипт (или вторая нода) должен:

  1. Принять от пользователя SMS-код (например через Telegram или Webhook).
  2. Восстановить сессию: передать в Browserless сохранённые cookies из шага 1.
  3. Открыть страницу ЕСИА с полями SMS (или текущий URL из шага 1).
  4. Ввести код по цифре в каждое поле (или в одно поле, в зависимости от разметки ЕСИА).
  5. Дождаться редиректа на ej.sudrf.ru.
  6. Собрать куки для ej.sudrf.ru (PHPSESSID, fromOa и др.) и вернуть их (например записать в файл или передать в следующую ноду).

Формат кук для последующих запросов к ej.sudrf.ru:

PHPSESSID=...; fromOa=16RS0018

Технические детали

  • Куки в Browserless: в окружении /function используется page.cookies(), а не browserContext.cookies().
  • Видимость полей: на ЕСИА выбираются только видимые инпуты (проверка по boundingBox), чтобы не заполнять скрытые дубликаты.
  • Таймауты: по умолчанию используются таймауты порядка 1530 с для навигации и ожидания селекторов; при необходимости их можно увеличить в параметрах вызова 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 (подача обращений и т.д.).