Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Daten an website übergeben

Excel Daten an website übergeben
21.12.2018 08:04:33
Rasenack
Hallo liebe Community,
ich habe folgendes Problem. Ich kümmere mich um die Essenbestellung in meiner Firma. Dazu habe ich mir schon diverse Makros erstellt, um mir das Leben schon etwas zu vereinfachen, allerdings werden es immer mehr die mitbestellen. Hinzu kommen immer mehr Abbestellungen wegen Krankheit etc. Jetzt habe ich mir noch zusätzlich ein Makro erstellt, welches mir die Essen nach der jeweiligen Farbe aufsummiert und in eine Tabelle schreibt. Genauso müssen nämlich die Daten bei dem Essenlieferanten (https://www.laola-zentralkueche.de/web/menu) eingegeben werden.
Nun wäre es mir eine große Hilfe, wenn ein Makro diese Daten automatisch in die jeweilige Tabelle des Lieferanten lädt bzw. im ersten Schritt die Seite aufruft und mich einloggt. Ich habe schon in etlichen Foren nach einer Lösung gesucht, aber alle Codes die ich ausprobierte scheiterten. Ich habe leider keine HTML Kenntnisse, um den jeweiligen Code auf meine Website anzupassen. Ich wäre sehr dankbar, wenn ich jemand bei meinem Vorhaben unterstützen würde.
Hier der Code, um mich bei der Seite einzuloggen:

Option Explicit
Sub Tabelle_Laola_fuellen()
Dim IEApp As Object
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate "https://www.laola-zentralkueche.de/web/menu"
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
With IEApp.document
Do: Loop Until .readyState = "complete"
.getElementById("txtLogin").Value = "********"
.getElementById("txtPassword").Value = "********"
.getElementById("frmLogin:_id21").Click
End With
End Sub

Leider erhalte ich auch eine Fehlermeldung 424 "Ojekt erforderlich" in der Zeile wo
.getElementbyId..... beginnt.
Der interessante Teil des Quellcode der Website kann irgndwie nicht hochgeladen werden, da  _
sonst der Code verschwindet und alles so angezeigt wird, wie es auf der Website aussieht.
Vielen Dank im Voraus.
PS: Die Tabelle beim Lieferanten wird erst nach dem Login sichtbar


		

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Daten an website übergeben
21.12.2018 10:54:50
Zwenn
Hallo Rasenack,
das Auslesen oder Einfügen von Daten auf eine Webseite ist immer individuell, da man die Seite dafür über ihre Struktur ansprechen muss. Die ist natürlich für jede Seite anders. Folgendes Makro loggt Dich auf Deine Seite ein. Da Du danach allerdings noch andere Dinge anstellen willst, wird es schwer Hilfe zu bekommen, wenn Du nicht wenigstens den HTML-Code der dann zu bearbeitenden Seite zur Verfügung stellst.
Ich habe Dir den Login jetzt erstellt, weil es (für mich) schnell ging. Vielleicht kann Dir über die Weihnachtstage jemand anders bei der weiteren Herausforderung helfen. Ich bin ab Morgen unterwegs.

Option Explicit
Sub Tabelle_Laola_fuellen()
Dim browser As Object
Dim knotenStamm As Object
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL übergeben und warten bis URL ganz geladen wurde
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = True
browser.navigate "https://www.laola-zentralkueche.de/web/menu"
Do Until browser.ReadyState = 4: DoEvents: Loop
'HTML-Ausschnitt aus DOM holen, in dem die Login Eingabefelder liegen
Set knotenStamm = browser.document.getElementById("login1")
'Mit dem HTML-Ausschnitt weiterarbeiten, indem die richtigen HTML-Tag
'Namen angesprochen werden, um Benutzername und Passwort einzutragen
knotenStamm.getElementsByTagName("input")(0).Value = "BENUTZERNAME"
knotenStamm.getElementsByTagName("input")(1).Value = "PASSWORT"
'Die eingetragenen Daten über den Login-Button absenden
knotenStamm.getElementsByTagName("input")(4).Click
End Sub
Viele Grüße,
Zwenn
Anzeige
Weitere Infos
21.12.2018 11:24:31
Zwenn
Hallo noch einmal
Du hast zwar geschrieben, Du hast keinerlei Kenntnisse in HTML, was mich annehmen lässt, Du brauchst auf jeden Fall praktische Unterstützung bei der Umsetzung Deines Vorhabens. Deshalb hatte ich in meinem vorherigen Post gar keine weitere Erklärung gegeben, was das kleine Login-Makro eigentlich macht.
HTML ist kein Buch mit sieben Siegeln denke ich. Es ist recht schnell überschaubar, wie so ein Dokument aufgebaut ist. Dazu muss man auch nicht wissen, was die einzelnen HTML-Tags eigentlich machen. Klar gehören noch ein paar andere Sachen dazu, wie CSS (Cascading Style Sheets). Aber auch da reicht es, wenn Du verstanden hast, dass diese CSS-Klassen einzelnen Tags zugeordnet sein können. Sofern das so ist, kannst Du auch über diese Namen auf die Seitenstruktur zugreifen.
Unter folgendem Link habe ich mal an einem praktischen Beispiel erklärt, was verschiedene Befehle machen, mit denen man auf das sogenannte DOM (Document Object Model) einer HTML-Seite zugreifen kann:
https://www.herber.de/cgi-bin/callthread.pl?index=1560197#1560268
Vielleicht hast Du ja den Elan und die Lust, Dich in die Materie einzuarbeiten. Dazu empfehle ich erstmal das Ziel zu verfolgen, einen bestimmten Wert aus einer HTML-Seite auszulesen und diesen in Excel anzeigen zu lassen. Das kann ja einfach in einer Message Box passieren, die Dir dann als Erfolgsmeldung dient. Nimm dazu eine Internetseite, die Du hier verlinken kannst, um Hilfe zu bekommen, wenn Du nicht weiterkommst. Noch ein Tipp ... nimm nicht Google ;-) Google sperrt den automatischen Zugriff nach wenigen Seitenaufrufen in kurzer Zeit.
Viel Spaß und viel Erfolg dabei,
Zwenn
Anzeige
AW: Weitere Infos
21.12.2018 12:30:17
Rasenack
Hallo Zwenn, hab vielen Dank für die schnelle Hilfe. Es funktioniert einwandfrei :-)
Ich würde ja, im eingeloggten Zustand den Quellcode als Screenshot hochladen wollen, um zu erfahren wo die einzelnen Elemente der Tabelle in dem HTML Dokument zu finden sind und sie dann so z.B anzusprechen:
.getElementsById("...").Value = Range("Tabelle1!F1").Value (bin mir bei der Syntax nicht sicher)
Leider kann ich im eingeloggten Zustand den Quellcode nicht anzeigen lassen.
Den Link von dir verfolge ich die Tage auf jeden Fall mal, da ich schon etwas Interesse an der Geschichte habe.
Liebe Grüße
André
Anzeige
AW: Weitere Infos
21.12.2018 13:42:51
Rasenack
Hab es doch hinbekommen mit Microsoft Edge. Also hier ist ein Auszug aus dem eingeloggten Zustand. Das betrifft jetzt als Beispiel den morgigen Samstag. Von den verfügbaren Menüs werden hier zwei dargestellt. Diese wären "ZusatzB" und "ZusatzC". Vielleicht kannst du mir ja doch noch helfen dabei. Ich wäre sehr dankbar.
Userbild
Bild ist nicht zu sehen
21.12.2018 13:52:30
Zwenn
Hallo Rasenack,
das Bild wird mir nicht angezeigt. Ist aber nicht so wild. Siehe dazu bitte mein anderes Posting:
https://www.herber.de/forum/messages/1664160.html
Viele Grüße,
Zwenn
Anzeige
AW: Weitere Infos
21.12.2018 13:50:06
Zwenn
Hallo Rasenack,
ein Screenshot von "was auch immer" ist hier in den meisten Fällen nicht sinnvoll und deshalb nicht gern gesehen bzw. führt dazu, dass Dein Hilfegesuch ignoriert wird. Dabei ist es egal, ob Tabellen oder Quellcode (Ausschnitte) als Bild hochgeladen werden. Z.B. baut niemand eine Tabelle nach, die vor allem offensichtlich schon als Datei existiert.
In Deinem Fall willst Du auf eine HTML-Seite zugreifen. Da nutzt der Ausschnitt des Quellcodes als Grafik absolut gar nix. Man benötigt erstens den gesamten Seiten-Quellcode und der bringt zweitens nur etwas, wenn man darin suchen kann. Man liest sich doch nicht alles durch und schreibt dann noch ggf. komplizierte Namen für CSS-Klassen, IDs oder irgendwelche Attribute ab. Sowas kopiere ich IMMER. Schon allein um die Fehlerquelle des Vertippens auszuschließen.
Den Quelltext einer Internetseite kann man sich immer anzeigen lassen, außer der Seitenbetrteiber unerbindet das durch JavaScript. Auch dann gibts Methoden, aber das wird in der Regel nicht gemacht, weil es sinnfrei ist. Wenn Du eine Seite aufrufst, einfach ein Rechtsklick mit der Maus auf eine freie Stelle der Seite und "Seitenquelltext anzeigen" anklicken. Ich verwende Firefox, mag sein, dass der Befehl in anderen Browsern anders lautet. Aber es gibt ihn immer.
Den angezeigten Quelltext markierst du vollständig mit der Tastenkombination Strg + a Dann kopierst Du den markierten Text mit Strg + c und fügst ihn in ein einfaches Textdokument ein. NICHT in Word, sondern in ein einfaches .txt Dokument. Das speicherst Du auch mit der Endung .txt und kannst das dann hier hochladen. (Beachte die Regeln, die hier zum Hochladen einer Datei gelten. Die stehen auf der Seite, wo Du eine Datei zum Hochladen auswählst. Nach dem Hochladen kopiere den angezeigten Link, den Du dann in Dein Posting hier einfügst.)
Sofern die so zur Verfügung gestellte Seite nicht viel mit JavaScript arbeitet, sollte man Dir damit helfen können. Zu der so erzeugten .txt lädst Du am Besten eine Excel-Beispielmappe hoch. Darin sollte eine typische Bestellvorlage zu sehen sein, wie Du sie auf die Seite hochgeladen haben willst. Ausserdem Erklärungen, was wo hin soll, usw.
Die von Dir angegebene Codezeile sollte vom Prinzip her funktionieren. Beachte jedoch die Schreibweise der Befehle. getElementByID() hat kein s am Ende von Element. Den Zugriff auf den Inhalt einer bestimmten Zelle würde ich persönlich so schreiben (ist aber Geschmackssache):

