Erstens bin ich sehr neu mit VBA und habe nur soweit ich bin mit Lösungen aus anderen Fragen online gestellt. Was ich habe, ist ein Makro, das IE zu einer spezifizierten URL öffnet, Text in eine Suche eingibt, die Ergebnisse lädt und dann die Suche durch spezifischere Suchwerte durchläuft.Abrufen von Website-Daten Excel VBA
Was ich versuche zu tun ist, die Ergebnisse einer Suche in Excel zu kratzen. Die Ergebnisse erscheinen jedoch nicht im resultierenden HTML-Code, sondern scheinen von einem Skript auf der Website generiert zu werden.
Ein Beispiel für die Seite Ich suche: https://www.gamestop.com/PickUpAtStore/75083/0/917850
Bei Belastung werden die Ergebnisse auf der Seite, aber nicht auf der Seite Quelle. Mit Blick auf die Seite Quelle es ein Skript zu sein sucht, die die Ergebnisse in zieht:
<script id="stores" type="text/x-handlebars-template">
{{#if this}}
<ul>
{{#each this}}
<li id="{{StoreNumber}}|{{#if true}}917850 {{/if}}" class="{{#if false}}checkOnly{{/if}}"">
<div class="fluidWrapper ats-storelist" id="{{StoreNumber}}">
<div class="contactInfo">
<div class="title ats-storetitle">{{DisplayName}}</div>
<div class="address ats-storeaddress">
{{{AddressStreet}}}<br />{{AddressCityStateZip}}
</div>
<div class="phoneNumber ats-storephone">
{{Phone}}
</div>
</div>
<div class="rightInfo">
<div class="distance ats-storedistance">{{Distance}} {{#if true}}<i id="showHoldOptions_{{StoreNumber}}" class="{{#if false}} plus_{{/if}}icon"></i>{{/if}}</div>
</div>
</div>
..................
Idealer geladen werden, um den Shop-Namen sind, was ich möchte geschehen ist, wenn die Ergebnisse, Adresse und Telefon # setzen in Excel Beginnen Sie bei A4, B4, C4 und fügen Sie jeden Speicher zur nächsten Zeile hinzu.
Sehe ich an dem völlig falschen Ort, um diese Ergebnisse zu greifen? Ich schätze jede Hilfe, die das löst.
bearbeiten aktuelle Makro hinzufügen:
Sub Search_Cell()
Dim ie As Object
Dim lRow As Long
Dim URL As Range
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
For Each URL In Range("B1")
ie.navigate URL.Value
Application.StatusBar = "Submitting"
While ie.Busy
DoEvents
Wend
Next
For lRow = 1 To 89
With ie.document
.all("puas_search").Value = Sheets("Zipcodes").Range("A" & lRow).Value
.getElementById("puas_search").Focus
End With
Application.SendKeys ("~")
Application.Wait Now + #12:00:02 AM# 'wait 2 seconds
' Get results of search
' Add Store name to A4, Address to B4, Phone# to C4 (but for following searches start at the next empty row)
' Add following results to next row
Next lRow 'loop to next search
ie.Quit
Set ie = Nothing
MsgBox "Done"
End Sub
Wie sieht Ihr bestehender Code gerade aus? Ich [habe kürzlich eine sehr ähnliche Frage beantwortet] (https://stackoverflow.com/a/47040459/8535397). Unter Verwendung des IE-Objekts sollte es in der Lage sein, das erzeugte HTML zu lesen (ohne sich um die Quelle zu kümmern). – Tigregalis
@Tigregalis Mit der HTML-Verschrottung ruft das OP nur '{AddressStreet}' ab und er will den Wert, der von ihm angegeben wird und nicht {AddressStreet}. Ich denke, es ist nicht möglich, diese Daten mit nur HTML-Verschrottung zu erhalten. – danieltakeshi
@danieltakeshi es ist nicht HTML-Scraping, es ist DOM Traversal. Ich sagte "generated HTML", aber was ich wirklich meinte, war das DOM. Das IE-Objekt lässt uns die DOM-Hölle durchqueren, wenn wir es wollten, könnten wir es verwenden, um Formular-Eingaben zu automatisieren. – Tigregalis