Как включить iframe в HTML-код 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 и начните автоматизировать свои рабочие процессы по обработке текста, контента и мониторингу уже сегодня!