CoderCastrov logo
CoderCastrov
Puppeteer

Как включить iframe в HTML-код Puppeteer

Как включить iframe в HTML-код Puppeteer
просмотров
1 мин чтение
#Puppeteer

Это будет короткое руководство о проблеме, с которой мы столкнулись в textcloud на днях.

Внутренне мы используем безголовый Puppeteer с набором плагинов для скрытия следов для наших целей парсинга веб-страниц. Конечно, Puppeteer может быть медленнее, чем просто использование import requests в Python, но мы узнали, что успешный парсинг веб-страниц требует полной загрузки сайта, если вы хотите получить правильные результаты.

В то время как простая команда const html = await page.content(); после загрузки страницы в Puppeteer хорошо работает для большинства целей, к сожалению, она не включает содержимое встроенных iframe.

Отображение iframes в Puppeteer

Как оказалось, проблема не в том, что содержимое iframes еще не загружено. Полноэкранный скриншот быстро исключил эту возможность. В нашем случае также было необходимо прокрутить страницу до конца, чтобы дать браузеру возможность загрузить все содержимое, но об этом позже.

Итак, если мы точно знаем, что Puppeteer полностью загрузил страницу и все содержимое видно на скриншоте, почему элементы iframe пустые?

Почему элементы iframe пустые, если мы убедились, что страница загружена?

Мы выяснили, что они действительно отображаются, но Puppeteer включает их в отдельный фрейм, который не включен в результат page.content().

Вместо этого нам нужно вручную вставить их содержимое:

И вот финальный фрагмент кода.


Бонус: Автоматическая прокрутка до конца страницы

Вот небольшой фрагмент кода, который мы используем для прокрутки до конца страницы. Выберите желаемое расстояние (500px в данном случае) и частоту (200ms здесь), но будьте осторожны, чтобы не прокручивать слишком быстро, иначе браузер не загрузит весь контент.


Интересуетесь нашей технологией парсинга в действии? Подайте заявку на ранний доступ к textcloud и начните автоматизировать свои рабочие процессы по обработке текста, контента и мониторингу уже сегодня!