Вопрос или проблема
Добрый день всем!
Я разрабатываю приложение на основе безсерверного фреймворка Node, и хотел бы узнать, существует ли API для получения HTML-страниц с веба после того, как прошло определенное время и страница была отрендерена его JavaScript-кодом. Я думал о использовании selenium-webdriver или puppeteer, но они требуют наличия тяжелых приложений на машине, что AWS Lambda не позволяет из-за ограничений по размеру. Поэтому я хотел бы просто использовать API, который возвращал бы содержание соответствующей страницы URL после указанного произвольного времени.
Существует ли такой API или альтернатива тому, что я ищу? Если в данный момент нет возможности сделать это, мне интересно разработать его самостоятельно.
Заранее спасибо!
Существовало старое программное обеспечение под названием “Sikuli IDE“, которое было основано на Java и использовалось для автоматизации задач, позволяя выполнять команды на основе изображений. Например, вы могли определить команды для щелчка там, где на вашем рабочем столе находится иконка корзины. Также вы могли сделать скриншот и сравнить его с предыдущим. Второй вариант – это недельная рекомендация, которая пытается обойти проверки на JavaScript.
Попробуйте добавить что-то вроде этого после </body>
:
<script>
console.log(document.getElementsByTagName("html")[0].innerHTML)
<script>
Используйте Щелчок правой кнопкой мыши — инспектировать
(в браузере Chrome, в других он может называться по-другому), чтобы увидеть вывод.
Ответ или решение
Вопрос, касающийся получения HTML-контента веб-страниц, отрендеренного с использованием JavaScript через определенное время, актуален для многих разработчиков, работающих с безсерверными решениями, такими как AWS Lambda. В данном ответе я постараюсь предоставить полное и детальное решение вашей проблемы.
Вступление
С появлением одностраничных приложений и сложных веб-страниц, использующих JavaScript для динамической загрузки содержимого, задача получения полных HTML-страниц становится более сложной. Использование библиотек, таких как Selenium или Puppeteer, действительно затруднительно в среде AWS Lambda, где существуют ограничения по размеру и зависимости.
Подходы к решению вопроса
-
API для рендеринга HTML:
- На рынке существуют несколько API-сервисов, которые специально созданы для получения отрендеренного HTML-кода. Примеры таких сервисов включают:
- Root.io: Платный API, предлагающий рендеринг страниц и возврат HTML-кода.
- ScrapingBee: Еще один альтернативный сервис, предоставляющий получение HTML-контента с учетом работы JavaScript.
- PhantomJS Cloud: Сервис для выполнения рендеринга страниц в облаке.
- На рынке существуют несколько API-сервисов, которые специально созданы для получения отрендеренного HTML-кода. Примеры таких сервисов включают:
-
Использование Headless Browsers в облаке:
- Если вам нужно больше контроля над процессом рендеринга, но вы не хотите развертывать тяжелые решения на сервере, вы можете воспользоваться решениями с использованием безголовых браузеров в облаке, таких как:
- Browserless: Предоставляет API для взаимодействия с браузером в безголовом режиме, поддерживая Puppeteer.
- LambdaTest: Еще одно решение, которое может помочь вам рендерить страницы и передавать результат через API.
- Если вам нужно больше контроля над процессом рендеринга, но вы не хотите развертывать тяжелые решения на сервере, вы можете воспользоваться решениями с использованием безголовых браузеров в облаке, таких как:
Разработка собственного API
Если существующие решения не подходят, вы можете разработать собственный API. Вот основные шаги к реализации:
-
Служба рендеринга:
- Разработайте микросервис с использованием безголового браузера на базе Puppeteer или Playwright. Это может быть сделано локально и затем контейнеризовано с использованием Docker.
-
Планировщик задач:
- Используйте CronJob или подобные технологии (например, AWS EventBridge) для планирования задач по запуску вашего рендеринга через заданный временной интервал.
-
Обработка запросов:
- Создайте REST API, который будет принимать запросы на рендеринг страницы с необходимыми параметрами (URL и временной интервал). После ожидания, ваш сервис сможет загрузить страницу, дождаться ее полной загрузки и вернуть HTML-код.
Выводы
Современная разработка веб-приложений требует гибкости и осведомленности о существующих инструментах для работы с динамическими страницами. Несмотря на то, что существует множество готовых решений и API-сервисов, которые помогают справиться с задачей получения отрендеренного HTML-контента, создание собственного API может привести к оптимизации под ваши конкретные запросы и задачи.
Если вам нужны дополнительные рекомендации или помощь в выборе наилучшего решения, не стесняйтесь обращаться!