При разработке механизмов парсинга или интеграции с веб-сервисами через «Поле HTML документа» программисты часто сталкиваются с неприятным сообщением: «Ваш браузер устарел, пожалуйста, обновите ваш браузер». Эта проблема возникает из-за того, что по умолчанию встроенные механизмы платформы 1С используют старые движки рендеринга (Internet Explorer), которые не поддерживают современные стандарты веб-верстки и протоколы безопасности. В этой статье мы подробно разберем, как заставить 1С корректно отображать современные сайты, используя различные подходы: от настройки системного реестра до перехода на актуальные версии платформы.
Для начала проанализируем ситуацию: почему современные сайты, такие как Infostart или Avito, отказываются работать внутри 1С? Проблема кроется в компоненте ПолеHTMLДокумента. В старых версиях платформы (до 8.3.14) этот элемент управления всегда использовал движок Internet Explorer, установленный в операционной системе, причем в режиме совместимости с крайне старой версией IE7. Даже если у вас в Windows установлен Internet Explorer 11, 1С «прикидывается» старым браузером, что вызывает блокировку со стороны современных веб-ресурсов.
Рассмотрим, как менялась ситуация в зависимости от версии платформы:
Самый простой и эффективный способ — обновить платформу 1С. Как было отмечено в ходе обсуждения проблемы, переход на версию 8.3.14 и выше позволяет встроенному браузеру использовать WebKit. Если ваша конфигурация позволяет, рекомендуется обновляться сразу до 8.3.20 или выше, чтобы использовать мощь движка Chromium.
Проанализируем преимущества этого подхода: вам не нужно вносить изменения в настройки операционной системы на каждом рабочем месте пользователя. Платформа сама несет в себе необходимые библиотеки для рендеринга. Однако стоит учитывать, что при использовании WebKit/Chromium могут измениться некоторые нюансы взаимодействия с DOM-моделью через встроенный язык 1С.
Если по техническим причинам вы вынуждены оставаться на платформе версии ниже 8.3.14, разберем по шагам метод принудительного повышения версии эмуляции браузера. По умолчанию система считает, что 1С — это IE7. Мы можем изменить это поведение через реестр Windows.
Для этого необходимо выполнить следующие действия:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION.1cv8c.exe, для толстого — 1cv8.exe.11000 (в десятичной системе исчисления) или 2AF8 (в шестнадцатеричной). Это заставит 1С использовать движок IE11.Важный нюанс: эти изменения вносятся в ветку HKEY_CURRENT_USER, а значит, они будут действовать только для текущего пользователя. Если с программой работают несколько человек, данные записи нужно добавить для каждого. Проанализируем пример кода, который позволяет автоматизировать эту задачу прямо из 1С при старте системы:
Процедура УстановитьЭмуляциюБраузера() Экспорт
#Если ТонкийКлиент Или ТолстыйКлиентОбычноеПриложение Тогда
ПутьКРеестру = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
ИмяПроцесса = "1cv8c.exe"; // Для тонкого клиента
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
ТекущееЗначение = WshShell.RegRead(ПутьКРеестру + "\" + ИмяПроцесса);
Если ТекущееЗначение <> 11000 Тогда
WshShell.RegWrite(ПутьКРеестру + "\" + ИмяПроцесса, 11000, "REG_DWORD");
КонецЕсли;
Исключение
// Возможно, прав не хватает или объект не создался
КонецПопытки;
#КонецЕсли
КонецПроцедуры
Часто при парсинге сайтов (например, при попытке получить данные о релизах с портала 1С) программисты сталкиваются с тем, что вместо содержимого страницы приходит код состояния 302 (Moved Temporarily). Это означает, что сервер пытается перенаправить вас на другой URL (например, с http на https или на страницу авторизации).
Разберем ситуацию: стандартный объект HTTPСоединение в 1С не умеет автоматически следовать по редиректам. Вам нужно обработать это вручную. Выясним причину: в заголовках ответа от сервера при коде 302 всегда присутствует заголовок Location, содержащий новый адрес.
Рассмотрим пример правильной обработки такого перехода:
Функция ПолучитьДанныеСУчетомРедиректа(URL)
// Разделяем URL на части (хост, ресурс)
// Предположим, у нас есть функция ПарситьURL(URL)
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 302 Тогда
НовыйАдрес = Ответ.Заголовки.Получить("Location");
Если НовыйАдрес <> Неопределено Тогда
// Повторяем запрос по новому адресу
Возврат ПолучитьДанныеСУчетомРедиректа(НовыйАдрес);
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции
Проанализируем еще одну причину, по которой сайты выдают ошибку устаревшего браузера. При выполнении HTTPЗапроса платформа 1С по умолчанию передает заголовок User-Agent, содержащий строку вида 1C+Enterprise/8.3. Современные системы защиты (WAF, Cloudflare) мгновенно идентифицируют такой запрос как бота и отдают заглушку «Обновите браузер».
Для решения этой проблемы необходимо имитировать работу реального браузера. Посмотрим на пример кода, где мы добавляем заголовки к запросу:
Запрос = Новый HTTPЗапрос(ПутьНаСервере);
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36");
Запрос.Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8");
Результат = Соединение.Получить(Запрос);
Использование актуального User-Agent вместе с современным движком (или эмуляцией IE11) позволяет обходить большинство проверок на «устаревший браузер».
Мы рассмотрели комплексный подход к решению проблемы отображения веб-страниц в 1С. Подведем итоги:
FEATURE_BROWSER_EMULATION), чтобы заставить компоненту 1С использовать ресурсы IE11 вместо IE7.User-Agent, чтобы сайт не принимал вашу обработку за вредоносного бота.