【问题标题】:Stop IE from loading further when required data is there当需要的数据存在时,阻止 IE 进一步加载
【发布时间】:2018-07-03 01:12:51
【问题描述】:

当所需数据已经显示时,我会尝试停止 IE,否则即使我可以看到 .Visible=True 上的所有内容,它也会继续加载。

我想将某种变体 (SOMETHING) 传递给加载 sub 的网页,它会相应地测试 IHTMLElement

我意识到我无法预先定义 IHTMLElement 并在加载页面之前传递它。正在谷歌搜索,但找不到任何解决方案。目前这超出了我的知识范围,我想弄清楚如何做到这一点。

Private ie_browser As InternetExplorer

Private Sub Download_Test()

   Dim str_url As String
   str_url = "..."
   Set ie_browser = New InternetExplorer
   ie_browser.Visible = True

   'here I want pass that spec variant to the Sub
   Call Load_WebPage(str_url, SOMETHING)

End Sub

Private Sub Load_WebPage( _
   ByVal str_url As String, _
   ByVal SOMETHING _
   )

   Dim html_data_element As IHTMLElement
   Dim int_counter_sleep As Integer

   ie_browser.Navigate str_url
   For int_counter_sleep = 1 To 60     '60 x 500 = 30000 ms = 30 sec
      If ie_browser.Busy Or ie_browser.READYSTATE <> 4 Then

         'SOMETHING -> html_data_element
         'here I want to use that spec variant to define said IHTMLElement

         If Not html_data_element Is Nothing Then
            ie_browser.Stop
            Exit For
         End If

         Sleep 500
      Else
         Exit For
      End If
   Next int_counter_sleep

End Sub

【问题讨论】:

  • 请注意:Dim str_url, str_html_innertext As String 将定义 str_url As Variant,如果未指定类型,则默认为。您需要为每个变量Dim str_url As String, str_html_innertext As String指定一个类型
  • omg...谢谢提醒!
  • 如果网页源本身包含必要的数据,您可以选择XMLHTTP+HTMLDocument。看看here
  • 嗯,这对我来说是另一个层次,但我想我迟早要深入研究它。
  • 是否有一个 URL 可以证明您可以分享这个问题?

标签: html excel internet-explorer vba


【解决方案1】:

在学习了几个小时后,我设法通过一个附加函数解决了这个问题,我通过名称引用它并使用 Application.Run 执行它。

Private ie_browser As InternetExplorer

Private Sub Download_Test()
    Dim str_url As String
    str_url = "..."
    Set ie_browser = New InternetExplorer
    ie_browser.Visible = True
    Load_WebPage str_url, "Get_webpage_readiness"   'passing only the name of the function
End Sub

Private Sub Load_WebPage( _
    ByVal str_url As String, _
    Optional ByVal str_get_readiness_function_name As String _
    )
    Dim int_counter_sleep As Integer
    Dim bool_readiness As Boolean
    ie_browser.Navigate str_url
    For int_counter_sleep = 1 To 60
        If ie_browser.Busy Or ie_browser.READYSTATE <> 4 Then

            'Referencing the function by name
            If str_get_readiness_function_name <> vbNullString Then
                bool_readiness = Application.Run(str_get_readiness_function_name)
                If bool_readiness Then
                    ie_browser.Stop
                    Exit For
                End If
            End If

            Sleep 500
        Else
            Exit For
        End If
    Next int_counter_sleep
End Sub

Private Function Get_webpage_readiness() As Boolean
    Dim html_data_element As IHTMLElement
    On Error Resume Next    'skipping the error while the webpage hasn't loaded yet
    Get_webpage_readiness = False
    Set html_data_element = ie_browser.Document. ...
    If Not html_data_element Is Nothing Then
        Get_webpage_readiness = True
    End If
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多