...getElementById("...").Value = Sheets("Tabelle1").Cells(1,6).Value

Kurz zur Erklärung der Get-Befehle:
getElementByID() hat kein s hinter Element, weil damit direkt ein ganz bestimmtes Element der aufgerufenen Seite angesprochen wird. Nämlich über seine ID, die vom Entwickler der Seite frei vergeben werden kann, aber auf der aufgerufenen Seite nur ein einziges Mal vorkommen darf (laut HTML Standard).
Bei getElementsByClassName() und getElementsByTagName() hingegen kann es zwar sein, dass es nur ein solches Element im Quelltext des grade bearbeiteten Ausschnitts der angezeigten Seite gibt, aber generell ist die Verwendung mehrmals zugelassen. Also werden alle Elemente, die es mit den entsprechenden Namen gibt in der Reihenfolge ihres Auftretens in einem Array eingesammelt. So ein Array ist immer Null-basiert. Auf ein bestimmtes Element aus dem Array greift man über seinen Index zu.
In dem kleinen Login-Makro für Dich siehst Du dieses Prinzip anhand der Zeilen, die auf die entsprechenden Input-Tags zugreifen. Im bearbeiteten HTML-Abschnitt, der zuvor über seine ID ausgelesen wurde, wird auf das erste, zweite und fünfte HTML-Tag mit dem Namen input zugegriffen. Einfach über die in Klammern nachgestellten Indizes des Input-Tag-Arrays

