Все статьи

Браузерные задачи: как парсить сайты с тяжелым JavaScript

Более 70% современных сайтов требуют JavaScript для рендеринга контента. Вот как браузерные задачи FourA возвращают полную страницу, когда обычные HTTP-запросы приходят пустыми.

Более 70% современных сайтов полагаются на JavaScript для рендеринга своего контента. Стандартный HTTP-запрос видит только исходную HTML-оболочку. Реальные данные загружаются после выполнения JavaScript, поэтому традиционные инструменты для парсинга возвращают пустые страницы.

Браузерные задачи FourA решают эту проблему, запуская реальный headless-экземпляр Chrome для каждого запроса.

Как это работает

Когда вы отправляете задачу с type: "browser", FourA:

  1. Запускает headless-браузер Chrome
  2. Переходит по целевому URL
  3. Ожидает выполнения JavaScript и стабилизации DOM
  4. При необходимости ожидает появления определенного CSS-селектора
  5. Возвращает полностью отрендеренный HTML

Весь процесс происходит на инфраструктуре FourA. Вы получаете чистый HTML без необходимости устанавливать браузер, настраивать Puppeteer и управлять обновлениями Chrome.

Когда использовать браузерные задачи

Используйте браузерные задачи, когда:

  • Это одностраничные приложения (React, Vue, Angular)
  • Страницы содержат ленивую загрузку контента (бесконечный скролл, кнопки «показать еще»)
  • Сайты требуют согласия на использование cookie или первоначальной настройки JS
  • Контент находится за процессами аутентификации на стороне клиента

Используйте задачи single, когда:

  • Это HTML-страницы с серверным рендерингом (новостные сайты, блоги, вики)
  • REST API возвращают JSON напрямую
  • Скорость является приоритетом (браузерные задачи занимают от 2 до 10 секунд против менее 1 секунды для задач single)

Пример: парсинг React-приложения

curl -X POST https://eu.api.foura.ai/api/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/dashboard",
    "type": "browser",
    "options": {
      "waitFor": ".dashboard-content",
      "timeout": 15000
    }
  }'

Селектор waitFor указывает FourA подождать, пока .dashboard-content появится в DOM, прежде чем делать снимок страницы. Это гарантирует, что все асинхронные данные загрузились.

Советы по производительности

  • Всегда используйте waitFor с конкретным селектором вместо ожидания по тайм-ауту. Это и быстрее, и надежнее.
  • Устанавливайте разумный тайм-аут. 15 секунд достаточно для большинства SPA. Увеличивайте его только для действительно медленных бэкендов.
  • Используйте single по умолчанию и переключайтесь на browser только тогда, когда контент отсутствует в ответе.

Что дальше

Мы работаем над дополнительными возможностями браузера, включая создание скриншотов, генерацию PDF и многошаговую навигацию (клики, прокрутка, заполнение форм). Но даже без этих функций браузерные задачи уже решают главную проблему: получение реального контента со страниц с рендерингом на JavaScript вместо пустой оболочки.

Ознакомьтесь с документацией для полного сравнения типов задач.