VBA Web Scrapping:宏在运行时停止,但未处于调试模式

时间:2018-07-09 22:00:42

标签: vba excel-vba web-scraping

我尝试了一些事情,例如在行代码之前等待1到10秒钟,问题为“ Html.querySelector(“ a [href ='#tab-import']”)。单击“停止的地方”或添加“循环” ”,直到页面收费为止,但我不知道为什么它只能在调试模式下工作。

HTML来源:

<a href="#tab-import" data-toggle="tab">Import</a>

错误是91:未设置对象变量。

我的代码具有明确的凭据

Sub Direnet()
    Dim ieApp As InternetExplorer

    'create a new instance of ie
    Set ieApp = New InternetExplorer

    'you don’t need this, but it’s good for debugging
    ieApp.Visible = True

    'go to the page we want
    ieApp.Navigate "http://direnetdemos.com/casagarza-op/admin/index.php?route=tool/export_import&token=9reP7LOHg0SMChCYFBbcLPoQSjiQ72W1"

    Do While ieApp.Busy: DoEvents: Loop

    Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

    With ieApp
        .document.all.Item("input-username").Value = "xxxx"
        .document.all.Item("input-password").Value = "xxxx"
        .document.forms(0).submit

        Do While ieApp.Busy: DoEvents: Loop
        Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

        'Click en pestaña Import
        Dim Html As HTMLDocument

        Set Html = ieApp.document

        Application.Wait (Now + TimeValue("0:00:02"))

        Html.querySelector("a[href='#tab-import']").Click
        Html.querySelectorAll("input[name='incremental']")(1).Click
        Html.querySelector("input[id='upload']").Click
        Html.querySelector("a[onclick='uploadData();']").Click

    End With
End Sub

2 个答案:

答案 0 :(得分:0)

每次单击某些内容时,都应等待浏览器再次“就绪”:

Html.querySelector("a[href='#tab-import']").Click

Do
    DoEvents
Loop Until Not ieApp.Busy And ieApp.ReadyState = READYSTATE_COMPLETE 

Html.querySelectorAll("input[name='incremental']")(1).Click

Do
    DoEvents
Loop Until Not ieApp.Busy And ieApp.ReadyState = READYSTATE_COMPLETE

Html.querySelector("input[id='upload']").Click

Do
    DoEvents
Loop Until Not ieApp.Busy And ieApp.ReadyState = READYSTATE_COMPLETE 

Html.querySelector("a[onclick='uploadData();']").Click

Do
    DoEvents
Loop Until Not ieApp.Busy And ieApp.ReadyState = READYSTATE_COMPLETE 

此外,请勿将Application.Wait用于此类操作-实际上,它只是冻结代码执行给定时间。它不允许事件处理或与浏览器的就绪状态有任何形式的链接。

答案 1 :(得分:0)

好吧,终于在几行之后移动了该行代码“ IE.Visible = True”。非常感谢你们。