Как спарсить содержимое тега script в 1С?

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

Часто при интеграции со сторонними сайтами или парсинге веб-страниц мы сталкиваемся с ситуацией, когда нужные нам данные (например, идентификаторы, цены или массивы данных) находятся не в стандартных HTML-тегах, а зашиты внутри JavaScript-кода страницы. Разберем по шагам, как извлечь содержимое тега script и получить из него конкретную информацию.

Извлечение текста скрипта через ПостроительДОМ

Начнем с самого простого и правильного способа парсинга HTML в 1С — использования объекта ПостроительДОМ. Этот объект позволяет преобразовать текст HTML-страницы в удобную объектную модель.

Рассмотрим пример, где нам нужно получить текст самого первого скрипта на странице. Проанализируем следующий код:


ДОМ = ПостроительДОМ.Прочитать(ЧтениеHTML);
СодержимоеТегаСкрипт = ДОМ.ПолучитьЭлементыПоИмени("script").Элемент(0).ТекстовоеСодержимое;

Если же на странице много скриптов и нам нужно найти определенный, мы можем перебрать все теги в цикле. Посмотрим на пример такого перебора:


ВсеТегиСкриптНаСтранице = ДОМ.ПолучитьЭлементыПоИмени("script");
Для каждого Скрипт из ВсеТегиСкриптНаСтранице Цикл
    СодержимоеТегаСкрипт = Скрипт.ТекстовоеСодержимое;
    // Здесь можно проверять, содержит ли текст скрипта нужную нам переменную
КонецЦикла;

Важно: ПостроительДОМ чувствителен к валидности HTML. Если верстка на сайте "кривая" (есть незакрытые теги), 1С может выдать ошибку при чтении документа. В таком случае придется искать нужный скрипт как подстроку в общем тексте страницы с помощью функции СтрНайти.

Как получить конкретную цифру из текста скрипта?

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

  1. Использование регулярных выражений (RegExp)

    Это самый надежный способ. Мы можем подключить COM-объект VBScript.RegExp и найти нужное число по шаблону. Например, если в коде написано var item_id = 12345;, мы настраиваем регулярное выражение на поиск item_id\s*=\s*(\d+) и легко забираем числовую группу.

  2. Метод строковых манипуляций

    Если вы не хотите использовать регулярные выражения, можно обойтись стандартными строковыми функциями 1С: СтрНайти, Сред, Лев, Прав. Выясним позицию уникального текста перед нашей цифрой (например, ищем строку "price":), прибавляем длину этой строки и вырезаем символы до ближайшей запятой или закрывающей скобки. Не забудьте использовать СокрЛП для очистки результата от лишних пробелов.

  3. Извлечение данных через JSON

    Часто разработчики сайтов помещают в скрипты целые структуры данных в формате JSON. Например: window.settings = {"id": 123, "val": 500};. В таком случае мы можем вырезать подстроку от первой открывающей фигурной скобки { до последней закрывающей }, а затем прочитать эту строку с помощью штатной функции 1С ПрочитатьJSON. На выходе мы получим удобное соответствие или структуру.

Альтернативный вариант: Поле HTML документа

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

В этом случае платформа 1С использует встроенный движок браузера. После полной загрузки страницы мы можем обратиться к объектной модели документа: Элементы.ИмяПоля.Документ и выполнить необходимые скрипты или получить значения уже инициализированных JavaScript-переменных напрямую в 1С.

Подводя итог, проанализируем ситуацию: для статических страниц идеальным решением будет ПостроительДОМ и последующий разбор текста (через JSON или строковые функции). Для сложных динамических страниц лучше использовать Поле HTML документа с ожиданием рендеринга.

← На главную