Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Web Scraping:宏在运行时停止,但不是在调试模式下_Vba_Excel_Web Scraping - Fatal编程技术网

VBA Web Scraping:宏在运行时停止,但不是在调试模式下

VBA Web Scraping:宏在运行时停止,但不是在调试模式下,vba,excel,web-scraping,Vba,Excel,Web Scraping,我尝试过一些事情,比如在出现“Html.querySelector”(“a[href=”#tab import'])问题的行代码之前等待1到10秒。单击“停止位置”或添加“循环”,直到页面充电,但我不知道为什么它只在调试模式下工作 HTML来源: <a href="#tab-import" data-toggle="tab">Import</a> 每次单击某项内容时,应等待浏览器再次“就绪”: 另外,不要使用应用程序。等待这类事情——它实际上只是在给定的时间内冻结代码

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

HTML来源:

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

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



另外,不要使用
应用程序。等待
这类事情——它实际上只是在给定的时间内冻结代码执行。它不允许处理事件,也不允许与broswer的就绪状态有任何类型的链接。

好吧,在几行之后移动此行码“IE.Visible=True”终于奏效了。非常感谢您的支持。

如果它在调试/分步执行模式下运行,而不是在直接执行时运行,则通常表明存在计时问题。页面可能已加载,但您尝试访问的元素尚未创建:它可能通过脚本动态构建。您需要添加“wait”或使用某种循环来检测元素何时存在。抱歉,我已将html源代码添加到问题中。如果存在readyState,则不确定您是否可以可靠地使用readyState(例如)加载页面源后,正在进行其他调用或正在构造动态内容?我不确定您是否可以使用VBA可靠地操作IE!哈哈,但是你的观点是正确的——例如,如果点击触发了一个AJAX调用,readystate就不会改变。您必须编写一个循环来检查元素是否存在,这显然带来了一组全新的计时问题!
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
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