При сверке данных между внешним веб-сайтом и платформой 1С специалисты часто сталкиваются с ситуацией, когда стандартно скачанная веб-страница не содержит нужных цифр и итоговых расчетов. Проанализируем, почему это происходит и какими способами можно программно получить вычисленный текст страницы для последующего парсинга в 1С.
Современные веб-сайты часто строятся с использованием активного выполнения JavaScript на стороне клиента. При отправке стандартного HTTP-запроса через HTTPСоединение или утилиту curl сервер возвращает лишь базовый HTML-каркас и ссылки на файлы JS-скриптов. Сам расчет и отображение информации происходят уже в веб-браузере после отработки скриптов и выполнения фоновых асинхронных запросов (XHR или Fetch). Простые загрузчики HTML не исполняют JavaScript-код, поэтому в скачанном файле нужных данных не оказывается.
Рассмотрим основные и наиболее эффективные варианты решения этой задачи.
Самый доступный вариант в рамках платформы 1С без применения сторонних утилит — использовать элемент управления формы ПолеHTMLДокумента.
Разберем алгоритм работы по шагам:
ПолеHTMLДокумента.body.innerText или textContent).В платформах 1С начиная с версии 8.3.14 в качестве движка встроенного браузера применяется Chromium/WebKit, что позволяет корректно загружать динамические веб-страницы и выполнять современный JavaScript.
Важно: Данный метод работает в контексте клиента (в управляемой или обычной форме). На стороне сервера 1С программно создать и прочитать элемент формы нельзя.
Зачастую загрузка веб-страницы целиком и её рендеринг в браузере — избыточная операция. Скрипт сайта рассчитывает данные, обращаясь к внутреннему REST API или JSON-сервису.
Выясним, как обойтись без сохранения визуального текста страницы:
XHR или Fetch.HTTPСоединение и HTTPЗапрос.Этот способ является самым быстрым и надежным, так как работает непосредственно на сервере 1С без необходимости отрисовывать графический интерфейс.
Если данные генерируются исключительно сложными алгоритмами на JS без внешних запросов к API, или сайт защищен от прямого обращения, разберем вариант использования headless-браузера (браузера без графического интерфейса).
Посмотрим на общую схему применения данного подхода:
ЗапуститьПриложение.Проанализируем пример внешнего 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-браузера.