Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Bestimmte Daten aus einer Webseite auslesen und steuern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bestimmte Daten aus einer Webseite auslesen und steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @mickym last edited by OliverIO

      @mickym
      Das geht nur wenn sich der Server Programmierer nicht so viel Mühe gemacht hat.
      Browser über Adresszeile fragt immer über HTTP-Get ab. Wenn der Server allerdings ein HTTP-Post erwartet,
      oder noch dazu den Header X-Requested-With: XMLHttpRequest abfragt und erwartet, dann hast du mit dem Browser Pech
      und musst mit dem programmieren anfangen.

      Für solche Fälle nehme ich Postman
      https://www.postman.com/
      Sehr schönes Tool um solch Abfragen abzufangen bzw. zu testen.

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @OliverIO last edited by mickym

        @OliverIO said in Bestimmte Daten aus einer Webseite auslesen und steuern:

        @mickym
        Das geht nur wenn sich der Server Programmierer nicht so viel Mühe gemacht hat.
        Browser über Adresszeile fragt immer über HTTP-Get ab. Wenn der Server allerdings ein HTTP-Post erwartet,
        oder noch dazu den Header X-Requested-With: XMLHttpRequest abfragt und erwartet, dann hast du mit dem Browser Pech
        und musst mit dem programmieren anfangen.

        Für solche Fälle nehme ich Postman
        https://www.postman.com/
        Sehr schönes Tool um solch Abfragen abzufangen bzw. zu testen.

        Na das ist doch ein Supertipp - vielen Dank - werde ich mir auch anschauen - denn Du hast Recht verschiedene Header zu testen etc. kann man mit dem Browser nicht und für die Zukunft sicher wertvoll.
        Trotzdem braucht @bugs wahrscheinlich Hilfe zur Syntax - und kann ich ihm natürlich auch nicht sagen.
        Aber lange Rede kurzer Sinn, er muss halt erst mal wissen, wie er die API mit welchen Aufrufen nutzen kann und soll es erst dann in Node-Red umsetzen. Wie die Header zu setzen sind habe ich ja gepostet.
        Grundsätzlich sollte man dann aber mit Node-Red die wichtigsten Dinge bei der Abfrage mitgeben können, siehe Node-Beschreibung:

        • url
          String
          Wenn nicht im Node konfiguriert, setzt diese optionale Eigenschaft die URL der Anforderung.

        • method
          String
          Wenn nicht im Node konfiguriert, setzt diese optionale Eigenschaft die HTTP-Methode der Anforderung. Muss einer von GET, PUT, POST, PATCH oder DELETE sein.

        • headers
          Objekt
          Setzt die HTTP-Header der Anforderung.

        • cookies
          Objekt
          Wenn gesetzt, kann es verwendet werden, um Cookies mit der Anforderung zu senden.

        • payload
          Wird als Hauptteil der Anforderung gesendet.

        1 Reply Last reply Reply Quote 0
        • bugs
          bugs last edited by

          Zuerst vielen Dank für die aktive Unterstützung, das ist gar nicht selbstverständlich.
          Es ist tatsächlich so, dass mir die Kenntnisse der Syntax mit HTTP und Node Red fehlen. Ich habe sehr vieles ausprobiert aber komme leider zu keinem Ergebnis.

          Kurz zu meiner Person, ich bin Ü65 und war in meinem aktiven Berufsleben im Bereich Steuerungen tätig. Viele Jahre programmierte ich SPSen und Prozessleitsysteme, vorwiegend mit Siemens-Produkte, für verfahrenstechnische Anlagen. Seit guten einem Jahr, begonnen mit FHEM, versuche ich hobbymässig unser EFH smarter zu machen. Dank Internet, Selbststudium und vor allem hilfreichen Fachleuten in verschiedenen Foren habe ich einiges umgesetzt. Im Einsatz sind zwei Raspberry Pi 3 und 4, einer im technischen Bereich als SPS, projektiert mit Codesys und einer als zentraler Server mit ioBroker und Node Red. Zur Kommunikation sind Ethernet, digitalSTROM, Enocean und Modbus-TCP im einsatz. Realisiert sind Storensteuerungen, Eigenverbrauchsoptimierung der Photovoltaikanlage durch Ladung des Brauchwasserboilers und der Wärmepumpe. Als nächstes möchte ich nun die Poolwasserheizung optimiert ansteuern, abhängig von der Stromproduktion der PVA und dazu brauche ich die Badwassertemperatur und die Möglichkeit die Umwälzpumpe anzusteuern.

          Bevor ich die API-Kommunikation mit Node Red versuche muss ich sinnvollerweise den genauen Syntax zum Auslesen der Daten via API-Schnittstelle kennen. Mit dem Browser scheint es jedoch nicht zu funktionieren, ich hoffe noch, dass ich vom Lieferant ein Beispiel bekomme. Aktuell versuche ich ob ich mit Postman weiter komme.

          R 1 Reply Last reply Reply Quote 0
          • R
            rewenode @bugs last edited by rewenode

            @bugs sagte in Bestimmte Daten aus einer Webseite auslesen und steuern:

            Irgendetwas mache ich anscheinend grundlegend falsch oder kann es sein, dass via Node ‚http request‘ mit der Methode ‚GET‘ eventuell die Webseite gar nicht ausgelesen werden kann oder wird in der Debugg-Spalte einfach nicht die gesamte Webseite (Quelltext) angezeigt?

            Das ist NICHT dein Problem. Im Debug Fenster wird dir lediglich nicht die komplette site angezeigt. Die kann extrem lang sein, da würde es keinen Sinn machen. Aber natürlich wird sie im payload komplett weitergegeben.
            Was du wohl im ersten Ansatz versucht hast ist "web scraping". Kann man zwar in node-red machen, dafür gibt es aber weit elegantere tools (z.B. puppeteer).
            Es ist allemal besser die API zu nutzen. Beim scraping hast du immer das Problem, dass du evtl. im Regen stehst, wenn die site geändert wird. Die API bleibt dabei (i.d.R.) gleich.

            Falls du dich doch an web scraping mit NR versuchen willst, hier mal exemplarisch ein Bild, wo ich mal eben deinen letzten Beitrag aus dieser Seite hole.

            2020-03-06_17-51-05.png

            Wie du an die Selectoren kommst wurde hier ja schon beschrieben. Leider schluckt NR kein XPATH.
            Die Standardsyntax für die CSS Selctoren findest du z.B. hier:
            https://www.w3schools.com/cssref/css_selectors.asp

            @bugs sagte in Bestimmte Daten aus einer Webseite auslesen und steuern:

            Kurz zu meiner Person, ich bin Ü65

            Willkommen im Club 😁

            Nachtrag:
            Und mit dem korrekten CSS-Selector gehts dann noch einfacher:

            2020-03-06_20-45-07.png

            bugs 1 Reply Last reply Reply Quote 0
            • bugs
              bugs @rewenode last edited by

              @rewenode Super, vielen Dank für den ausführlichen, aufwendigen Beitrag. Damit sollte sogar ich einen Schritt weiter kommen. Ich verfolge im Moment noch beide Lösungsvarianten mit und ohne API.
              Dass nicht alle Daten im Debug Fenster sichtbar sind habe ich vermutet, unsicher war ich als auch die Daten von payload, gespeichert in ein File, nicht vollständig waren.
              Wie entwickelt man so einen CSS-Selector?

              R 1 Reply Last reply Reply Quote 0
              • R
                rewenode @bugs last edited by

                @bugs sagte in Bestimmte Daten aus einer Webseite auslesen und steuern:

                Wie entwickelt man so einen CSS-Selector?

                Entwickelt wird der eigentlich nicht. Vielmehr ergibt er sich aus der HTML-site. Er ist sozusagen die spezielle Syntax eines Zeigers auf ein spezielles Element innerhalb der html-site. (XPath ist eine alternative Syntax, die von NR allerdings nicht nativ unterstützt wird).
                Du meinst sicher, wie man den korrekten CSS-Selector zu einem bestimmten html-Element findet. Und das kann recht tricky sein.

                1. selber machen
                  Am sichersten(aber aufwändigsten) ist natürlich den html-code in einen vernünftigen html-editor zu laden, und sich den CSS-Selector anhand der tags der html site gemäß der Sytax siehe https://www.w3schools.com/cssref/css_selectors.asp zusammenzustellen.
                  Hier kann man mal mit den Selectoren spielen und so ein Gefühl dafür bekommen:
                  https://www.w3schools.com/cssref/trysel.asp
                  Zum Prüfen, ob der selber erstellte Selektor dann korrekt ist, gibt es z.B. Online-Tools:
                  https://codepen.io/sunakujira1/pen/dMeKvV

                2. Eine viel einfachere Methode ist natürlich, sich den Selctor einfach von Browser ausspucken zu lassen. Hier empfehle ich chrome:

                Dazu öffnest du die site in chrome und dann

                chrome-menü -> Anzeigen -> Entwicker -> Elemente-Informationen

                Jetzt die Maus auf das Element positionieren, dessen Selector du haben möchtest

                2020-03-06_21-19-17.png

                Rechts im Quelltextfenster ist dann das zugehörige tag markiert. Wenn es passt sollte links dein gesuchtes Element markiert und rechts das tag markiert sein.
                Im Kontextmenü kannst du nun über "Copy Selector" den zugehörigen CSS-Selector kopieren und direkt als CSS-Selector im node-red html-node verwenden.

                Aaaber es gibt bei Methode 2 reichlich Tücken;-)

                • Die Browser zeigen den Selector, der für die "angezeigte" site gilt! Das muss nicht der Selector der reinen html-Datei sein. Machst du z.B. das Browserfenster kleiner, gibt es i.d.R. Umbrüche bei einigen Elementen (Bildern/Tabellen) etc. Diese Umbrüche finden sich dann auch im Selector wieder, obwohl sie im Original-html nicht drin sind.
                  Mit anderen Worten, ein Browser rendert je nach Hersteller oder aktueller Ansicht eine html-site individuell und formatiert die site ggf. um.
                • Server liefern die html-site ggf. unterschiedlich aus, in Abhängigkeit davon, was für ein Browser da die site gerade anfordert. So kann er z.B. auf verschiedene Darstellungsmöglichkeiten des Browsers reagieren.
                  Tipp, nimm chrome der ist da noch am kompatibelsten.

                Abschließend kann ich nur nochmal warnen. Web scraping hat immense Tücken und wird eigentlich nur angewendet:

                • Wenn keine API vorhanden oder eingesetzt werden kann
                • Wenn mal eben schnell was aus einer site extrahiert werden soll ohne dass das eine verlässliche Schnittstelle werden soll.
                • oder man die site selber gebastelt hat und keine Lust hat, noch ne API zu definieren

                schönes Wochenende

                1 Reply Last reply Reply Quote 0
                • bugs
                  bugs last edited by

                  Da ich vom Lieferant betreffend API immer noch keine näheren Infos erhalten habe versuche ich die Daten via html und Selector herauszufiltern. Wenn ich jedoch mit Chrome-Entwicklertools unter Elements nach der Wassertemperatur suche kann ich diese nicht finden. Liegt das eventuell daran, dass der Server die Daten erst nach dem Durchlauf mit javascripts bereitstellt, so wie OliverO das im Beitrag vom 4.3.2020 15:14h beschreibt und deshalb die Daten garn nicht zur Verfügung stehen? Unter Sources sehe ich die Variable mit der Wassertemperatur.

                  So wie ich verstanden habe funktioniert das Prinzip via html-Site und Selector nur dann (meistens) richtig wenn die Daten (Aufbau der html-Site) immer gleich bleiben. Bei meiner Applikation möchte ich die Wassertemperatur herauslesen und dieser Wert ändert sich logischerweise. Ist es denkbar den String, welcher die Wassertemperatur beinhaltet mit einem Selector zur filtern und anschliessend mit String-Manipulationen eventuell mit RegEx den Wert der Wassertemperatur zu separieren oder funktioniert der Selector nicht mehr richtig sobald sich der Zahlenwert der Wassertemperatur ändert?

                  @rewenode
                  Kann es sein, dass mit dem neusten Node Red V1.0.3 XPath funktioniert, egal ob ich mit selector arbeite oder mit XPath oder full XPath erhalte ich die gleichen Ergebnisse.

                  Für die definitive Lösung werde ich versuchen die API-Schnittstelle zu nutzen.
                  Ist das richtig, dass API-Schnittstellen (REST-API siehe auch Beitrag vom 5.3.2020 12:49h) nicht generell syntaktisch gleich aufgebaut sind, sondern je nachdem wie diese programmiert wurden unterschiedlich sein können und somit eine genaue Beschreibung der zu verwendenden API-Schnittstelle notwendig ist? Einige Versuche mit Postman blieben bis jetzt erfolglos.

                  R OliverIO 2 Replies Last reply Reply Quote 0
                  • R
                    rewenode @bugs last edited by

                    @bugs Speichere doch mal die HTML-Site und stell sie hier ein. Dann kann ich vlt. Näheres sagen.

                    1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @bugs last edited by

                      @bugs

                      Also in den chrome dev tools unter elements steht schon der aktuelle Zustand der Webseite.
                      Da können schon javascripts drüber gelaufen sein.
                      du musst im Reiter Network schauen. Dort stehen die tatsächlich geladenen Daten drin (doc,XHR,js,img, usw). Besonders kann man in doc,XHR und js reinschauen.
                      doc ist das html-dokument (daten sind hier drin wenn auf serverseite alles schon eingebaut wurde
                      XHR sind die javascript-requests um Daten abzurufen, hier finden sich idR die JSON-Daten, aber auch nachgeladene HTML-Fragmente und vieles mehr.
                      JS sind die Javascripts, in denen aber auch Daten (seltener) drin stecken können.

                      bugs 1 Reply Last reply Reply Quote 0
                      • bugs
                        bugs last edited by

                        @rewenode Hier die gespeicherte HTML-Seite:
                        Anlage Control 1.2 GatewayControl 1.2.html

                        1 Reply Last reply Reply Quote 0
                        • bugs
                          bugs @OliverIO last edited by

                          @OliverIO Hier einige Screenshots, vielleicht helfen die weiter, dort kann ich jedoch die Wassertemperatur nicht finden.
                          Screenshots_HTML-Seite.pdf
                          Heisst das jetzt, dass die Daten vom Server nicht direkt zur Verfügung gestellt werden und somit nicht einfach mit Select erfasst werden können?

                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @bugs last edited by

                            @bugs
                            die html-datei, ist das nun aus dem reiter Networks oder Elements?

                            Bei den Screenshots von den Abfragen, wäre das was in response drin steht interessanter

                            bugs 1 Reply Last reply Reply Quote 0
                            • bugs
                              bugs @OliverIO last edited by

                              @OliverIO
                              Die Screenshots sind aus dem Reiter Network, der Reiter Response war immer leer.

                              OliverIO 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @bugs last edited by

                                @bugs
                                Ok, dann den Network Reiter öffnen
                                Dann Seite mit f5 laden
                                Dann schauen ob irgendein Ajax mit Inhalt abgerufen wird

                                1 Reply Last reply Reply Quote 0
                                • bugs
                                  bugs last edited by

                                  Ich erstellte noch einige Screenshot die eventuell helfen meine Idee, die Selection einer Variablen (Wassertemperatur), umzusetzen.
                                  Screenshots_HTML.pdf

                                  @OliverIO
                                  Unter Network gibt es ein ajax.php (siehe Screenshot), vielleicht hilft das weiter.

                                  OliverIO 1 Reply Last reply Reply Quote 0
                                  • OliverIO
                                    OliverIO @bugs last edited by

                                    @bugs
                                    ja, genau, deswegen wollte ich wissen was im reiter response drin steht.
                                    du hattest geantwortet, das dort leer ist.
                                    des wegen sagte ich, du musst direkt nach seitenabruf schauen, ob es da eine ajax-abfrage gibt, wo ein inhalt ist, da ja die seite irgendwie die Daten mal abrufen muss

                                    aber ich glaube, das so über die Entfernung zu beschreiben ist zu kompliziert.
                                    ich kann zwar hier und da tips geben, aber eine Detailanweisung, wie die Daten tatsächlich aufzufinden sind, ist einfach zu komplex, vor allem wenn dazu ein wenig Grundwissen fehlt

                                    1 Reply Last reply Reply Quote 0
                                    • bugs
                                      bugs last edited by

                                      Die Kommunikation (lesen und schreiben) via API funktioniert nach Erhalt des Syntax vom Lieferant. Getestet habe ich mit Postman und umgesetzt mit Node Red.
                                      Das Auslesen der Daten über die Website verfolge ich nicht mehr weiter.
                                      Nochmals vielen Dank für die Unterstützung und die Tipps.

                                      OliverIO L C 3 Replies Last reply Reply Quote 1
                                      • OliverIO
                                        OliverIO @bugs last edited by

                                        @bugs
                                        Genau das war das Ziel

                                        1 Reply Last reply Reply Quote 0
                                        • L
                                          LUmlauf @bugs last edited by

                                          @bugs

                                          Hallo,

                                          ich habe das gleiche Problem und will die Werte einer Behncke Control 1.3 auslesen und steuern.
                                          Wäre es möglich, dass ich die API von dir bekommen könnte?

                                          Wenn dies nicht möglich ist, kannst du mir dann die Kontaktdaten beim Hersteller nennen, wäre super.

                                          Vielen Dank im voraus

                                          MfG Lutz

                                          1 Reply Last reply Reply Quote 0
                                          • C
                                            CrazyNepo @bugs last edited by

                                            @bugs
                                            ich würde mich auch für eine kommunikation mit dieser Schwimmbadsteuerung interessieren, haben Sie hierzu einen muster Flow für NodeRed?

                                            vielen Dank

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            584
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            33
                                            14052
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo