var fs = require(‘fs’); var system = require(‘system’);
var framesWorked = 0; var frameCount = 1; var frameContent = []; var visited_pages = []; var masterURL = “”; var masterPage = null;
function newIFrameLoad(page, load_iframes) {
var frame_data = []; if (load_iframes) { frame_data = page.evaluate(function () { var framestmp = document.getElementsByTagName('IFRAME'); var frames = []; for (var i=0;i<framestmp.length;i++) { if (framestmp[i].contentWindow && framestmp[i].contentWindow.document && framestmp[i].contentWindow.document.body) { frames.push(framestmp[i].contentWindow.document.body.innerHTML); framestmp[i].outerHTML = "<phantomjsframe>PHANTOM_JS_FRAME_"+i+"</phantomjsframe>"; } } return frames; }) || []; //This stops the code from crashing incase there is an exception during page eval } var content = new String(page.content); for (var i=0;i<frame_data.length;i++) { content = content.replace("PHANTOM_JS_FRAME_"+i, frame_data[i]); } console.log("PHANTOMJS_DOMDATA_WRITE:"+content); console.log('PHANTOMJS_DOMDATA_END');
}
var loadpage = function(url, referer, success, failure, configure) {
var redirectURL = null; var page = require('webpage').create(); page.settings.localToRemoteUrlAccessEnabled = true; page.settings.resourceTimeout = 40000; page.onResourceTimeout = function(request) { console.log('Response (#' + request.id + '): ' + JSON.stringify(request)); }; page.settings.userAgent = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36"; page.onConsoleMessage = function (msg) { console.log(msg); }; page.onAlert = function(msg) { console.log(msg);}; page.onLoadStarted = function () { console.log('Start loading...'+url); }; page.onResourceReceived = function(resource) { if (url == resource.url && resource.redirectURL && resource.stage == "end") { redirectURL = resource.redirectURL; console.log('URL_FRAME_ERROR_CODE: '+resource.status+'URL_FRAME_ERROR_CODE_END'); } else if (url == resource.url && resource.stage == "end" && resource.status != 200 && (referer!=undefined || !resource.redirectURL)) { console.log('URL_ERROR_CODE: '+resource.status+'URL_ERROR_CODE_END'); } }; if (referer!=undefined) { console.log("Set Referer: "+referer); page.customHeaders = { "REFERER": referer }; } if (configure != undefined) configure(page); page.viewportSize = { width: 1920, height: 1080 }; page.open(url, function (status) { console.log("Page Status: "+status); if (redirectURL) { loadpage(redirectURL, url, success, failure); } else if (status !== 'success') { failure(page, url); } else { success(page, url); } });
};
function main() {
console.log(system.args) if (system.args.length < 3) { console.log('Usage: proxy.js <picture filename or none> <load iframe(true/false)> <URL> <url param count> <url params...>'); phantom.exit(); } else { file_name = system.args[1]; var loadIframes = system.args[2].match(/true/i) ? true : false; address = system.args[3]; var argCount = system.args[4]; args = "" for (var i=0;i<argCount;i++) { args += system.args[i+5]; if (i<argCount-1) args += "&" } if (args.length > 0) address += '?'+args; console.log("Open page: "+address+", "+args+" END"); console.log('start openning page'); masterURL = address; loadpage(address, undefined, function(page) { masterPage = page; console.log('DONE_LOADING_URL'); //load iframes into page newIFrameLoad(page, loadIframes); if (file_name != null && file_name != "none") { page.render(file_name); } phantom.exit(); }, function(page) { masterPage = page; console.log('FAILED_LOADING_URL: '+status+", "+address); if (file_name != null && file_name != "none") { page.render(file_name); } phantom.exit(); }, function(page) { //page.customHeaders = {"Referer": "http://uk-amazon.icims.com/jobs/240290/account-representative---amazon-web-services---iberia/job"} // page.onResourceReceived = function (response) { // if (response.stage == "end" && response.url == address && response.status != 200) // { // console.log('URL_ERROR_CODE: '+response.status+'URL_ERROR_CODE_END'); // } // }; }); }
}
main();