Как получить содержимое сайта в 1С, если блоки подгружаются через JavaScript?

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

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

Использование поля HTML-документа для отображения и анализа

Одним из доступных нам способов работы с динамическими страницами внутри конфигурации является объект Поле HTML документа. В отличие от простого получения текста через HTTPСоединение, этот элемент управления работает как полноценный движок браузера, который выполняет скрипты и отрисовывает блоки.

Рассмотрим по шагам, как настроить работу с ним:

  1. Создадим на форме реквизит с типом Строка.
  2. Выведем этот реквизит на форму.
  3. В свойствах элемента управления изменим вид на Поле HTML документа.

После этого мы можем передавать HTML-код в данное поле. Однако важно учитывать, что этот метод лучше всего подходит для отображения контента или выполнения простых скриптов. Если нам нужно передать данные, например, изображения, их необходимо предварительно обработать. Рассмотрим пример, как подготовить данные, если они содержат картинки:


// Пример подготовки строки для Поля HTML документа
// Перегоняем картинку в Base64
КартинкаВBase64 = ПреобразоватьКартинкуВBase64(ДвоичныеДанныеКартинки);
СтрокаHTML = СтрЗаменить(ИсходныйHTML, "путь_к_картинке", КартинкаВBase64);

// Присваиваем результат полю на форме
Элементы.ИмяНужногоПоля.Документ.body.innerHTML = СтрокаHTML;

Почему HTTPСоединение не всегда достаточно?

Когда мы используем HTTPСоединение, мы работаем с протоколом передачи данных на низком уровне. Мы получаем лишь строку ответа сервера. Если логика сайта построена на том, что контент «дорисовывается» в браузере клиента после получения ответа, HTTPСоединение это не увидит. Для таких целей мы должны использовать методы эмуляции действий пользователя.

Альтернативные подходы: автоматизация браузеров

Если функционала Поле HTML документа недостаточно, мы можем прибегнуть к более мощным инструментам. Рассмотрим профессиональные подходы, которые мы можем внедрить в наши системы:

  1. Анализ сетевых запросов (API): Чаще всего JavaScript подгружает данные через скрытые AJAX-запросы. Если мы откроем инструменты разработчика в браузере (F12) и перейдем на вкладку Network, мы сможем найти конкретный URL, к которому обращается скрипт. В таком случае мы сможем обращаться к этому API напрямую из 1С, получая чистый JSON, что гораздо быстрее и надежнее.
  2. Использование внешних библиотек (Selenium/Playwright): Мы можем использовать внешние скрипты на языке Python или Node.js, которые будут управлять реальным браузером (например, Chrome). Эти инструменты дожидаются полной отрисовки страницы. Мы можем запускать такие скрипты из 1С через команду ЗапуститьПриложение и считывать результат из временного файла.
  3. Headless-браузеры: Использование Puppeteer или аналогичных решений позволяет выполнять парсинг без графического интерфейса. Это экономит ресурсы сервера и позволяет стабильно обрабатывать сложные современные сайты на фреймворках вроде React или Vue.

Рекомендации по реализации

При выборе метода работы мы должны учитывать сложность сайта:

Таким образом, мы видим, что задача получения данных с динамических сайтов решается комплексно. Начинайте всегда с анализа сетевого трафика — зачастую прямая работа с API сервера заменяет необходимость эмуляции работы целого браузера.

← На главную