Как получить данные в 1С, если вместо ответа http-сервиса отображается прелоадер (спиннер)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с современными веб-порталами (особенно государственными ресурсами, такими как наш.дом.рф) разработчики часто сталкиваются с ситуацией, когда стандартный запрос возвращает не ожидаемый JSON или HTML-код с данными, а техническую страницу с «прелоадером» — анимированным спиннером ожидания. В этой статье мы подробно разберем, почему это происходит, проанализируем механизмы работы современных сайтов и выясним, как заставить 1С получать корректные данные.

Почему 1С видит «спиннер» вместо данных?

Основная причина кроется в архитектуре современных веб-приложений, называемой SPA (Single Page Application). Проанализируем механику процесса: когда вы отправляете запрос через объект HTTPСоединение, сервер возвращает не готовую страницу, а пустой «каркас» и тяжелый набор JavaScript-сценариев. Обычный браузер (Chrome, Firefox) исполняет эти скрипты, которые в свою очередь делают дополнительные запросы к бэкенду и отрисовывают данные на экране.

Объект HTTPСоединение в 1С является «низкоуровневым» клиентом. Он умеет скачивать тело ответа, но не умеет исполнять JavaScript. Получив статус ответа 200, 1С считает задачу выполненной, однако в теле ответа содержится лишь код индикатора загрузки. Именно поэтому увеличение таймаута не приносит результата — соединение закрывается корректно с точки зрения протокола HTTP, но данные просто не успевают «родиться» внутри JS-движка, которого у HTTPСоединение нет.

Способ 1. Реверс-инжиниринг скрытого API

Рассмотрим наиболее правильный и производительный способ решения задачи. Вместо того чтобы пытаться загрузить и отрендерить всю страницу целиком, мы можем найти прямой путь к данным, который использует сам сайт. Разберем этот процесс по шагам:

  1. Откройте нужный сайт в браузере (например, Chrome) и перейдите на страницу с интересующими данными.
  2. Нажмите F12 и перейдите на вкладку Network (Сеть).
  3. Включите фильтр Fetch/XHR. Это отсеет картинки, стили и лишние скрипты, оставив только запросы к данным.
  4. Выполните поиск или обновите страницу. Вы увидите список запросов, которые возвращают JSON-пакеты.
  5. Проанализируйте структуру этих запросов. Обычно они ведут на адреса вида /api/v1/get_data....

После того как нужный URL найден, его можно использовать в 1С напрямую. Посмотрим на пример формирования такого запроса:


Соединение = Новый HTTPСоединение("наш.дом.рф", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL());
ЗаголовокЗапроса = Новый Соответствие;
ЗаголовокЗапроса.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36");
ЗаголовокЗапроса.Вставить("Accept", "application/json");
ЗаголовокЗапроса.Вставить("Referer", "https://наш.дом.рф/сервис/поиск");

Запрос = Новый HTTPЗапрос("/api/pdl/v1/objects/list", ЗаголовокЗапроса);
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
КонецЕсли;

Важный нюанс: многие сайты защищаются от парсинга и проверяют наличие специфических куки (Cookies) или токенов безопасности (CSRF-token). Если запрос возвращает ошибку 403, проанализируйте в консоли браузера вкладку Headers (Заголовки) и перенесите все ключевые параметры в свой код 1С.

Способ 2. Использование современного движка Chromium в 1С

Если сайт использует сложные алгоритмы формирования подписей или JS-челленджи, которые сложно воспроизвести через HTTPСоединение, мы можем задействовать Поле HTML документа. Начиная с версии платформы 1С 8.3.14 (и особенно стабильно с 8.3.18), в 1С появилась возможность использовать движок Chromium вместо устаревшего WebKit или Internet Explorer.

Рассмотрим, как настроить конфигурацию для корректной работы:

  1. В свойствах конфигурации установите режим использования РежимИспользованияВстроенногоЯзыка.Вариант2 или убедитесь, что в свойствах конкретного Поля HTML документа на форме выбран современный движок в параметре Режим отображения.
  2. В коде управляемой формы мы можем дождаться полной загрузки страницы и программно извлечь содержимое.

Проанализируем пример получения данных из уже отрисованного DOM-дерева:


&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
    // ЭлементФормы.ПолеСайта - это программное имя поля HTML документа
    ТекстСтраницы = Элементы.ПолеСайта.Документ.documentElement.innerHTML;
    
    // Если данные лежат в JSON внутри тега script или в определенном div
    // Мы можем использовать регулярные выражения или поиск по строке
    ПозицияНачала = Найти(ТекстСтраницы, "window.__INITIAL_STATE__ =");
    // Далее следует логика парсинга конкретного блока
КонецПроцедуры

Главный минус этого способа — необходимость наличия открытой формы (интерфейса). Для фоновых заданий на сервере этот метод не подходит, так как требует контекста клиентского приложения.

Способ 3. Преодоление TLS и проблем с сертификатами

При работе с государственными порталами РФ (такими как наш.дом.рф) часто возникает проблема не со спиннером, а с невозможностью установить защищенное соединение. 1С может выдавать ошибку «Удаленный хост принудительно разорвал существующее подключение».

Выясним причину: такие сайты перешли на отечественные сертификаты шифрования. Для решения проблемы в 1С необходимо выполнить следующие шаги:

Способ 4. Использование Headless-браузеров (внешнее звено)

Если защита сайта крайне высока (используются проверки движений мыши, Canvas Fingerprinting и т.д.), проанализируем вариант создания «прослойки». Мы можем использовать внешнюю библиотеку на Python (библиотека Selenium или Playwright) или Node.js (Puppeteer).

Сценарий взаимодействия будет следующим:

  1. 1С запускает внешнее приложение (через ЗапуститьПриложение) или отправляет запрос к локальному микросервису на Python.
  2. Внешний скрипт запускает «невидимый» браузер Chrome, заходит на сайт, имитирует ожидание исчезновения спиннера.
  3. После прогрузки данных скрипт сохраняет результат в текстовый файл или возвращает его в 1С в ответе на локальный HTTP-запрос.

Это самый ресурсоемкий, но и самый надежный метод обхода прелоадеров, так как для сайта такой запрос ничем не отличается от действий реального пользователя.

Подведение итогов

Для успешной обработки ответа http-сервиса в 1С важно понимать, что прелоадер — это не ошибка, а промежуточное состояние интерфейса. Чтобы получить данные, мы должны либо спуститься на уровень ниже и работать с прямым API сайта, либо подняться на уровень выше и использовать полноценный движок рендеринга Chromium.

Рекомендуем начинать с анализа вкладки Network в браузере. В 90% случаев это позволяет найти прямой URL, который отдает чистый JSON, что работает в десятки раз быстрее и стабильнее любых визуальных методов парсинга.

← На главную