VBA循环提取HTML数据时出现各种错误

VBA循环提取HTML数据时出现各种错误,vba,excel,web-scraping,Vba,Excel,Web Scraping,我在下面的VBA代码中遇到了各种错误(最近的错误是运行时错误“70”:权限被拒绝)。基本上,代码/工作表连接到客户的内部网IE数据库,搜索客户活动并将任何活动导入工作表(最终将使用活动进行报告)。这里是我遇到错误的地方,取决于我搜索的时间长度,我有时需要拉多个活动页面,这需要单击“下一步”按钮并从每个页面拉数据,直到不再有“下一步”按钮(不再有活动)。我设置的循环将从第一页开始,单击“下一步”按钮,然后有时从第二页开始,但它会触发错误。因此,我认为错误与加载页面有关,但我添加了暂停以允许加载,但

我在下面的VBA代码中遇到了各种错误(最近的错误是运行时错误“70”:权限被拒绝)。基本上,代码/工作表连接到客户的内部网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

如有任何帮助/建议,将不胜感激。谢谢大家!

查看您的代码:

'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
使用
应用程序时是否正在等待页面加载。是否等待


如果是,那么您应该知道
TDelements
不是动态的-它不会在加载新的TD元素时自动更新:它只是调用
getElementsByTagName(“tr”)时出现的元素的快照。所以在等待之后调用它。

哪一行给出了错误?使用而不是
应用程序。等待
。或者您也可以尝试。感谢您的回复,给出错误的行(大多数情况下)是“对于TDelements中的每个TDelement”。至于你的建议,我已经尝试使用IE、文档和元素状态检查,但仍然遇到同样的问题。。。我将其切换到application.wait命令,因为加载活动页面有时需要几秒钟。很抱歉我不是VBA的专家,这是什么?从这个意义上讲,我如何利用它呢?你能分享你正在使用的URL吗?关于XHR,请尝试按照我之前评论中的链接进行操作。对不起,这是一个基于intranet web的程序,因此只能在我的网络上使用。我明白你对XHR的看法。。。我不完全确定是否能够访问XML文件,但这肯定是一个更简单的解决方案,所以我将尝试一下
Dim
所有变量均为
Variant
,错误发生后,转到调试器,在即时窗口中键入
?类型名称(TDelements)
?TDelements.length
?TypeName(TDelement)
。您有什么输出?谢谢您的回复!我尝试了您的建议,在等待之后调用了
getElementsByTagName(“tr”)
,不幸的是,我仍然遇到了相同的“权限被拒绝”错误。。。虽然我似乎在不同的地方得到了错误。在抛出错误之前,我设法(仅一次)运行了两次循环,这是我能得到的最远的错误,因此您可能在这里的正确轨道上!您遇到的错误很难修复。如果你增加等待时间,这有帮助吗?不幸的是没有。。。这是我尝试的第一件事情之一,但它仍然会抛出错误,只是需要更长的时间才能到达那里。我甚至试着把等待放在我认为有意义的各个地方,但我仍然会遇到错误。