Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Puppeteer Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Puppeteer Adapter

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

      @jensen
      Kannst du mir mal komplette Beispiele geben?
      Verwendest du sendto oder die datenpunkte?
      Ich versuche das mal nachzustellen

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

        @oliverio
        Ich benutze sendto, im Groben sieht das bei mir so aus :

        function createImage(_output, _url) {
            //log(_url);
            log('try to create : ' + _output);
            sendTo('puppeteer.0', 'screenshot', { 
                url: _url,
                path: '../../images/' + _output,
                viewportOptions: {
                    width: 700,
                    height: 300
                },
                renderTime: 20000
            },
            obj => {
              if (obj.error) {
                log('Error taking screenshot: ${obj.error.message}', 'error');
              } 
            });    
        }
        
        
        // PV heute
        var url01 = 'http://localhost:8082/flot/ .........';
        createImage('img01.png', url01);
        
        

        Die Url müßtest du durch was Brauchbares auf deinem System ersetzen.

        Ich glaube aber, das Problem steckt tiefer, entweder in der verwendeten Puppeteer Version oder eher in der darunterliegenden chrome Version.

        Ich finde auf meinem System schon wieder so viele verschiedene Versionen von chrome, das verwirrt mich.
        Unter C:\Windows\System32\config\systemprofile.cache\puppeteer\chrome
        99012d62-e1dd-4889-abea-3b7e8ea4a0d1-grafik.png
        Im Benutzer Verzeichnis C:\Users\IpsJensen.cache\puppeteer\chrome
        6571380e-14a5-4e72-b5ba-f7706474e16b-grafik.png

        Wie sind da die Zusammenhänge?
        Wer installiert was wann wo, und wo wird entschieden, was benutzt wird?

        Jensen OliverIO 3 Replies Last reply Reply Quote 0
        • Jensen
          Jensen @Jensen last edited by

          @foxriver76
          Könntest Du vielleicht einem Ahnungslosen etwas weiter helfen?
          Ich weiß hier einfach nicht weiter.

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

            @jensen

            Der Adapter nutzt eigentlich nur das folgende package.
            Dies sorgt sich um das herunterladen und das richtige ansprechen des Browsers.

            https://www.npmjs.com/package/puppeteer

            Hauptanwendungszweck dieses Pakets ist automatisierter Tests von webanwendungen.
            Dazu wird meist die applikation in einer gekapselten virtuellen Umgebung (meist sowas wie docker) installiert, die Tests ausgeführt und am Ende die komplette Umgebung wieder weggeworfen.
            Andere anwendungsfälle sind webscraping oder sowas wie hier, was aber wahrscheinlich bei weitem nicht so oft in der Welt angewendet wird.

            Das deinstallieren von Browsern wurde erst letztes Jahr hinzugefügt
            https://github.com/puppeteer/puppeteer/pull/10179
            Ob das im Adapter berücksichtigt ist weiß ich nicht.

            Die Ursache deiner Fehler kann vielfältig sein.
            Bei flot stand im Ergebnis ein net_err drin. Das deutet darauf hin, das irgendwas mit der netzverbindung nicht passt. Aber auch hier kann es vielfältig sein. Am wahrscheinlichsten sind timeouts, aber daher wollte ich das mal für mich selbst probieren um das einzugrenzen.

            Bei deinem msnwetter kann es sein, das der Anbieter Begrenzungen eingebaut hat, die ein automatisiertes Abrufen verhindert. Ich selbst bin im Zusammenhang einer nieten Fragestellung letztens auch auf sowas gestoßen, das der Abruf im Browser funktioniert, mit puppeteer aber nicht. Wie die verhinderungsstrategie funktioniert weiß ich aktuell nicht.

            Also ichdenke nicht das der Fehler aktuell noch an puppeteer liegt

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

              @jensen sagte in Puppeteer Adapter:

              also flot funktioniert bei mir
              ae0420c5-9870-4e11-accf-91c26daa97b3-image.png

              msn weather eigentlich auch, allerdings erhalte ich mit puppeteer nur die folgende seite
              fde6e2e4-275b-434f-a049-b531a4f4f3e8-image.png

              link ist
              https://www.msn.com/en-us/weather/forecast/in-Frankfurt,Hesse

              aufgrund des net_err vermute ich, das irgendwas mit dem abruf der daten von deinem nuc nicht passt.
              probiere es mal direkt von dort mit curl

              um im script eine bessere fehlermeldung zu erhalten ändere mal die zeile zu.
              da waren die falschen anfürhungszeichen drin und message ist da auch nicht vorhanden.
              ich frage mich wie du die fehlermeldung weiter oben produzieren konntest?

                      log(`Error taking screenshot: ${obj.error}`, 'error');
              

              wenn der timeout von puppeteer nicht reicht, dann solltest du die folgende option einbauen

              waitForTimeout

                  sendTo('puppeteer.0', 'screenshot', { 
                      url: _url,
                      path: '../../images/' + _output,
                      viewportOptions: {
                          width: 700,
                          height: 300
                      },
                    renderTime: 20000,
                    waitOption: {
                      waitForTimeout: 20000,
                    },        
              

              der generelle timeout ist auf 5 sekunden eingestellt, was eigentlich reichen sollte.

              überprüfe auch mal noch deinen bilderpfad, ob der existiert.
              evtl mal ohne pfad nur mit img.png eintragen, dann findest du das bild unter /opt/iobroker/ioberoker-data

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

                @oliverio
                Für msnweather brauchst du die von mir geparste Datei.
                msnweather1.html
                (Bitte nicht an den komischen Zeichen vor dem °C stören, das ist ein anderes Thema.

                Was ist der Unterschied bei diesen verschiedenen Apostrophen?
                Ich habe meine Log Zeile geändert.
                Die waitOption habe ich auch dazu gebaut.

                Ergebnis:

                javascript.0
                   2024-09-09 15:48:27.524	error	script.js.test.PuppeteerSample3: Error taking screenshot: timeout
                javascript.0
                   2024-09-09 15:48:07.516	info	script.js.test.PuppeteerSample3: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                javascript.0
                   2024-09-09 15:48:07.516	info	script.js.test.PuppeteerSample3: try to create : msnweather1.png
                javascript.0
                   2024-09-09 15:48:07.516	info	script.js.test.PuppeteerSample3: file:///C:/ioBroker/images/msnweather1.html
                javascript.0
                   2024-09-09 15:48:07.495	info	Start JavaScript script.js.test.PuppeteerSample3 (Javascript/js) 
                

                Interessant ist, ich habe waitOption auf 60000, renderTime auf 30000, aber der timeout kommt nach 20000.

                Jensen 1 Reply Last reply Reply Quote 0
                • Jensen
                  Jensen @Jensen last edited by

                  Ohne Pfad bringt auch keine Änderung.

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

                    @jensen

                    Was sagt curl?

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

                      @oliverio
                      curl ?
                      Was muß ich tun?

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

                        @jensen

                        curl müsste seit windows 10 installiert sein.

                        du gehst auf die komandozeile deines nucs
                        am besten mit der gleichen berechtigung wie iobroker
                        und führst bspw das aus

                        in anführungszeichen steht der link.
                        curl ruft dann die daten ab, ungefähr so wie es puppeteer macht und gibt sie aus.
                        wenn irgendwelche fehler dabei angezeigt werden könnte das interessant sein

                        curl "https://www.msn.com/en-us/weather/forecast/in-Frankfurt,Hesse?loc=eyJsIjoiRnJhbmtmdXJ0IiwiciI6Ikhlc3NlIiwicjIiOiJGcmFua2Z1cnQgYW0gTWFpbiIsImMiOiJHZXJtYW55IiwiaSI6IkRFIiwidCI6MTAyLCJnIjoiZW4tdXMiLCJ4IjoiOC42Nzk0OTk2MjYxNTk2NjgiLCJ5IjoiNTAuMTEwOTAwODc4OTA2MjUiLCJvIjp0cnVlfQ%3D%3D&weadegreetype=C"
                        

                        hier die anleitung für curl
                        https://curl.se/docs/manpage.html

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

                          @oliverio
                          Wir müssen das verschieben.
                          Ich bin jetzt erst mal 2 Wochen auf Montage und hier ist die Internetverbindung momentan sehr schlecht, komme nicht per VPN auf den Rechner.

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

                            @jensen

                            alles gut. du schreibst am besten wieder in diesen thread wenns weitere fragen gibt

                            1 Reply Last reply Reply Quote 0
                            • E
                              e_a_s_y last edited by

                              hallo,

                              ich versuche gerade vergeblich einen screenshot meiner vis zu erstellen.

                              nach updates funktioniert der phantomJS nicht mehr der das seit 2 jahren gut erledigt hatte.
                              daher bin ich nun zu puppeteer gewechselt.

                              mittels send-to wird hier auch ein screeshot erstellt. leider aber zu früh so das nicht alles mit drauf ist.

                              laut der docu von puppetier gibt es hier den rendertime parameter, leider ist dieser aber im beispiel nicht mit drin.

                              ich habe einiges versucht und dann versucht im netz etwas zu finden.
                              lande aber immer wieder hier.

                              kann mir evtl. jemand erklären was ich falsch mache. ich bräuchte nur eine verzögerung von 8-10 sekunden erhalte aber immer nach 5s das bild. (oder teile davon)

                              hier mein test-script:

                              sendTo('puppeteer.1', 'screenshot', { 
                                      url: 'http://192.168.5.153:8082/vis/?main#Heizung',
                                      ioBrokerOptions: { storagePath: 'tempt.png'  },
                                      path: 'c://iobroker//test-screenshot-heizung.png',
                                      fullPage: false,
                                      omitBackground: true,
                                      encoding: 'binary',
                                      captureBeyondViewport: false,
                                      renderTime: 8000,
                                  });
                              
                              E liv-in-sky 2 Replies Last reply Reply Quote 0
                              • E
                                e_a_s_y @e_a_s_y last edited by

                                @e_a_s_y

                                nach 2 abenden testen ohne erfolg hier eine notlösung.

                                nur für mich wenn ich wieder hier lande:

                                in datei: ...node_modules\iobroker.puppeteer\build\main.js

                                await this.delay(7000);
                                

                                hinter die wait condition einfügen (ca. zeile 105 & ca. zeile 170)

                                mcm1957 1 Reply Last reply Reply Quote 0
                                • mcm1957
                                  mcm1957 @e_a_s_y last edited by mcm1957

                                  @e_a_s_y
                                  Hast du ein Issue im Adapter repository eröffnet und dein problem (und deinen9 Workaround dort abgelegt?

                                  Ohne issue wird da siher nichts gendert / gefixed / verbessert.

                                  https://github.com/foxriver76/ioBroker.puppeteer/issues

                                  1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @e_a_s_y last edited by liv-in-sky

                                    @e_a_s_y

                                    hast du mal waitForTimeout oder waitForSelector probiert - siehe: https://github.com/foxriver76/ioBroker.puppeteer

                                    E 1 Reply Last reply Reply Quote 0
                                    • E
                                      e_a_s_y @liv-in-sky last edited by

                                      @liv-in-sky
                                      ja die hatte ich versucht zu mit einzubinden, selector schließt das die rendertime ja aus, das steht auch so im code, das konnte ich sehen. leider ist mir nicht ganz klar was ein selector sein soll. vermute das es ein div mit einem tag ist. das kann ich aber so bei der vis nicht ganz hinten einbauen.
                                      ich hab in meiner vis auch noch iframes mit highchart-diagrammen, auch hier laden die kurven etwas verzögert.
                                      so blöd es auch ist timer zu verweden, aber hier passt das schon.

                                      das timeout ändert leider nichts da die seite der vis ja antwortet und der hintergrund auch meist schon geladen ist.
                                      die elemente fehlen zwar meist oder viele. aber selbst mit langem TO (60s) macht der adapter nach ca 5s das bild.

                                      so wie es im code steht sollte es eigentlich funktionieren macht es aber leider nicht, hatte etwas rum probiert aber nur der WA hat das ergebniss gebracht.

                                      bin ich wiedermal der erste der die vis ablichten will?
                                      sind alle anderen seiten in <5s schon fertig?
                                      oder gibts noch einen adapter der für so etwas taugt.

                                      OliverIO liv-in-sky 2 Replies Last reply Reply Quote 0
                                      • OliverIO
                                        OliverIO @e_a_s_y last edited by OliverIO

                                        @e_a_s_y

                                        Mit selektoren sind die css selektoren gemeint.Alternativ kannst du auch xpath verwenden.
                                        Also ein Mechanismus jedes beliebige html Element zu adressieren.
                                        Puppeteer wartet dann darauf, das dieses Element dem der Dom hinzugefügt wird und sagt dann, nun ist die Seite geladen. Das ist besonders wichtig bei Seiten, bei denen Seiteninhalte dynamisch nachgeladen werden und erst bei Verfügbarkeit es dann weitergehen soll.

                                        https://wiki.selfhtml.org/wiki/CSS/Selektoren

                                        Life auf einer Seite kannst du das in den webdeveloper Tools von Chrome in der Konsole mit
                                        https://developer.chrome.com/blog/search-dom-tree-by-css-selector
                                        Ausprobieren

                                        1 Reply Last reply Reply Quote 0
                                        • liv-in-sky
                                          liv-in-sky @e_a_s_y last edited by liv-in-sky

                                          @e_a_s_y

                                          lt. github page ist die syntax anders angegeben, als du es oben zeigst - https://github.com/foxriver76/ioBroker.puppeteer

                                          github:

                                          waitOption?: {
                                                  /**
                                                   * Define a Timeout in ms
                                                   */
                                                  waitForTimeout?: 5000,
                                              
                                                  /**
                                                   * Wait for a given id/tag/etc to be occured
                                                   */
                                                  waitForSelector?: '#testId'
                                                },
                                          
                                          • bin mir nur nicht sicher, ob das fragezeichen richtig ist bei waitOption?

                                          hast du das mal getestet ?

                                          OliverIO E 2 Replies Last reply Reply Quote 0
                                          • OliverIO
                                            OliverIO @liv-in-sky last edited by

                                            @liv-in-sky

                                            Fragezeichen bedeutet, das der Parameter optional ist.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            850
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            75
                                            3828
                                            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