Остановите загрузку IE, когда появятся необходимые данные - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь остановить 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

1 Ответ

0 голосов
/ 02 июля 2018

После обучения в течение нескольких часов мне удалось решить проблему с помощью дополнительной функции, в которой я ссылаюсь на нее по имени и использую 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...