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: 69
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Montag 11. November 2019, 11:53

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: 1477
Registriert: Freitag 17. April 2009, 10:28

Montag 11. November 2019, 11:57

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: 823
Registriert: Samstag 16. April 2011, 12:47

Montag 11. November 2019, 12:02

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: 69
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Montag 11. November 2019, 12:04

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: 6855
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 11. November 2019, 12:15

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: 69
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Montag 11. November 2019, 12:29

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: 6855
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 11. November 2019, 12:33

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: 6855
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 11. November 2019, 12:56

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: 4667
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 11. November 2019, 13:00

Bei einem Drucker könnte es sich auch lohnen mal zu schauen ob man die gewünschten Daten nicht auch per SNMP bekommen kann.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Antworten