Задать вопрос
@pirate_prentice

Как получить отрендеренную HTML-страницу при помощи Selenium или PhantomJS?

Здравствуйте! Помогите, пожалуйста, решить проблему.

Пишу парсер на PHP, который получает данные со страницы, которая отрисовывается JS кодом на стороне клиента. Для этого было решено использовать Selenium (при помощи facebook/php-webdriver) или PhantomJS (при помощи пакета jonnnnyw/php-phantomjs).

Но оба способа пока позволили получить только исходный, неотрендеренный HTML-код. В случае Selenium, видно, что в браузере страница отрисовывается полностью, тем не менее, $driver->getPageSource() возвращает то же сырой HTML и JS скрипты. Использование таймаутов не помогло.

Как можно решить этот вопрос?
  • Вопрос задан
  • 467 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
erge
@erge
Примус починяю
c Selemium не работал, но имхо, брать надо не getPageSource, а после загрузки всей страницы, найти элемент, например body, и получить у него innerHTML, если вы парсите регэкспами. Либо работать с DOM страницы, что как бы наверно удобнее.

примерно как-то так (возможно ошибаюсь с синтаксисом):

$element = $driver->findElement(WebDriverBy::cssSelector('body'));

$src = $element->getAttribute('innerHTML');

# или так

$src = $driver->executeScript("return document.body.innerHTML");
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kvaks
@kvaks
в Selenium добавь ожидание загрузки страницы
Ответ написан
Комментировать
@grinat
Смотри какой блок появляется когда страница отрендрена и делай waitForSelector и там путь к блоку, раз он появился значит все, react/vue или шо там используется для рендеринга отработали успешно. Да и не советую использовать selenium ибо говно, phantomjs давно уже не мейнтейнится, бери pupeter, это официальная либа от гугла для безликого хрома.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы