Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
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

Onlineabfrage klappt nicht

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

Betreff
Datum
Anwender
Anzeige
AW: Onlineabfrage klappt nicht
08.11.2019 17:10:57
Zwenn
Hallo Tobi,
poste mal bitte den VBA Code, mit dem Du versuchst an den Preis zu kommen.
Viele Grüße,
Zwenn
AW: Onlineabfrage klappt nicht
09.11.2019 15:20:18
Zwenn
Hallo Tobi,
also das folgende exemplarische Makro hat gestern funktioniert und es funktioniert auch heute. Ich weiß nicht, welches HTML Feld da täglich den Namen ändern soll. Die CSS Klasse wird sicher nicht jeden Tag geändert, denn da steht ja drin, wie die Darstellung der Werte aussenen soll, denen die CSS Klasse zugewiesen wurde:

Sub PreiseAuslesen()
Dim browser As Object
Dim url As String
Dim knotenWurzel As Object
Dim knotenStamm As Object
Dim ausgabe As String
url = "https://www.jumbo.ch/de/suche?q=1351049"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'NodeCollection aller HTML Elemente, denen die CSS Klasse m4_m5 zugewiesen wurde
Set knotenWurzel = browser.document.getElementsByClassName("m4_m5")
If Not knotenWurzel Is Nothing Then
'Wenn die NodeCollection gebildet werden konnte, alle auflisten
For Each knotenStamm In knotenWurzel
ausgabe = ausgabe & knotenStamm.innertext & Chr(13)
Next knotenStamm
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
Set knotenStamm = Nothing
'Ausgabe aller Werte als Liste
MsgBox ausgabe
End Sub

Für weitere Infos musst Du dann mal erklären, was Du eigentlich insgesamt erreichen willst.
Viele Grüße,
Zwenn
Anzeige
AW: Onlineabfrage klappt nicht
12.11.2019 17:34:51
Tobi
Hallo Zwenn,
ich habe mir die Seite in den vergangenen Tagen noch mal angesehen. Erst sah es so aus, dass die HTML-Bezeichnnung jetzt konstant bleibt. Nun wurde sie auf m8_m9 geändert. Lx_ly hatte ich auch schonmal dabei.
Für meine Abfrage nutze ich eigentlich eine ganz simple getelementsbyclass/id Abfrage. Doch hier stoße ich leider an meine Grenze.
Hast Du eine Idee?
Viele Grüße
Tobi
AW: Onlineabfrage klappt nicht
12.11.2019 18:18:16
Zwenn
Ok,
Krass! Die wechseln wirklich die CSS Klasse. Heute ist es "m8_m9". Das muss man beobachten. Es scheint aber ein Muster zu geben. Bekannt sind die CSS-Klassen:
"Lx_ly"
"m4_m5"
"m8_m9"
Das erste Zeichen ist immer gleich im Zusammenhang mit dem nachfogenden, dass sich immer um 1 unterscheidet. Könnte was längerfristiges werden. Bis wann brauchst du die Lösung? ;-)
Schauen wir mal, was nächste Woche kommt. Ich tippe auf "m12_m13" oder "n12_n13"
Viele Grüße,
Zwenn
Anzeige
AW: Onlineabfrage klappt nicht
13.11.2019 11:23:05
Tobi
Hi.
Ja, machen es einem echt nicht einfach :-(
Bin auf eine andere Stelle im Code gestoßen.
Dort wird der Preis in anderer Form dargestellt. Ich versuche diesen zu extrahieren.
Leider 2 Probleme.
1) Wie kann ich den Teil nach dem Preis eliminieren? Der Textteil danach kann unterschiedlich lang sein bei unterschiedlich hohen Preisen. Meine Wildcard * wird nicht genommen.
2) Das Komma an der richtigen Stelle setzen.
Info, den Rest des Codes habe ich aus dem Netz. Scheint sonst ganz gut zu funzen.
Sub Webcrawler()
Dim IEApp As Object
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
Dim Zelle As Range
For Each Zelle In Range("A2:A100")
Application.Wait (Time + TimeValue("00:00:03"))
IEApp.Navigate Zelle
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
Application.Wait (Time + TimeValue("00:00:03"))
On Error Resume Next
With IEApp.document
Zelle.Offset(0, 1).Value = InStr(1, IEApp.document.DocumentElement.outerHTML, """price"":") + 8
Zelle.Offset(0, 2).Value = Replace(Mid(IEApp.document.DocumentElement.outerHTML, Zelle.Offset(0, _
1).Value, 30), """price_d*", "")
End With
Next Zelle
Set IEApp = Nothing
End Sub

Anzeige
AW: Onlineabfrage klappt nicht
13.11.2019 14:53:42
Zwenn
Hallo Tobi,
ein JavaScript kannst du folgendermaßen auseinandernehmen. Du musst halt sehen, ob das alle Deine benötigten Fälle abdeckt:

Sub PreisAusScriptAuslesen()
Dim browser As Object
Dim url As String
Dim knotenWurzel As Object
Dim knotenStamm As Object
Dim gefunden As Boolean
Dim splitArray() As String
Dim arrElement As Long
Dim betragEuro As String
Dim betragCent As String
Dim betragGanz As Double
url = "https://www.jumbo.ch/de/suche?q=1351049"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'NodeCollection aller script-Tags
Set knotenWurzel = browser.document.getElementsByTagName("script")
If Not knotenWurzel Is Nothing Then
'Wenn die NodeCollection gebildet werden konnte
'Richtiges script suchen
For Each knotenStamm In knotenWurzel
If InStr(1, knotenStamm.innertext, "window.__PRELOADED_STATE__") > 0 Then
gefunden = True
Exit For
End If
Next knotenStamm
If gefunden Then
'Script an den Kommas in Einzelteile zerlegen
splitArray = Split(knotenStamm.innertext, ",")
'Alle Einzelteile durchgehen
For arrElement = 0 To UBound(splitArray)
'Prüfen ob im aktuell betrachteten Einzelteil der String "price": steht
If InStr(1, splitArray(arrElement), Chr(34) & "price" & Chr(34) & ":") > 0 Then
'Wenn ja, sieht das Element so aus: "price":9995
'Dieses am Doppelpunkt wieder aufteilen
splitArray = Split(splitArray(arrElement), ":")
'Das zweite Element des Arrays (die Obergrenze), enthält den Preis ohne Komma
'Also das zweite Element ohne die letzten beiden Stellen merken
betragEuro = Left(Trim(splitArray(UBound(splitArray()))), _
Len(Trim(splitArray(UBound(splitArray())))) - 2)
'Die letzte beiden Stellen des zweiten Array Elements (Obergrenze)
'enthalten den Cent Betrag des Preises
betragCent = Right(Trim(splitArray(UBound(splitArray()))), 2)
'Beide mit Komma dazwischen zusammensetzen und in eine Zahl vom
'Datentyp Double umwandeln
betragGanz = CDbl(betragEuro & "," & betragCent)
Exit For
End If
Next arrElement
End If
'Falls Schleifenverarbeitung
'gefunden zurücksetzen
gefunden = False
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
Set knotenStamm = Nothing
'Ausgabe des Preises
MsgBox betragGanz
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: Onlineabfrage klappt nicht
14.11.2019 15:09:06
Tobi
Hallo Zwenn,
vielen Dank! Bin echt beeindruckt!
VG Tobi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige