Artikelpreise aus Onlinekatalog in Rechnungsprogramm oder .xlsx

  • Hi Swiffer 👋 ,

    hier nun mein Vorschlag, für deine Website Automatisierung/Steuerung richner.teamonline.ch, bzw. für die Anforderung Daten der Website in eine CSV Datei zu überführen.

    • Die wichtigsten Stellen habe ich kommentiert.
      • Ich hoffe das reicht dir, ansonsten sind die Funktionen und Variablen treffend benannt (wie im post vorher bereits angekündigt 😅).
      • Frage bitte gerne nach, wenn dir irgendwas unklar sein sollte 🤝 .
    • Fehlerbehandlung ist nur minimal vorhanden, da sobald die Seite geladen ist (im WebDriver, chrome oder firefox), sie recht stabil ist und daher schätze ich den Bedarf dazu als gering ein.
      • Der Ablauf diesbzgl. kann noch ausgebaut/robuster gemacht werden (wirst du sehen ob du da mehr brauchst oder nicht).
      • Gerne auch hierzu nachfragen bei Bedarf.
    • Derzeit besteht eine leichte Verzögerung von 300 ms $iDelay, Zeile 18, für das Interagieren mit den Website-Elementen.
      • Beim lesen von Texten (Artikel und Preise etc.) sowie bei Klicks ist dies so. Kannst du gern noch anpassen, doch zu weniger als 150 ms würde ich nicht raten.
      • Dies dient der Robustheit der Ausführung. Es wird damit etwas langsamer, doch darauf kommt es dir sicherlich nicht an oder?
    • 💡 Eine Unschönheit ist, dass ich den automatischen Lauf im headless Modus ($bIsHeadlessMode), Zeile 17, nicht erfolgreich umsetzen konnte.
      • Also dafür müsste ich noch etwas Zeit aufwenden um das "Warum" zu klären und dies dann zu fixen. Jedoch auf Grund deiner Ausführungen sehe ich auch hier den Bedarf erstmal nicht.
      • Wie das ganze im headless Modus funktioniert, ist aber vorbereitet und du kannst sehen wie es sein müsste.
      • Falls du doch möchtest, dass der Browser unsichtbar seine Arbeit verrichtet und dein Skript die CSV anlegt, gib Bescheid. Dann setze ich mich vielleicht nochmal ran 🤝 .
    • Randnotiz: Im kommenden WebDriver Tutorial wird die Strukturierung nochmal anders sein.

    Das Skript allein, ist so nicht lauffähig. Alle Abhängigkeiten1, welche benötigt werden, inklusive des Main.au3 Skriptes können hier heruntergeladen werden.

    Das Ergebnis, der Ausführung ist, dass eine CSV Datei mit den gefundenen Artikelnummern und Verkaufspreisen angelegt wird. Also Beispiel für den heutigen Lauf:

    20230126-171516-artikelnummer-verkaufspreis.csv

    Dateiname ist @ScriptDir & '\' & @YEAR & @MON & @MDAY & '-' & @HOUR & @MIN & @SEC & '-artikelnummer-verkaufspreis.csv'. Anpassbar in Zeile 142.

    Viel Erfolg Swiffer damit 😀 .

    Viele Grüße

    Sven

    1 Der benötigte WebDriver (entweder Chrome oder Firefox), wird via "_WD_UpdateDriver()" heruntergeladen. Daher ist dieser nicht im verlinktem Verzeichnis vorhanden.

  • Hallo SOLVE-SMART

    Vielen Dank für Deine Bemühungen!!! Dein Vorschlag sieht echt toll aus :)

    Das ganze ist komplexer als ich es mir vorgestellt hatte. Hoffe Du hattest nicht zu viel Aufwand.

    Freue mich schon sehr es ausgiebig zu testen und gebe Dir dann gerne eine Rückmeldung.

    Ich wünsche einen erholsamen Sonntag.

    Grüsse Swiffer

    Sauber bleiben.

  • Hi Swiffer,

    freut mich das es dir zusagt 🤝 .

    Die eigentliche Automatisierung der Webseite ist gar nicht so sehr komplex. Die Abhängigkeiten des WebDriver sowie die vielen Vorbedingungen, welche zu erfüllen sind bevor man wirklich zur Seite navigieren kann und loslegen kann, dies ist komplexer, ja. Da lässt sich nicht viel machen. Allerdings kann man das Gerüst (das schaffen der Vorbedingungen) ja nun immer wieder verwenden 😀 .

    Wenn es an der Seite Anpassungen geben sollte und du nicht mehr die Ergebnisse bekommst, welche du erwartest, dann musst du bestenfalls erstmal nur an die XPath-Selectoren (XPath-Ausdrücke) heran. Wenn es mehr Änderungen geben sollte, an den Ablauf auch noch. Erfahrungsgemäß ändern sich solche Seiten aber nicht sehr oft (selten).

    Wenn es soweit kommen sollte, gib bitte einfach Bescheid oder versuche selbst wie weit du kommst. Eine ausführliche Erklärung "wie", würden den Rahmen sprengen. Daher habe ich nur das kommentiert, was man auch gut fassen kann ohne zu viele Insights zu haben/zu kennen.

    Wenn es bei dir funktioniert und alles gut ist, dann schließe gerne diesen Thread hier (auf erledigt) setzen. Falls dann später noch was aufkommt, mach' einfach einen neuen auf 👍 .

    Viele Grüße

    Sven

  • Das geht ja sehr schnell mit den Daten abfragen. Super! :)

    Es kommt zwar eine Meldung von Cloudflare ich sei blockiert, die Preise werden jedoch trotzdem abgerufen und der "normale" Seitenaufruf funktioniert auch noch.

    Ich habe 18$iDelay jetzt mal auf 600 gesetzt in der Hoffnung weniger Gefahr zu laufen eine IP-Sperre zu erhalten. Vor allem beim testen.

    Frage(n):

    Ich habe 151 in _NavigateTo('https://richner.teamonline.ch/search/?q=f%FCllventil') geändert.

    Die Seite öffnet, das File wird erstellt aber es sind keine Preise enthalten. Es gibt keine Fehlermeldung.

    Muss ich sonst noch etwas ändern, wenn ich die Daten von einer anderen Richner-Seite abrufen möchte?

    Nochmals vielen Dank für Dein Engagement! Es eilt wie immer nicht.

    Sauber bleiben.

  • Hi Swiffer,


    eine ausführliche Antwort folgt heute oder morgen 🤞 . Habe es zur Kenntnis genommen, aber gerade keine Zeit es ausführlich zu beschreiben.
    Bis dann.

    Viele Grüße
    Sven

  • Hi Swiffer,

    ich war gut beschäftigt in den letzten Tagen, daher nun erst meine Rückmeldung 😇 . Also:

    Das geht ja sehr schnell mit den Daten abfragen. Super! :)

    Ja es muss auch nicht viel mit der Seite/den Seiten getan werden, außer eben das Auslesen von Texten. Daher geht es fix 😀 .

    Es kommt zwar eine Meldung von Cloudflare ich sei blockiert, die Preise werden jedoch trotzdem abgerufen und der "normale" Seitenaufruf funktioniert auch noch.

    Falls du bzw. die Webdriver-Instanz wirklich als blockiert von Cloudflare eingestuft ist/seid (auf Grund des User-Agents, IP etc.), dann prüfe bitte mal ob du wirklich alle Einträge der drei Seiten noch in die CSV generiert/aufgelistet bekommst. Denn es sollten Stand heute (10.02.2023) 122 Produkte sein (wie auf der Webseite gezeigt). D.h. du solltest auch 122 Zeilen (plus den Header) in deiner jeweiligen CSV haben.

    ☝ Falls dies nicht der Fall ist, dann melde dich bitte. Dann muss ich etwas umstellen, damit auch die beiden anderen Seiten (man befindet sich am Anfang auf Seite 1 von 3 ...) wieder gelesen werden.

    Ich habe 18$iDelay jetzt mal auf 600 gesetzt in der Hoffnung weniger Gefahr zu laufen eine IP-Sperre zu erhalten. Vor allem beim testen.

    Das ist egal, wenn du geblockt sein solltest, bringt dir das Delay auch nix mehr 🤣 . Also es dient eher der Robustheit im Ablauf. Wie im post #41 beschrieben, solltest du es nicht unter 300 ms setzen, aber nach oben geht immer (wird nur langsamer die Ausführung damit).

    Frage(n):

    Ich habe 151 in _NavigateTo('https://richner.teamonline.ch/search/?q=f%FCllventil') geändert.

    Die Seite öffnet, das File wird erstellt aber es sind keine Preise enthalten. Es gibt keine Fehlermeldung.

    Muss ich sonst noch etwas ändern, wenn ich die Daten von einer anderen Richner-Seite abrufen möchte?

    Kurz gesagt:
    Das war nicht teil deiner Anforderung am Anfang 😅 , daher geht dies auch nicht so ohne weiteres.

    Ausführlich:
    Je nach Aufbau der verschiedenen Seiten zu denen du navigierst, benötigt es auch teils völlig andere Selektoren um mit den Elementen der Seite zu interagieren. Der Aufbau ist jedoch fast immer gleich. Ich kann dir dabei helfen/dich unterstützen, wenn du mir mal ein, zwei oder drei weitere Seiten von "richner*.ch" schreibst welche du verwenden willst/musst, damit ich erstmal schauen kann ob die Unterschiede groß sind. Bestenfalls kann ich dich dann in die Lage versetzen den bereits vorhandenen Code soweit auszubauen, dass du das selbst erweitern kannst 🤝 .

    Nochmals vielen Dank für Dein Engagement! Es eilt wie immer nicht.

    Gerne 😇 .

    Viele Grüße
    Sven