Вопрос или проблема
Так что предыстория такова: я хочу использовать PHP для поиска DOM на веб-странице, в данном случае https://www.royalcaribbean.com/aus/en/booking/landing?packageCode=QN17T030&sailDate=2023-04-12&shipCode=QN&destinationCode=TPACI&selectedCurrencyCode=AUD&country=AUS, чтобы я мог отслеживать изменения цен и получать уведомления, когда цена меняется.
Проблема в том, что эта страница загружается через JavaScript, поэтому HTML очень краток в виде экрана загрузки, а затем AJAX загружает страницу. Конечно, PHP не обработает JavaScript, поэтому я задумался, есть ли какой-либо сервис (либо бесплатный публичный сервис, либо что-то, что мне нужно будет разместить на безголовом Linux), который бы принимал переменные полного URL (с его собственными встроенными переменными) и максимальное время ожидания, а затем ждал бы, пока весь JavaScript будет выполнен или пока не достигнет максимального времени ожидания. Затем он предоставил бы обработанный HTML (то есть, по сути, если вы перейдете на эту страницу в Chrome, вы увидите HTML, когда вы “инспектируете” его после загрузки, а не тот, который вы видите при просмотре исходного кода страницы).
Таким образом, в PHP я мог бы получить детали с страницы, которая полностью загружена через JavaScript.
Playwright
Да, вы можете использовать Playwright или какую-либо аналогичную библиотеку автоматизации браузера. Они запускают безголовые версии браузера, которые можно контролировать программно. Таким образом, вы будете переходить на нужную страницу и ждать события готовности JS DOM или какого-то времени ожидания.
Ответ или решение
В сфере веб-разработки и веб-скрейпинга часто возникает необходимость получения HTML-кода страницы после обработки JavaScript. Для решения данной задачи существуют разные инструменты и подходы, которые позволяют извлечь контент, загружаемый через AJAX или динамически созданный на клиентской стороне.
Варианты для получения HTML после обработки JavaScript
-
Playwright
Playwright — это современная библиотека для автоматизации браузеров, которая поддерживает работу с несколькими браузерами (Chromium, Firefox и WebKit). Она позволяет управлять браузером в головномless режиме, что делает её идеальным инструментом для получения готового HTML-кода.Как это работает:
- Вы можете написать скрипт на JavaScript, который использует Playwright для открытия конкретной страницы.
- После загрузки страницы можно дождаться события готовности DOM и извлечь HTML-код с помощью методов API Playwright.
Пример кода:
const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://www.royalcaribbean.com/aus/en/booking/landing?packageCode=QN17T030&sailDate=2023-04-12&shipCode=QN&destinationCode=TPACI&selectedCurrencyCode=AUD&country=AUS'); await page.waitForSelector('selector-for-price'); // Дождаться элемента с ценой const content = await page.content(); // Получение полного HTML-кода console.log(content); await browser.close(); })();
-
Puppeteer
Puppeteer — это еще одна библиотека для автоматизации браузеров, которая специально разработана для работы с Google Chrome. Она предлагает возможности аналогичные Playwright, но сосредоточена исключительно на Chrome.Преимущества Puppeteer:
- Отличная поддержка Google Chrome и простота в использовании.
- Может быть использована для экстракции данных, генерации PDF и скриншотов веб-страниц.
-
Selenium
Selenium — это более старая, но все еще популярная библиотека для автоматизации браузеров. Она поддерживает различные браузеры и может работать как в режиме с графическим интерфейсом, так и в безголовом режиме.Использование:
- Вам нужно будет установить драйвер для браузера и использовать его совместно с языком программирования (например, Python или Java).
- Вы можете использовать методы ожидания, чтобы дождаться полной загрузки контента перед извлечением HTML.
-
API-сервисы
Существуют также сторонние API-сервисы, такие как ScraperAPI и Apify, которые автоматизируют этот процесс и предоставляют готовый HTML-код. Эти сервисы обрабатывают страницы на своих мощностях, позволяя избежать необходимости развертывания собственных скриптов.
Заключение
Для решения поставленной задачи, связанной с отслеживанием изменения цен на сайте, вы можете использовать такие инструменты, как Playwright или Puppeteer, которые обеспечат получение готового HTML после выполнения JavaScript. Эти инструменты позволяют экономить время на разработку и обеспечивают гибкость в настройке обработки контента. Выбор конкретного решения может зависеть от ваших предпочтений и специфических требований проекта.
Использование подходящих технологий для извлечения данных из динамических веб-страниц обеспечит вам возможность следить за изменениями на сайте и получать актуальную информацию, что, безусловно, повысит эффективность вашего проекта.