JS-Webseite abfragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo,
ich möchte den Zählerstand unseres Druckers auslesen, um die Zählerstände automatisiert auszulesen und per Mail zur Leasingfirma zu schicken.
Der Drucker hat ein Webinterface, dass unter

http://192.168.12.200/wcd/system_counter.xml

zu erreichen ist und im Browser die entsprechenden Daten liefert, im Quelltext ist das eine .xml-Datei. Das Auslesen der Zählerstände aus der .xml-Datei kriege ich hin.

Wenn man die Webadresse mit python mit

Code: Alles auswählen

urlopen('http://192.168.12.200/wcd/system_counter.xml').read() 
abfragt, bekommt man allerdings nur einen fast leere Datei:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML lang="en">
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta content="text/javascript" http-equiv="Content-Script-Type">
<noscript>
<meta http-equiv="refresh" content="0; URL=/wcd/js_error.xml">
</noscript>
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#000000" ALINK="#ff0000" VLINK="#000000" onload="location.replace('/wcd/index.html?access=SYS_COU');" >
</BODY>
</HTML>
Ich lese das so, dass die xml-Datei mit den Zählerständen, die ich eigentlich haben will, vermutlich erst beim Laden per JS erstellt wird. Also funktioniert der oben angedachte Ansatz nicht.

Ich würde deshalb gerne die Arbeit von einem Webbrowser machen lassen. Ich übergebe die URL einem Browser, der holt die Datei und macht die JS-Arbeit und übergibt mir dann das xml-File. Frage: würde das so gehen und welche Pakete brauche ich dafür? Das ganze soll später automatisiert auf einem Linux-Server ohne graphische Oberfläche funktionieren.


Grüße

Ingo
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

JavaScript ist nicht meine Stärke, aber da gibt es ja die Seite '/wcd/index.html?access=SYS_COU' aufgerufen.
Schau doch mal, was da zurück kommt.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

Wenn du, wie gezeigt, nach einer xml Datei fragst, aber HTML zurück bekommst, kannst du auch mal ausprobieren, ob es etwas bringt, wenn du den HTTP-Accept-Header auf "application/xml,text/xml" setzt. Kann gut sein, dass der Server keine Content-Negotiation implementiert, aber es ist mit wenig Aufwand zu testen und kann dir etwas Arbeit sparen, falls es klappen sollte.
Zuletzt geändert von nezzcarth am Montag 11. November 2019, 12:06, insgesamt 2-mal geändert.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Die Abfrage:

urlopen('http://192.168.12.200/wcd/index.html?access=SYS_COU').read()

ergibt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML lang="en">
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta content="text/javascript" http-equiv="Content-Script-Type">
<link rel="stylesheet" type="text/css" href="/wcd/default.css">
<script type="text/javascript" src="/wcd/init.js"></script>
<noscript>
<meta http-equiv="refresh" content="0; URL=/wcd/js_error.xml">
</noscript>
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#000000" ALINK="#ff0000" VLINK="#000000" onload="init('/wcd/system_counter.xml','wcd','usr=S_COU;','','param=;',0);">
<input type="hidden" id="FUNCVER" value="10"/>
</BODY>
</HTML>
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na da steht doch eine JS Datei mit einer Funktion init, die dann aufgerufen wird. Auch diesem Brotkrumen wirst du folgen müssen.

Oder einfach im Netzwerk Tab deines Browser Debuggers den Verkehr betrachten & schauen, was genau da am Ende passiert.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Dahinter stehen insgesamt 11 js-Dateien mit japanischen Kommentaren

/* 短縮宛先チェック用 */
var checkAbbrMode = '';
/* クッキーツッル */

Das kriege ich nicht hin. Deshalb wollte ich ja einen Browser dazu bewegen, dass er die JS-Dateien für mich abarbeitet.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah. Habe nur die letzten zwei Posts gelesen. Und wie gesagt, ich kann mir schwer vorstellen das JS die Daten zum Download wirklich generiert. Ich bin nicht mehr topfit in HTTP & co, aber damals(tm) ging das nicht. Im Network Traffic Tab des Browsers sollte schlussendlich die letzte HTTP Anfrage auftauchen, die das XML liefert. Wenn das nicht passiert - dann kannst du selenium benutzen.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und so wie‘s aussieht geht es doch - https://stackoverflow.com/questions/366 ... ugh-server

Ich würde trotzdem erstmal auf die Variante Netzwerk Debugger setzen.
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bei einem Drucker könnte es sich auch lohnen mal zu schauen ob man die gewünschten Daten nicht auch per SNMP bekommen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten