Skip to content

Instantly share code, notes, and snippets.

@schnerd
Created April 18, 2018 03:21
Show Gist options
  • Select an option

  • Save schnerd/b550b7c05d4a57d8374082aaae714881 to your computer and use it in GitHub Desktop.

Select an option

Save schnerd/b550b7c05d4a57d8374082aaae714881 to your computer and use it in GitHub Desktop.
Lazy-loading content in Puppeteer
function wait (ms) {
return new Promise(resolve => setTimeout(() => resolve(), ms));
}
export default async function capture(browser, url) {
// Load the specified page
const page = await browser.newPage();
await page.goto(url, {waitUntil: 'load'});
// Get the height of the rendered page
const bodyHandle = await page.$('body');
const { height } = await bodyHandle.boundingBox();
await bodyHandle.dispose();
// Scroll one viewport at a time, pausing to let content load
const viewportHeight = page.viewport().height;
let viewportIncr = 0;
while (viewportIncr + viewportHeight < height) {
await page.evaluate(_viewportHeight => {
window.scrollBy(0, _viewportHeight);
}, viewportHeight);
await wait(20);
viewportIncr = viewportIncr + viewportHeight;
}
// Scroll back to top
await page.evaluate(_ => {
window.scrollTo(0, 0);
});
// Some extra delay to let images load
await wait(100);
return await page.screenshot({type: 'png'});
}
@nfolkman
Copy link
Copy Markdown

This was a lifesaver for the current project I'm working on. Thank you!

@gixxy22
Copy link
Copy Markdown

gixxy22 commented May 30, 2024

worked perfectly! thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment