Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vishnun/23c66b0bc6b6194cf5cc to your computer and use it in GitHub Desktop.
Save vishnun/23c66b0bc6b6194cf5cc to your computer and use it in GitHub Desktop.
Using network monitoring and wait time combined to deterministically capture entire page.
var casper = require("casper").create();
casper.options.waitTimeout = 25000;
var url_list = casper.cli.get(0);
var fileName = casper.cli.get(1);
var result = url_list.split(",");
var requests = {}, responses = {};
casper.start().eachThen(result, function(urlData) {
casper.thenOpen(urlData.data, function(urlData) {
console.log('Opened', urlData.url);
var documentHeight = casper.getElementsBounds('body')[0]['height'];
casper.viewport(1400, documentHeight);
casper.options.onResourceRequested = function (casper, requestData) {
requests[requestData.id] = true;
};
casper.options.onResourceReceived = function (casper, responseData) {
if(responseData["stage"] == "end") {
responses[responseData.id] = true;
}
};
casper.wait(8000);
});
});
casper.then(function () {
var requestsCount, responseCount;
function areResourcesLoaded() {
requestsCount = Object.keys(requests).length;
responseCount = Object.keys(responses).length;
return (responseCount > requestsCount) || Math.abs(requestsCount - responseCount) <= 3;
}
function capturePage() {
var documentHeight = casper.getElementsBounds('body')[0]['height'];
casper.echo("All Processing Done");
this.capture(fileName, {
top: 0,
left: 0,
width: 1400,
height: documentHeight
});
requests = {};
responses = {};
}
casper.options.onWaitTimeout = capturePage;
casper.waitFor(function () {
casper.echo("Waiting..");
casper.echo("Request count: " + requestsCount + " Response count: " + responseCount);
return areResourcesLoaded();
}, capturePage);
});
casper.run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment