Huawei B890 (3 Webgate 2) Router automatisch neu starten / automatically restart
Viele Router bieten einen Zugriff via Telnet oder SSH, jedoch nicht der Huawei B890, daher stand ich vor dem Problem den Router automatisch neu starten zu lassen.
Ich möchte hier zeigen, wie Ihr mittels Phantomjs und Casperjs ein Script erstellt, mit dem Ihr Euren Router automatisiert neu starten könnt, um zb eine neue Ip Adresse von eurem Provider zu erhalten.
Kurze Erklärung:
Phantomjs ermöglicht es die Browserengine Webkit ohne Benutzeroberfläche (headless) über die CLI (Kommandozeile) auszuführen.
Casperjs ist ein Frontend-Testing Tool basierend auf PhantomJS geschrieben in JavaScript, damit ist es einfach Webseiten automatisiert zu besuchen.
Installation:
PhantomJS und CasperJS kann unter Windows sowie allen Unix Betriebsystemen installiert werden.
Da es bereits ein sehr gute Installationsdoku gibt erspare ich mir es eine genaue Installationsanleitung zu schreiben.
PhantomJs installieren: Die aktuelle Version sowie eine Installationsanleitung findet Ihr unter http://phantomjs.org/download.html
Casperjs installieren: Die aktuelle Version von CasperJs findet Ihr unter http://casperjs.org/
Was macht das Script?
Ganz einfach; es meldet sich auf der GUI von eurem Router an und klickt sich bis zum Router neustart durch. 😉
Datei: router_neustart.js
var casper = require(„casper“).create({
verbose: true,
// logLevel: ‚debug‘
});
var x = require(„casper“).selectXPath
casper.userAgent(„Safari“);
casper.start(„http://192.168.1.1/login.html“); // IP von eurem Router
casper.then(function () {
this.sendKeys(„#login_username“, „deinBenutzername“);
this.sendKeys(„#login_password“, „deinPasswort“);
});
casper.thenClick(x(‚//*[@id=“login“]‘), function() {
console.log(„login“);
});
casper.wait(5000, function () {
casper.thenClick(x(‚//*[@id=“settings“]‘), function() {
console.log(„klicke auf Einstellungen“);
});
});
casper.wait(3000, function () {
casper.thenClick(x(‚//*[@id=“label_system“]‘), function() {
console.log(„klicke auf System“);
});
});
casper.wait(3000, function () {
casper.thenClick(x(‚//*[@id=“label_reboot“]‘), function() {
console.log(„klicke auf Neustart“);
});
});
casper.wait(3000, function () {
casper.withFrame(’show_html‘, function() {
casper.thenClick(x(‚//*[@id=“button_reboot“]‘), function() {
console.log(„klicke auf Neustart im iframe“);
});
});});
casper.wait(3000, function () {
casper.thenClick(x(‚//*[@id=“pop_confirm“]‘), function() {
console.log(„bestätige Neustart“);
});
});
casper.wait(6000, function () {
casper.capture(„check.png“); // es wird ein screenshot erstellt
});
casper.run();
Das Script führen wir nun mit folgenden Befehl aus und Euer Router wird dann automatisch neu gestartet.
Script ausführen:
Beispiel Unix:
/usr/local/bin/casperjs router_neustart.js
Beispiel Windows:
C:\casperjs\bin router_neustart.js
Viel Spaß!
Vielen Dank, nach genau so einer Lösung hab ich schon Monate gesucht!
Freut mich nichts zu danken 😉
Gbits sowas auch für den Webgate 3 ?
(ist vermutlich ein ZTE MF283+)
Hi, damit kannst du in der Regel alle Webinterfaces automatisch ansteuern, macht natürlich nur Sinn wenn das Webinterface die Neustart Option überhaupt beinhaltet.
Du musst lediglich die router_neustart.js an das Router Webinterface vom ZTE MF283 anpassen.
Ich hab den leider noch nicht sonst könnt ichs schnell umschreiben.
Hi Hollari,
bitte sehr, viel Spaß damit! 🙂
https://dl.dropboxusercontent.com/u/14822948/webgate3_restart.js
lg
Martin
/*
Script zum Neustarten des Webgate 3 ohne manuelles Einloggen und Auslösen im Browser.
Auf Basis des Scripts für Webgate 2 von http://domainx.at/huawei-b890-3-webgate-2-automatisch-resetten-automatically-reset/
*/
var casper = require(„casper“).create({ verbose: true });
var x = require(„casper“).selectXPath;
casper.userAgent(„Safari“);
casper.start(„http://192.168.0.1/“); // IP des Webgates
casper.wait(1500, function () {
casper.then(function () {
this.sendKeys(„#txtPwd“, „deinPasswort123“); // Passwort, statt „deinPasswort123″ hier das eigene Webgate-Portal-Password eingeben
});
});
casper.thenClick(x(‚//*[@id=“btnLogin“]‘), function() {
console.log(„login“);
});
casper.wait(4000, function () {
casper.thenClick(x(‚(((//*[@id=“list-nav“]/*)[5])/*)[1]‘), function() {
console.log(„klicke auf Einstellungen“);
});
});
casper.wait(2000, function () {
casper.thenClick(x(‚(//*[@id=“leftmenu“]/*)[8]‘), function() {
console.log(„klicke auf Geräteeinstellungen“);
});
});
casper.wait(2000, function () {
casper.thenClick(x(‚(((((((//*[@id=“leftmenu“]/*)[9])/*[@class=“third“])[1])/*)[4])/*)[1]‘), function() {
console.log(„klicke auf Neustart“);
});
});
casper.wait(2000, function () {
casper.thenClick(x(‚((((((//*[@id=“frmRestart“]/*)[1])/*)[3])/*)[1])‘), function() {
console.log(„löse Neustart aus“);
});
});
casper.wait(1500, function () {
casper.thenClick(x(‚//*[@id=“yesbtn“]‘), function() {
console.log(„bestätige Neustart“);
});
});
casper.wait(3000, function () {
casper.capture(„check.png“); // es wird ein screenshot erstellt
});
casper.run();
Hi Hollari,
ich werd das Script die Tage umschreiben und dann hier posten.
Danke an Geri für die Vorarbeit!! 🙂
Nachtrag von mir: Hab mir das gerade angesehen, die haben die GUI deutlich ungünstiger gescriptet im neuen Webinterface: es gibt keine IDs oder Klassen auf den Links im Menü mehr, das wird alles über Data-Binding geladen. Da muss ich mich erst etwas in Phantom/Casper einlesen, um rauszufinden, ob ich da ne Selektion gemäß href-Content erstellen kann oder das Data-Binding direkt ansteuer …
Hallo Martin,
casper unterstützt auch xpath (http://docs.casperjs.org/en/latest/selectors.html) damit sollte es kein Problem sein den Link ohne Klasse/ID auszulesen. Solltest du Hilfe benötigen gib bescheid.
l.g.
geri
poste hier bitte einfach mal wie der Link aus dem quelltext aussieht
Hi geri,
ja das mit XPath hab ich heut Nacht dann auch entdeckt. Natürlich hat mir das keine Ruhe gelassen und ich habs heut Nacht und jetzt beim Frühstück fertig gebaut 😉
https://dl.dropboxusercontent.com/u/14822948/webgate3_restart.js
lg
Martin
PS: Code sieht so aus
Neustart
der Code wird hier natürlich umgewandelt … ^^
Versuch Nr 2:
li data-bind=“attr: {‚class‘: ‚menu-three-level ‚ + hash.substring(1) }“ class=“menu-three-level restart active“>
a data-bind=“attr: {href: hash, trans: hash.substring(1)}“ href=“#restart“ trans=“restart“>Neustart /a>
/li>
Gute Arbeit, Gratuliere!