Как программно сохранить веб-страницу с динамическими данными в текст для 1С

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

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

Причина проблемы: динамическая генерация контента (Client-Side Rendering)

Современные веб-сайты часто строятся с использованием активного выполнения JavaScript на стороне клиента. При отправке стандартного HTTP-запроса через HTTPСоединение или утилиту curl сервер возвращает лишь базовый HTML-каркас и ссылки на файлы JS-скриптов. Сам расчет и отображение информации происходят уже в веб-браузере после отработки скриптов и выполнения фоновых асинхронных запросов (XHR или Fetch). Простые загрузчики HTML не исполняют JavaScript-код, поэтому в скачанном файле нужных данных не оказывается.

Рассмотрим основные и наиболее эффективные варианты решения этой задачи.

Способ 1. Использование встроенного элемента «ПолеHTMLДокумента» на форме 1С

Самый доступный вариант в рамках платформы 1С без применения сторонних утилит — использовать элемент управления формы ПолеHTMLДокумента.

Разберем алгоритм работы по шагам:

  1. Размещаем на форме элемент ПолеHTMLДокумента.
  2. Загружаем целевую страницу, указав её URL в свойстве элемента или перейдя по адресу программно.
  3. Ожидаем завершения загрузки страницы и отработки внутренних скриптов сайта.
  4. Считываем сформированный текстовый контент через обращение к объектной модели DOM (например, с помощью свойства body.innerText или textContent).

В платформах 1С начиная с версии 8.3.14 в качестве движка встроенного браузера применяется Chromium/WebKit, что позволяет корректно загружать динамические веб-страницы и выполнять современный JavaScript.

Важно: Данный метод работает в контексте клиента (в управляемой или обычной форме). На стороне сервера 1С программно создать и прочитать элемент формы нельзя.

Способ 2. Прямое обращение к внутреннему API сайта

Зачастую загрузка веб-страницы целиком и её рендеринг в браузере — избыточная операция. Скрипт сайта рассчитывает данные, обращаясь к внутреннему REST API или JSON-сервису.

Выясним, как обойтись без сохранения визуального текста страницы:

  1. Открываем сайт в обычном браузере и запускаем инструменты разработчика (клавиша F12).
  2. Переходим на вкладку «Сеть» (Network) и включаем фильтрацию по типу XHR или Fetch.
  3. Находим запрос, по которому страница получает итоговые цифры и расчетные данные (чаще всего ответ приходит в формате JSON или XML).
  4. Воспроизводим этот запрос напрямую из 1С с помощью встроенных объектов HTTPСоединение и HTTPЗапрос.

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

Способ 3. Запуск фонового браузера (Headless Chrome / Playwright / Puppeteer)

Если данные генерируются исключительно сложными алгоритмами на JS без внешних запросов к API, или сайт защищен от прямого обращения, разберем вариант использования headless-браузера (браузера без графического интерфейса).

Посмотрим на общую схему применения данного подхода:

  1. На сервере или рабочей станции настраивается утилита или внешняя консольная программа (например, с использованием Headless Chrome, Puppeteer или Playwright).
  2. Из 1С вызов внешнего скрипта выполняется с помощью метода ЗапуститьПриложение.
  3. Скрипт открывает страницу в фоновом режиме, ожидает отработки JavaScript, сохраняет итоговое текстовое содержимое или HTML в файл на диске.
  4. 1С считывает полученный текстовый файл и выполняет парсинг необходимых данных.

Проанализируем пример внешнего PHP-скрипта с использованием cURL для получения исходного кода страниц:


$page_name = 'http://mista.ru';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $page_name);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17');
$result = curl_exec($ch);
curl_close($ch);

$fp = fopen('mista.html', 'w+');
fwrite($fp, $result);
fclose($fp);

Резюме: Для получения динамических данных с сайта оптимальным выбором на сервере 1С является поиск прямого API-запроса, а на клиенте — применение элемента ПолеHTMLДокумента или запуск headless-браузера.

← На главную