2017-03-06 2 views
1

Ich versuche, VBA-Codes zu schreiben, um den Preis eines Produkts von einer Website zu ziehen. Zu diesem Zweck habe ich die "Microsoft HTML Object Library" und "Microsoft Internet Controls" in VBA-Referenzen aktiviert. Wenn ich jedoch den Punkt erreiche, an dem der Artikel gesucht wird, der den Preis anbringt, sind die Codes fehlgeschlagen. Schätze, wenn jemand eine Lösung dafür bereitstellen kann.Wie man Daten von einer Website mit Excel VBA

Unten ist der Link zu der Beispielwebseite, von der ich den Preis kopieren möchte. Link

Unten ist mein Anfangscode:

Sub Update() 

Dim IE As New InternetExplorer 
IE.Visible = False 

IE.navigate "http://www.chemistwarehouse.com.au/buy/36985/Reach-Dentotape-Waxed-20m" 
Do 
DoEvents 
Loop Until IE.readyState = READYSTATE_COMPLETE 

Dim Doc As HTMLDocument 
Set Doc = IE.document 

Dim getprice As String 

getprice = Trim(Doc.getElementsByTagName("div class="Price" itemprop="price"").innerText) 

Worksheets("Sheet1").Range(C1).Value = getprice 

End Sub 
+0

Welche Linie wird der Code nicht auf? –

Antwort

0

Die Funktion getElementsByTagName() einen Tag-Namen erfordert nur als Parameter: z.B. getElementsByTagName("div")

Versuchen getElementsByClassName() statt:

getprice = Trim(Doc.getElementsByClassName("Price").Item.innerText) 
0

Es gibt ein paar Probleme mit dem obigen Code waren.

Ausgabe 1

getprice = Trim(Doc.getElementsByTagName("div class="Price" itemprop="price"").innerText)

Dieses: div class="Price" itemprop="price" ist kein TagName. Tagnamen sind Dinge wie Input, IMG, Anker, etc. Allerdings können wir das Class Attribut für das Preiselement sehen Sie interessiert sind, können wir ändern, wie wir dieses Element auswählen, indem Sie:.

getprice = Trim(Doc.getElementsByClassName("Price")(0).innerText)

Sie kann am Ende der Elementauswahl (0) bemerken. Hiermit wird angegeben, welches Element aus der Price ClassName-Auflistung ausgewählt wird. getElement s ByClassName gibt mehrere Elemente, das erste Element 0 sind

Ausgabe 2

Worksheets("Sheet1").Range(C1).Value = getprice

ich C1 nicht überall verwiesen. Eine Möglichkeit, eine bestimmte Zelle zu referenzieren, besteht darin, einen String zu verwenden, um den Bereich darzustellen. Von Ihrem Code wird daraus:

Worksheets("Sheet1").Range("C1").Value = getprice

+0

Brilliant. Danke vielmals – Zak

Verwandte Themen