Skip to content

Instantly share code, notes, and snippets.

@cjoudrey
Created November 5, 2011 16:37
Show Gist options
  • Save cjoudrey/1341747 to your computer and use it in GitHub Desktop.
Save cjoudrey/1341747 to your computer and use it in GitHub Desktop.
Lazy-rendering in PhantomJS
// This example shows how to render pages that perform AJAX calls
// upon page load.
//
// Instead of waiting a fixed amount of time before doing the render,
// we are keeping track of every resource that is loaded.
//
// Once all resources are loaded, we wait a small amount of time
// (resourceWait) in case these resources load other resources.
//
// The page is rendered after a maximum amount of time (maxRenderTime)
// or if no new resources are loaded.
var resourceWait = 300,
maxRenderWait = 10000,
url = 'https://twitter.com/#!/nodejs';
var page = require('webpage').create(),
count = 0,
forcedRenderTimeout,
renderTimeout;
page.viewportSize = { width: 1280, height : 1024 };
function doRender() {
page.render('twitter.png');
phantom.exit();
}
page.onResourceRequested = function (req) {
count += 1;
console.log('> ' + req.id + ' - ' + req.url);
clearTimeout(renderTimeout);
};
page.onResourceReceived = function (res) {
if (!res.stage || res.stage === 'end') {
count -= 1;
console.log(res.id + ' ' + res.status + ' - ' + res.url);
if (count === 0) {
renderTimeout = setTimeout(doRender, resourceWait);
}
}
};
page.open(url, function (status) {
if (status !== "success") {
console.log('Unable to load url');
phantom.exit();
} else {
forcedRenderTimeout = setTimeout(function () {
console.log(count);
doRender();
}, maxRenderWait);
}
});
@mmehedin
Copy link

Excellent. Thank you!

It works with everything I tried except this:
https://myaccount.nytimes.com/auth/login

I do not get the rendering of the input for username, password and the submit button.
Any ideas why? Really thankful for your code.

@presiyanPeykov
Copy link

Works like a charm .
Thank you .

@cbilgili
Copy link

cbilgili commented Aug 7, 2019

Thank you! After 5 years, it's still working!

@bgerd
Copy link

bgerd commented Mar 7, 2020

Thank you! Feb-2020 and still good

@Mutale85
Copy link

How can I get through the five seconds wait for cloudflare?
Tried this, but its still getting stuck at the wait for 5 seconds as cloudflare redirects you.

@adeaji61
Copy link

adeaji61 commented May 27, 2021

i tried windy.com, but it didn't work

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