【发布时间】:2015-11-28 08:23:46
【问题描述】:
我一直在努力寻找答案,但似乎找不到任何有用的东西。
基本上,当您在页面上时,我会从一个加载更多项目的网站中提取。我希望我的代码在加载完成后提取最终数据,但不知道如何让 XML httprequest 等待。
已编辑:
Sub pullsomesite()
Dim httpRequest As XMLHTTP
Dim DataObj As New MSForms.DataObject
Set httpRequest = New XMLHTTP
Dim URL As String
URL = "somesite"
With httpRequest
.Open "GET", URL, True
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Application.Wait Now + TimeValue("0:02:00")
.send
' ... after the .send call finishes, you can check the server's response:
End With
While Not httpRequest.readyState = 4 '<---------- wait
Wend
If httpRequest.Status = 200 Then
Application.Wait Now + TimeValue("0:00:30")
Debug.Print httpRequest.responseText
'continue...
End If
'Debug.Print httpRequest.Status
'Debug.Print httpRequest.readyState
'Debug.Print httpRequest.statusText
DataObj.SetText httpRequest.responseText
DataObj.PutInClipboard
With Sheets("Sheet1")
.Activate
.Range("A1000000").End(xlUp).Offset(1, 0).Select
.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
End With
End Sub
截图
【问题讨论】:
-
这是什么意思:当您在页面上时会在其上加载更多项目的页面 ??
-
所以当我用浏览器访问这个网站时,它会打开一个标题并一次加载一个部分。我需要所有这些部分。它是一个公司网站,所以很遗憾,我不能仅仅分享它以使其更容易解释。
-
“一次一个部分”是什么意思?这是自动加载的吗?还是像 ajax/javascript 动态加载(即,当您向下滚动页面时,它会加载更多项目)
-
如果它不是动态的,您可能需要检查 .readyState = 4。
-
@DavidZemens
.readyState对于同步 XHR 始终为 4,就像上面的代码一样 @Forbidden 您的网站显然使用动态负载,您可以尝试找出动态 XHR 参数,例如在 Chrome 中我在开发人员中看到它们网络选项卡上的工具 (F12),然后在您的代码中使用该参数。
标签: excel xml vba xmlhttprequest