var steps=[]; var testindex = 0; var loadInProgress = false;//This is set to true when a page is still loading /*********SETTINGS*********************/ var webPage = require('webpage'); var page = webPage.create(); page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'; page.settings.javascriptEnabled = true; page.settings.loadImages = false;//Script is much faster with this field set to false phantom.cookiesEnabled = true; phantom.javascriptEnabled = true; /*********SETTINGS END*****************/ console.log('All settings loaded, start with execution'); page.onConsoleMessage = function(msg) { console.log(msg); }; /**********DEFINE STEPS THAT FANTOM SHOULD DO***********************/ steps = [ //Step 1 - Open Router home page function(){ console.log('Step 1 - Open router home page'); page.open("http://192.168.1.1", function(status){ }); }, //Step 3 - Populate and submit the login form function(){ console.log('Step 3 - Populate and submit the login form'); var result = page.evaluate(function() { document.getElementById("index_username").value="admin"; document.getElementById("password").value="RouterAdminPasswordHere"; var a = document.getElementById("loginbtn"); var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); waitforload = true; }); }, //Step 4 - Open Maintain Page function(){ console.log("Open Maintain Page"); page.open("http://192.168.1.1/html/advance.html#statistics", function(status){ }); // var result = page.evaluate(function() { // var a = document.getElementById("maintain_settings_menu"); // var e = document.createEvent('MouseEvents'); // e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); // a.dispatchEvent(e); // waitforload = true; // }); }, // Step N function() { console.log("Expand WAN Stats"); var result = page.evaluate(function() { var a = document.getElementById("metamorph-12-start"); if(!a) { console.log("MISSING LINK"); phantom.exit(); } var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); waitforload = true; }); }, // Step 2 - Click on the Sign in button function(){ console.log('Step 5 - Record Data'); console.log(page.content); var result = page.evaluate(function() { var a = document.getElementById("signout_ctrl"); var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); waitforload = true; }); // fs.write('output',result,'w'); // console.log("Sent "+Sent+" Recevied "+Recv); }, ]; /**********END STEPS THAT PHANTOM SHOULD DO***********************/ //Execute steps one by one interval = setInterval(executeRequestsStepByStep,2000); function executeRequestsStepByStep(){ if (loadInProgress == false && typeof steps[testindex] == "function") { //console.log("step " + (testindex + 1)); steps[testindex](); testindex++; } if (typeof steps[testindex] != "function") { console.log("test complete!"); phantom.exit(); } } /** * These listeners are very important in order to phantom work properly. Using these listeners, we control loadInProgress marker which controls, weather a page is fully loaded. * Without this, we will get content of the page, even a page is not fully loaded. */ page.onResourceReceived = function(response) { if (response.stage !== "end") return; // loadInProgress = false; console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + response.url); }; page.onResourceRequested = function(requestData, networkRequest) { // loadInProgress = true; console.log('Request (#' + requestData.id + '): ' + requestData.url); }; page.onUrlChanged = function(targetUrl) { console.log('New URL: ' + targetUrl); }; page.onNavigationRequested = function(url, type, willNavigate, main) { console.log('Trying to navigate to: ' + url); }; page.onLoadStarted = function() { loadInProgress = true; console.log('Loading started'); }; page.onLoadFinished = function() { loadInProgress = false; console.log('Loading finished'); }; page.onConsoleMessage = function(msg) { console.log(msg); };