在 VBA 网络抓取期间,IE Readystate 停留在 1
IE Readystate stuck at 1 during VBA webscraping
当试图达到 URL 时,我的代码卡在我的就绪状态循环中并且永远不会加载。就绪状态永久保持在 1。如果我暂停代码并点击调试,光标会以一种奇怪的顺序跳过我的程序,有时跳到结尾然后跳到开头,有时又回到子程序的开头。
我了解到这可能是 javascript 的问题,但我似乎找不到任何解决方案。
有没有办法让它工作?
Sub Navigate()
IE.Visible = True
IE.Navigate ("http://web.vermont.org/Accounting?ysort=true")
Do While IE.ReadyState <> 4
DoEvents
Loop
Set Doc = IE.Document
End Sub
该服务器似乎可以很好地响应 XML 请求,并且不需要您转到后续页面以获取剩余内容。
Sub Get_Listings()
Dim sURL As String, iDIV As Long, htmlBDY As HTMLDocument, xmlHTTP As MSXML2.ServerXMLHTTP60
Set xmlHTTP = New MSXML2.ServerXMLHTTP60
Set htmlBDY = New HTMLDocument
'sURL = "http://web.vermont.org/Accounting?ysort=true"
sURL = "http://web.vermont.org/Dining?ysort=true"
With xmlHTTP
.Open "GET", sURL, False
.setRequestHeader "Content-Type", "text/xml"
.send
Do While .readyState <> READYSTATE_COMPLETE: DoEvents: Loop
If .Status <> 200 Then GoTo CleanUp
htmlBDY.body.innerHTML = .responseText
End With
With htmlBDY
For iDIV = 0 To (.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX").Length - 1)
If CBool(.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a").Length) Then
Debug.Print _
.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a")(0).innertext
End If
Next iDIV
End With
CleanUp:
Set htmlBDY = Nothing
Set xmlHTTP = Nothing
End Sub
您需要将 Microsoft XML 6.0、Microsoft HTML 对象库和 Microsoft Internet 控件添加到“工具”、“参考”中。我提供这个片段是因为我在那个网站上找不到禁止使用机器人刮板的使用条款。请注意不要因为重复的抓取请求而禁止您的 IP。
当试图达到 URL 时,我的代码卡在我的就绪状态循环中并且永远不会加载。就绪状态永久保持在 1。如果我暂停代码并点击调试,光标会以一种奇怪的顺序跳过我的程序,有时跳到结尾然后跳到开头,有时又回到子程序的开头。
我了解到这可能是 javascript 的问题,但我似乎找不到任何解决方案。
有没有办法让它工作?
Sub Navigate()
IE.Visible = True
IE.Navigate ("http://web.vermont.org/Accounting?ysort=true")
Do While IE.ReadyState <> 4
DoEvents
Loop
Set Doc = IE.Document
End Sub
该服务器似乎可以很好地响应 XML 请求,并且不需要您转到后续页面以获取剩余内容。
Sub Get_Listings()
Dim sURL As String, iDIV As Long, htmlBDY As HTMLDocument, xmlHTTP As MSXML2.ServerXMLHTTP60
Set xmlHTTP = New MSXML2.ServerXMLHTTP60
Set htmlBDY = New HTMLDocument
'sURL = "http://web.vermont.org/Accounting?ysort=true"
sURL = "http://web.vermont.org/Dining?ysort=true"
With xmlHTTP
.Open "GET", sURL, False
.setRequestHeader "Content-Type", "text/xml"
.send
Do While .readyState <> READYSTATE_COMPLETE: DoEvents: Loop
If .Status <> 200 Then GoTo CleanUp
htmlBDY.body.innerHTML = .responseText
End With
With htmlBDY
For iDIV = 0 To (.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX").Length - 1)
If CBool(.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a").Length) Then
Debug.Print _
.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a")(0).innertext
End If
Next iDIV
End With
CleanUp:
Set htmlBDY = Nothing
Set xmlHTTP = Nothing
End Sub
您需要将 Microsoft XML 6.0、Microsoft HTML 对象库和 Microsoft Internet 控件添加到“工具”、“参考”中。我提供这个片段是因为我在那个网站上找不到禁止使用机器人刮板的使用条款。请注意不要因为重复的抓取请求而禁止您的 IP。