VBA循环的各种错误来拉取HTML数据

时间:2016-03-03 18:50:42

标签: excel vba excel-vba web-scraping

我一直在使用以下VBA代码获得各种错误(最近的错误是运行时错误'70':权限被拒绝)。基本上,代码/工作表连接到客户的Intranet IE数据库,搜索客户活动并将任何活动导入工作表(最终将使用活动进行报告)。这是我遇到错误的地方,这取决于我正在搜索的时间长度我有时会有多个活动页面需要点击“下一步”按钮并从每个页面拉取数据,直到不再有“下一个” “按钮(没有更多活动)。我设置的循环将从第一页拉出,单击“下一步”按钮,然后有时从第二页拉出,但随后它会跳错。所以我认为错误与页面的加载有关,但我添加了暂停以允许加载但仍然遇到相同的错误。我真的坚持这一点,不幸的是,在我能解决这个问题之前,我无法继续推进项目。

以下是代码段:

    Dim TDelements As IHTMLElementCollection
    Dim TDelement As HTMLTableCell
    Dim r As Long, i As Long
    Dim e As Object

    Set TDelements = IE.document.getElementsByTagName("tr")
    r = 0
    For i = 1 To 1
        Application.Wait Now + TimeValue("00:00:03")
        For Each TDelement In TDelements
            If TDelement.className = "searchActivityResultsContent" Then
                Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
                r = r + 1
            ElseIf TDelement.className = "searchActivityResultsContent" Then
                Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
                r = r + 1
            End If
        Next
        Application.Wait Now + TimeValue("00:00:02")
        Set elems = IE.document.getElementsByTagName("input")
        For Each e In elems
            If e.Value = "Next Results" Then
                e.Click
                i = 0
                Exit For
            End If
        Next e
    Next i
    Do Until Not IE.Busy And IE.readyState = 4
        DoEvents
    Loop
    IE.Quit
End Sub

非常感谢任何帮助/建议。谢谢!

1 个答案:

答案 0 :(得分:0)

查看您的代码:

'getting any TD elements here
Set TDelements = IE.document.getElementsByTagName("tr")

'waiting here....
Application.Wait Now + TimeValue("00:00:03")

'now trying to use items in TDelements...
For Each TDelement In TDelements
   '...
Next

您是否在等待使用Application.Wait时加载页面?

如果是,那么您应该知道TDelements不是动态 - 它将不会在加载新的TD元素时自行更新:它只是存在的元素的快照当你打电话给getElementsByTagName("tr")时。所以在等待之后调用