Skip to content

Instantly share code, notes, and snippets.

@extremeshok
Forked from jonathanhoskin/reboot-modem.js
Created January 8, 2018 23:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save extremeshok/eb0ef673ba689aa52d072bc9985a31c3 to your computer and use it in GitHub Desktop.
Save extremeshok/eb0ef673ba689aa52d072bc9985a31c3 to your computer and use it in GitHub Desktop.
Huawei B315 Modem Reboot Script
// PhantomJS script to reboot a Huawei B315 modem
//
// Author: Jonathan Hoskin / 2017-09-02
// Twitter: @jhossnz
// Github: https://github.com/jonathanhoskin
//
// Requires PhantomJS ~ 2.1.1
//
// Enter your own modem details here
var username = 'admin';
var password = 'admin';
var host = '192.168.1.254';
// End modem details
//
//
// Script specific variables
var page = require('webpage').create();
var loadInProgress = false;
var intervalTime = 100;
var homeUrl = 'http://' + host + '/html/home.html';
var rebootUrl = 'http://' + host + '/html/reboot.html';
// End script variable
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.onLoadStarted = function() {
loadInProgress = true;
if (page.url) {
console.log('Page load started: ' + page.url);
} else {
console.log('Page load started');
}
};
page.onLoadFinished = function() {
loadInProgress = false;
if (page.url) {
console.log('Page load finished: ' + page.url);
} else {
console.log('Page load finished');
}
};
function checkLoggedIn() {
if (loadInProgress) {
console.log('Still logging in...');
return false;
} else {
var loggedIn = page.evaluate(function() {
return ($('#logout_span').text() === 'Log Out');
});
return loggedIn;
}
}
function waitUntilLoggedIn(callback) {
setTimeout(function() {
if (checkLoggedIn()) {
callback(true);
} else {
console.log('Waiting for logged in page JS...');
waitUntilLoggedIn(callback);
}
}, intervalTime);
}
function loginDialogVisible() {
var visible = page.evaluate(function() {
return ($('#dialog').length > 0);
});
return visible;
}
function waitForLoginDialog(callback) {
setTimeout(function() {
if (loginDialogVisible) {
callback(true);
} else {
console.log('Waiting for login dialog JS...');
waitForLoginDialog(callback);
}
}, intervalTime);
}
function login(callback) {
page.open(homeUrl, function(status) {
if (status !== 'success') {
console.log('Unable to load home.html');
phantom.exit();
} else {
console.log('Loaded home.html');
page.evaluate(function() {
// This is a call to a JS method in the page main.js file
showloginDialog();
return true;
});
waitForLoginDialog(function() {
console.log('Filling login credentials');
page.evaluate(function(u, p) {
$('input#username').val(u);
$('input#password').val(p);
return true;
}, username, password);
console.log('Clicking Log In button');
page.evaluate(function() {
$('input#pop_login').click();
return true;
});
console.log('Logging in...');
waitUntilLoggedIn(function() {
console.log('Logged in');
callback();
});
});
}
});
}
function rebootButtonLoaded() {
var elementLoaded = page.evaluate(function() {
return ($('#button_reboot').find('input').length > 0);
});
return elementLoaded;
}
function rebootConfirmButtonLoaded() {
var elementLoaded = page.evaluate(function() {
return ($('input#pop_confirm').length > 0);
});
return elementLoaded;
}
function waitUntilRebootButtonLoaded(callback) {
setTimeout(function() {
if (loadInProgress) {
console.log('Reboot page still loading...');
} else {
if (rebootButtonLoaded()) {
callback();
} else {
console.log('Waiting for reboot page JS...');
waitUntilRebootButtonLoaded(callback);
}
}
}, intervalTime);
}
function waitUntilRebootConfirmButtonLoaded(callback) {
setTimeout(function() {
if (loadInProgress) {
console.log('Reboot confirm still loading...');
} else {
if (rebootConfirmButtonLoaded()) {
callback();
} else {
console.log('Waiting for reboot confirm JS...');
waitUntilRebootConfirmButtonLoaded(callback);
}
}
}, intervalTime);
}
function reboot(callback) {
page.open(rebootUrl, function(status) {
if (status !== 'success') {
console.log('Unable to load reboot.html');
callback();
return;
}
if (page.url !== rebootUrl) {
console.log('Wrong reboot URL! ' + page.url);
callback();
return;
}
console.log('Loaded reboot.html');
waitUntilRebootButtonLoaded(function() {
console.log('Loaded reboot button');
page.evaluate(function() {
var rebootButton = $('#button_reboot').find('input').first();
$(rebootButton).click();
return true;
});
console.log('Clicked reboot button')
waitUntilRebootConfirmButtonLoaded(function() {
console.log('Loaded reboot confirm button');
page.evaluate(function() {
var confirmButton = $('input#pop_confirm');
$(confirmButton).click();
return true;
});
console.log('Clicked reboot confirm button')
setTimeout(function() {
callback();
}, 5000); // 5 second sleep, just to give the final Ajax calls time to complete
});
});
});
}
login(function() {
reboot(function() {
console.log('Reboot Done')
phantom.exit();
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment