var args = require('system').args;
var url = args; var timeout = parseInt(args); var selectors = JSON.parse(args); var selector = selectors;
var cookies = JSON.parse(args); var user_agent = args; var jss = JSON.parse(args); var scroll = JSON.parse(args);
// var date = for(i in cookies){
cookie = cookies[i] phantom.addCookie({ 'name' : cookie[0], 'value' : cookie[1], 'domain' : cookie[2], 'path' : cookie[3], 'httponly' : cookie[4], 'secure' : cookie[5], 'expires' : new Date(cookie[6] * 1000) });
}
function output(html, page){
if(!html.match(/<html/i)) return; console.log(JSON.stringify(phantom.cookies, null, 2) + '<<<phget_separator>>>' + html); phantom.exit();
}
var page = require('webpage').create();
if(!scroll){
setInterval(function() { var html = page.evaluate(function() { return document.documentElement.outerHTML; }); output(html, page); output(page.content, page); }, timeout);
}
setInterval(function() {
page.render('phantomjs.png');
}, 500);
page.settings.userAgent = user_agent;
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log(msg);
};
page.onInitialized = function() {
page.evaluate(function() { // spoof plugins window.navigator = {plugins: {length: 5}}; // remove stuff that will give us away delete window.callPhantom; });
};
page.onResourceRequested = function(requestData, networkRequest) {
// skip loading images / styles if(requestData.url.match(/\.(gif|jpe?g|png|css)\b/i)) { networkRequest.abort(); } host = networkRequest.setHeader('Host'); networkRequest.setHeader('Host', 0); networkRequest.setHeader('Host', host); networkRequest.setHeader('Connection', 'keep-alive'); //networkRequest.setHeader('Accept-Encoding', 'gzip, deflate');
};
page.onLoadFinished = function() {
if(selectors[0] == undefined){ return; } else { var selector = selectors.shift(); var js = jss.shift(); var done = (selectors[0] == undefined && js == undefined); if(selector !== undefined){ page.includeJs('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function() { html = page.evaluate(function(selector, page, js, done) { setInterval(function() { if($(selector)[0]){ if(js !== undefined){ eval(js); } if(done){ return document.documentElement.outerHTML; } } }, 500); }, selector, page, js, done); output(html, page); });
// console.log(document.documentElement.outerHTML);
} }
};
page.onError = function(msg, trace) {
/* var msgStack = ['ERROR: ' + msg]; if (trace && trace.length) { msgStack.push('TRACE:'); trace.forEach(function(t) { msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : '')); }); } console.error(msgStack.join('\n'));
*/ };
page.open(url, function() {
if(scroll){ var num = 0; window.setInterval(function() { num2 = page.evaluate(function() { // Scrolls to the bottom of page window.document.body.scrollTop = document.body.scrollHeight; return document.body.scrollHeight; }); if (num2 == num){ var html = page.evaluate(function() { return document.documentElement.outerHTML; }); output(html, page); } num = num2; // console.log(num); }, timeout); // Number of milliseconds to wait between scrolls }
});