-
-
Save cjoudrey/1341747 to your computer and use it in GitHub Desktop.
| // 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); | |
| } | |
| }); |
Nice script. A small side note; why do you declare the variable forceRenderTimeout? This one is never used and setTimeout can be called without an assignment to a variable.
It worked great!
Thanks a lot!
This is actually doing nothing:
renderTimeout = setTimeout(doRender, resourceWait);
Increase the resourceWait and set to:
renderTimeout = setTimeout(function () {
//console.log(count);
doRender();
}, resourceWait);
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.
Works like a charm .
Thank you .
Thank you! After 5 years, it's still working!
Thank you! Feb-2020 and still good
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.
i tried windy.com, but it didn't work
Thanks, it helps!!!