Как правильно скачивать данные со страниц, которые подгружаются динамически через JavaScript?

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

Часто при попытке спарсить данные с сайта через HTTPСоединение разработчики сталкиваются с тем, что вместо ожидаемого контента скачивается лишь пустая «обертка» с JavaScript-кодом. Это происходит потому, что сайт загружает данные асинхронно после полной отрисовки страницы в браузере. Давайте разберем, как преодолеть эту проблему и получить доступ к содержимому.

Шаг 1: Анализ запросов и использование User-Agent

Первая причина, по которой сервер может отдавать «пустую» страницу или капчу — это подозрение, что запрос выполняет бот. Серверы часто проверяют заголовок User-Agent, чтобы убедиться, что запрос пришел от реального браузера, а не из программного кода 1С. Рассмотрим пример, как передать правильные заголовки в 1С:


Процедура УстановкаЗаголовковВHTTPЗапросеИз1С()
    Соединение = Новый HTTPСоединение("mysite.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
    Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    
    Запрос = Новый HTTPЗапрос("/path/to/page", Заголовки);
    Ответ = Соединение.Получить(Запрос);
КонецПроцедуры

Важно понимать, что User-Agent — это идентификатор вашего «браузера». Использование актуальной строки (как в примере выше) помогает имитировать поведение популярных обозревателей, таких как Chrome или Firefox, что зачастую снимает базовые блокировки.

Шаг 2: Поиск скрытого API

Если подмена заголовков не помогла, значит, данные подгружаются через AJAX-запросы. Чтобы найти, откуда именно сайт берет информацию, выполним следующие действия:

  1. Откроем нужную страницу в браузере Chrome или Edge.
  2. Нажмем клавишу F12, чтобы открыть инструменты разработчика.
  3. Перейдем на вкладку Network (Сеть).
  4. Перезагрузим страницу и отфильтруем запросы по пункту Fetch/XHR.
  5. В процессе работы с сайтом мы увидим, как в списке появляются запросы, возвращающие JSON или XML — это и есть «чистые» данные, которые нам нужны.

Скопировав URL и заголовки такого запроса, мы сможем обращаться напрямую к API сайта из 1С, минуя сложный парсинг HTML.

Шаг 3: Использование браузерного движка

Если данные защищены сложными механизмами (например, Cloudflare), обычными HTTP-запросами их не получить. В таких случаях нам поможет полноценный рендеринг страницы:

Рекомендации по автоматизации

Никогда не используйте жесткие задержки через Пауза или цикл ожидания. Если вы используете ПолеHTMLДокумента, лучше реализовать проверку через цикл с выходом по условию, когда нужный HTML-блок (например, getElementById) станет доступен в объектной модели документа. Это сделает ваш код надежным и быстрым.

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

← На главную