首先,我对VBA非常陌生,并且只使用在线询问其他问题的解决方案。我所拥有的是一个宏,它将IE打开到指定的URL,将文本输入搜索,加载结果,然后通过更具体的搜索值循环搜索。
我想要做的是将搜索结果刮到excel中。但是,结果不会出现在生成的HTML代码中,而是由网站上的脚本生成。
我正在搜索的网页示例: https://www.gamestop.com/PickUpAtStore/75083/0/917850
加载后,结果会在页面上找到,但不会在页面源中找到。查看页面源代码,看起来是一个可以得到结果的脚本:
<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>
..................
理想情况下,我想要发生的是,当加载结果时,商店名称,地址和电话号码将从A4,B4,C4开始放入Excel中,并将每个商店添加到下一行。
我是否在寻找完全错误的地方来获取这些结果?我很感激任何帮助解决这个问题。
编辑添加当前宏:
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
答案 0 :(得分:0)
我解决了这个问题,我认为结果无法从html中删除,这是完全错误的。感谢@Tigregalis让我朝着正确的方向努力。
以下是提取我需要的数据的代码片段,将其放在excel中的正确位置,然后移动到下一行。
Set HTMLDoc = IE.document
Set Stores = HTMLDoc.getElementsByClassName("contactInfo")
For Each Store In Stores
ColNum = 1
For Each Name In Store.Children
Cells(RowNum, ColNum) = Name.innerText
ColNum = ColNum + 1
Next Name
RowNum = RowNum + 1
Next Store