knotenStamm.getElementsByTagName("input")(0).Value = "BENUTZERNAME"
knotenStamm.getElementsByTagName("input")(1).Value = "PASSWORT"
knotenStamm.getElementsByTagName("input")(4).Click

Zu den Get-Befehlen gehört auch noch getAttribute(). Damit kann man auf sonstige Attribute zugreifen, deren Namen von den Seitenentwicklern frei vergeben werden können. Allerdings wird auch hier, wie beim Zugriff auf die ID, kein Array gebildet, sondern der Befehl arbeitet ausschließlich mit einem bereits ausgewählten HTML-Befehl.
Hat man also über sonstige Wege, meistens die Get-Befehle, ein bestimmtes HTML-Element isoliert, kann man in diesem ein Attribut auslesen. Ein Array von Elementen geht man dafür z.B. mit einer For-Each Schleife durch, um jedes einzelne Element darauf zu prüfen, ob ein bestimmtes Attribut enthalten ist, auf das man dann reagieren kann.
Das führe ich an dieser Stelle aber nicht weiter aus. Beschäftige Dich zunächst mal mit den anderen Get-Befehlen. Wenn Du einen Wert auslesen willst, kannst Du den Text, den Du auch so auf der Seite in der normalen Browser-Ansicht lesen kannst, mit .innertext bekommen.
Viele Grüße,
Zwenn
Anzeige
Die Textdatei
21.12.2018 14:16:28
Rasenack
Hallo Zwenn, danke für deine Hinweise. Du erklärst das wirklich sehr gut. Ich habe jetzt hier die Textdatei des gesamten Quellcodes. Die relevanten Daten, wie Passwort etc. wurden mit * ersetzt. Die Exceldatei lade ich ebenfalls mal hoch. Dabei ist die untere kleine Tabelle von Interesse.
Viele Grüße André
https://www.herber.de/bbs/user/126261.txt
https://www.herber.de/bbs/user/126263.xlsm

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige