Как решить проблему Please enable JavaScript to view the page content при выполнении HTTP-запроса в 1С

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

При интеграции 1С с внешними веб-ресурсами разработчики часто сталкиваются с ситуацией, когда обычный объект HTTPЗапрос возвращает вместо ожидаемых данных (JSON или HTML-кода страницы) лаконичное сообщение: "Please enable JavaScript to view the page content". Это сигнализирует о том, что целевой сайт защищен специализированными средствами защиты от автоматизированного сбора данных (скрейпинга) или DDoS-атак, такими как Cloudflare, F5 BIG-IP или внутренними фильтрами WAF (Web Application Firewall). В данной статье мы подробно разберем, почему это происходит и какими способами можно обойти данное ограничение в среде 1С.

Выясним причину: почему HTTPЗапрос не работает?

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

Когда вы обращаетесь к сайту, сервер проверяет ваш заголовок User-Agent и другие параметры. Если он подозревает, что запрос делает бот, он отправляет промежуточную страницу с JS-скриптом. Браузер пользователя незаметно для него исполняет этот скрипт, вычисляет некий математический токен, устанавливает специальную Cookie и перенаправляет запрос обратно на сервер. Сервер видит правильную куку и «пропускает» пользователя к реальному контенту. Поскольку 1С просто скачивает текст страницы, скрипт не выполняется, токен не вычисляется, и вы остаетесь перед «закрытой дверью» с надписью об отключенном JavaScript.

Решение №1: Использование официального API (самый надежный путь)

Рассмотрим на примере сайта румынского министерства финансов (mfinante.ro), о котором шла речь в исходном вопросе. Попытка «парсить» визуальную страницу — это тупиковый путь, так как дизайн и методы защиты могут меняться. Правильнее всего будет найти официальный программный интерфейс.

Для налогоплательщиков Румынии существует сервис ANAF API. Вместо того чтобы имитировать действия пользователя в браузере, мы можем отправить прямой структурированный запрос. Разберем примерную схему взаимодействия:

  1. Найдем документацию к API (обычно это JSON или SOAP сервис).
  2. Сформируем HTTPЗапрос к адресу сервиса (например, для проверки по ИНН/CUI).
  3. Укажем в заголовках Content-Type: application/json.
  4. Передадим тело запроса в формате JSON.

Такой метод гарантированно вернет данные без проверки на JavaScript, так как API предназначено именно для программного доступа.

Решение №2: Использование скрытого ПоляHTMLДокумента

Если API отсутствует, нам придется имитировать поведение браузера. В 1С для этого есть объект ПолеHTMLДокумента. В отличие от HTTPЗапрос, этот объект использует движок Internet Explorer (в старых версиях) или современные движки (в новых версиях платформы), которые умеют исполнять JavaScript.

Однако при работе с этим полем часто возникают всплывающие окна с ошибками скриптов или вопросами безопасности. Чтобы этого избежать, проанализируем настройку режима «тишины». Рассмотрим пример кода для программного создания объекта и подавления диалогов:


// Создаем форму или используем готовую с элементом ПолеHTMLДокумента
// Чтобы подавить ошибки скриптов, обратимся к объекту COM
ДокументHTML = ЭлементыФормы.ПолеHTMLДокумента1.Документ;
// Для подавления окон в ActiveX Internet Explorer:
ЭлементыФормы.ПолеHTMLДокумента1.Silent = Истина; 

Рассмотрим подробнее алгоритм действий:

  1. Размещаем ПолеHTMLДокумента на форме (можно сделать его невидимым или разместить на скрытой странице панели).
  2. Вызываем метод Перейти(АдресСайта).
  3. Ожидаем событие ДокументСформирован. На этом этапе скрипты защиты уже отработали.
  4. Извлекаем данные непосредственно из объектной модели документа (DOM) через ЭлементыФормы.ПолеHTMLДокумента1.Документ.body.innerText.

Решение №3: Комбинированный метод (Куки-сессии)

Постоянно использовать ПолеHTMLДокумента ресурсоемко и неудобно для массовых запросов. Проанализируем ситуацию: нам нужно пройти проверку JavaScript всего один раз, чтобы получить «проходной билет» в виде файлов Cookie.

Выясним, как автоматизировать этот процесс:

  1. Один раз загружаем страницу через ПолеHTMLДокумента.
  2. После успешной загрузки вытаскиваем строку куки: КукиСайта = ЭлементыФормы.ПолеHTMLДокумента1.Документ.cookie;.
  3. Используем это значение в обычном HTTPЗапрос, добавляя заголовок Cookie.

Посмотрим на пример формирования такого запроса:


Соединение = Новый HTTPСоединение("www.mfinante.ro");
Запрос = Новый HTTPЗапрос("/infocodfiscal.html");

// Подставляем куки, полученные через браузер
Запрос.Заголовки.Вставить("Cookie", ПолученныеКукиИзПоляHTML);
// Обязательно имитируем реальный браузер в User-Agent
Запрос.Заголовки.Вставить("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");

Ответ = Соединение.Получить(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();

Решение №4: Настройка заголовков (Headers)

Иногда защитный экран срабатывает просто потому, что 1С отправляет слишком «честный» заголовок User-Agent, который прямо говорит серверу: «Я — библиотека 1C+Runtime». Посмотрим, какие заголовки необходимо добавить, чтобы минимизировать риск блокировки:

Решение №5: Использование внешних инструментов (Headless-браузеры)

В наиболее сложных случаях, когда защита постоянно обновляется (например, Cloudflare последней версии), встроенных средств 1С может быть недостаточно. Профессиональные разработчики используют внешние «прослойки».

Рассмотрим вариант использования Python с библиотекой cloudscraper. Эта библиотека специально разработана для обхода проверок на JavaScript. Мы можем написать небольшой скрипт на Python, который принимает ИНН, делает запрос и возвращает результат, а из 1С запускать его через ЗапуститьПриложение или через COMОбъект("WScript.Shell").

Пример логики вызова внешнего скрипта:


КомандаЗапуска = "python C:\Scripts\get_data.py " + ИНН;
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
// Далее читаем результат из текстового файла, куда его сохранил скрипт

Подведем итоги

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

Выбор метода зависит от ваших задач: для разовых запросов подойдет ПолеHTMLДокумента, для высоконагруженных систем — поиск API или использование внешних специализированных скриптов.

← На главную