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

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

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

Почему не подходит обычный GET-запрос?

Казалось бы, почему просто не выполнить HTTP-запрос по нужному адресу и не сохранить полученный HTML? Проанализируем этот подход. Если мы воспользуемся объектом HTTPСоединение и выполним GET-запрос, сервер отдаст нам лишь исходный HTML-код. Однако большинство современных веб-сайтов представляют собой SPA-приложения (Single Page Application), построенные на фреймворках (например, Vue, React, Quasar). В исходном коде такой страницы мы увидим лишь пустой блок div и вызов скриптов.

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

Способ 1. Использование Google Chrome в режиме Headless

Современные браузеры поддерживают специальный режим работы из командной строки — Headless (без графического интерфейса). Разберем по шагам, как использовать этот функционал. Chrome может принять URL, отрендерить его скрыто от пользователя и выгрузить результат в файл.

Базовые ключи запуска, которые нам понадобятся:

  1. --headless — указывает браузеру работать в фоновом режиме без отображения окон.
  2. --disable-gpu — отключает аппаратное ускорение (рекомендуется для исключения ошибок при фоновом рендеринге).
  3. --window-size — задает размер виртуального экрана (например, 1920,1080), что критически важно для адаптивной верстки.
  4. --screenshot или --print-to-pdf — указывает формат вывода.

Для создания PDF-копии команда выглядит так:


"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --print-to-pdf="C:\temp\fileName.pdf" https://example.com/

Для создания картинки обязательно нужно указать путь к файлу после знака равенства, иначе файл не будет создан:


"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --screenshot="C:\temp\fileName.png" --window-size=1920,3000 https://example.com/

Как запустить это скрыто из 1С?

Если мы воспользуемся стандартной функцией КомандаСистемы, на экране на долю секунды мелькнет черное окно командной строки. Чтобы запуск произошел абсолютно незаметно, воспользуемся COM-объектом WScript.Shell. Посмотрим на пример кода:


Процедура ПолучитьСкриншотЧерезChrome(URL, ПутьКФайлу)
    Шелл = Новый COMОбъект("WScript.Shell");
    ПутьКХрому = """C:\Program Files\Google\Chrome\Application\chrome.exe""";
    // Указываем таймаут для ожидания загрузки скриптов сайта
    Параметры = " --headless --disable-gpu --virtual-time-budget=5000 --window-size=1920,1080 --screenshot=""" + ПутьКФайлу + """ ";
    Команда = ПутьКХрому + Параметры + URL;
    
    // Параметр 0 скрывает окно, Истина - заставляет 1С дождаться завершения команды
    Шелл.Run(Команда, 0, Истина);
КонецПроцедуры

Важный нюанс: Обратите внимание на параметр --virtual-time-budget=5000. Он заставляет браузер подождать 5 секунд (5000 мс) после базовой загрузки. Это необходимо для того, чтобы все асинхронные скрипты и анимации успели отработать.

Способ 2. Использование утилит wkhtmltopdf и wkhtmltoimage

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

Алгоритм работы из 1С аналогичен: мы формируем строку команды и вызываем её скрыто.


Процедура СоздатьPDFЧерезУтилиту(URL, ПутьКФайлу)
    Шелл = Новый COMОбъект("WScript.Shell");
    ПутьКУтилите = """C:\wkhtmltopdf\bin\wkhtmltopdf.exe""";
    // Вызов утилиты с передачей источника и файла назначения
    Команда = ПутьКУтилите + " " + URL + " """ + ПутьКФайлу + """";
    Шелл.Run(Команда, 0, Истина);
КонецПроцедуры

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

Способ 3. Использование облачных API-сервисов

В случае, когда сервер 1С находится в облаке или у вас нет прав на запуск исполняемых файлов (ограничения безопасности), проанализируем использование сторонних REST API. Существуют сервисы, которым вы отправляете URL, а в ответ получаете готовый бинарный файл.

Посмотрим на пример реализации с помощью штатных объектов 1С:


Процедура ПолучитьКопиюЧерезAPI(URLЦели, ПутьСохраненияНаДиске)
    // Подключаемся к сервису генерации скриншотов по HTTPS
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    HTTP = Новый HTTPСоединение("api.screenshot-service.com", 443,,,,, ЗащищенноеСоединение);
    
    // Формируем GET запрос, передавая URL сайта параметром
    ПараметрыЗапроса = "/capture?url=" + СтрЗаменить(URLЦели, ":", "%3A") + "&format=pdf";
    Запрос = Новый HTTPЗапрос(ПараметрыЗапроса);
    
    // Выполняем запрос и сразу сохраняем ответ в файл
    Ответ = HTTP.Получить(Запрос, ПутьСохраненияНаДиске);
    
    Если Ответ.КодСостояния <> 200 Тогда
        Сообщить("Ошибка получения файла. Код: " + Ответ.КодСостояния);
    КонецЕсли;
КонецПроцедуры

Этот метод не требует никакого дополнительного ПО на сервере 1С. Вы просто отправляете данные через HTTPСоединение и получаете результат.

Способ 4. Сложные сценарии с Puppeteer или Playwright

Выясним причину, по которой иногда недостаточно простых параметров командной строки. Если целевая страница требует предварительной авторизации (ввод логина и пароля), либо нужный контент подгружается только при прокрутке страницы вниз (lazy-loading), ни один из вышеописанных способов напрямую не сработает.

В таких случаях мы пишем промежуточный скрипт на Node.js или Python. Используя библиотеки управления браузером (Puppeteer или Playwright), скрипт выполняет нужные действия: нажимает кнопки, вводит текст, скроллит страницу, ждет появления определенных элементов, и только потом сохраняет копию. А из 1С мы просто вызываем этот скрипт, передавая ему необходимые аргументы (учетные данные или ID документа) через тот же WScript.Shell.

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

← На главную