VBA как взаимодействовать с 2 HTML-документами на одном веб-сайте?

#html #excel #vba #web

#HTML #excel #vba #веб

Вопрос:

Вот основной URLОсновной HTML-документURL-адрес кнопки, которую я пытаюсь найти2-й HTML-документ, который я пытаюсь обработать

То, что я пытаюсь сделать, это получить дескриптор кнопки, которую я пытаюсь нажать. однако есть два URL-адреса: 1-й — основной URL-адрес, который находится в окне, а 2-й — URL-адрес внутри окна (при щелчке правой кнопкой мыши> Свойства кнопки URL-адрес отличается от основного окна). Также это другой или 2-й HTML-документ (примечание: нет iframe / frame.)

только 2-й URL-адрес, то есть я не могу получить дескриптор, чтобы управлять его элементами.

Я уже пробовал некоторые коды ниже, чтобы получить все дескрипторы.

     ConnectURL "Secondary URL"
    GetTheWindowHandle "IEFrame", "Secondary URL - Internet Explorer", hwndp
    SetForegroundWindow hwndp

    Sub ConnectURL(strURL As String)
    On Error Resume Next
    Set sws = New SHDocVw.ShellWindows       
    jar = sws.Count - 1
    If jar < 0 Then
        MsgBox "There's no active IE or window Explorer", vbInformation, "Pop-out"
        Set sws = Nothing
        Exit Sub
    End If
    n = 0
    Do Until (n > 5000)
        If (Left(sws.Item(n).LocationURL, Len(strURL)) = strURL) Then
            If err.Number = 0 Then
                Exit Do 
            End If
            err.Clear
        End If

        n = n   1
    Loop
    Set ieDoc = sws.Item(n).document
    sws.Item(n).Visible = True
    Set ieLoad = sws.Item(n)
    End Sub

    Function GetTheWindowHandle(C`enter code here`lassName As String, toSearch As String, handle As Long)

    'Get Handle of window
        tempHandle = 0
        tempHandle = FindWindowEx(0, tempHandle, ClassName, vbNullString)

        Do While tempHandle <> 0 'while handle is not seen

            GetNameOfWindowByHandle tempHandle

                If InStr(1, TextResult, toSearch) > 0 Then 'Check if Window title is similar
                    handle = tempHandle 'capture handle
                    Exit Do
                End If

            tempHandle = FindWindowEx(0, tempHandle, ClassName, vbNullString)

        Loop
    End Function

    Function GetNameOfWindowByHandle(myHwnd As Long)
    'capture the title of the window
        Dim sbuffer As Long
        Dim lresult As String

        sbuffer = SendMessage(myHwnd, WM_GETTEXTLENGTH, 0, vbNullString)
        sbuffer = sbuffer   1
        TextResult = Space$(sbuffer)
        lresult = SendMessage(myHwnd, WM_GETTEXT, sbuffer, ByVal TextResult)

    End Function

    Example below
    <div class="slit-item-active" id="reportsTab" onclick="openReportExplorer();"><div class="nav-icon3"></div><span id="reportsTabText">Reports</span></div>

    this html code is on the button with the 2nd URL that I'm trying to get it's handle so i can use my code:

    iedoc.getelementbyid("reportsTab").click

    or

            waiting = 0
            Do While waiting = 0
                For Each obj1 In ieDoc.getElementById("reportsTab").getElementsByTagName("span")
                Debug.Print obj1.innerText
                    If Trim(obj1.innerText) = "Reports" Then
                        obj1.Click
                        ieLoading 2000
                        waiting = 1
                        Exit For
                    End If
                Next
            Loop
  

Комментарии:

1. почему вы не можете автоматизировать открытие браузера с первым URL-адресом, извлечь второй URL-адрес с этой страницы и перейти к .Navigate2? Я предполагаю, что это не общедоступный URL?

2. Я добавил скриншот для 2 HTML-документов, которые я пытаюсь сказать, и я не могу открыть его на другой вкладке, потому что это приведет к появлению страницы с ошибкой.

3. Вы говорите, что появляется это окно, и вам нужно нажать кнопку ok?

4. нет, сэр, не всплывающее окно, когда я нажимаю кнопку отчетов, которая находится на нем, появится другое меню, содержащее отчеты, и когда вы нажмете одну из ссылок, тогда тело изменится в зависимости от этого и даст результаты. проблема в том, что я не смог получить 2-й HTML-документ, чтобы я мог управлять этой кнопкой отчетов на 3-м изображении, которое я опубликовал.

Ответ №1:

Событие щелчка не применяется к этому элементу / тегу Div. Вместо этого вам нужно запустить событие onclick.

iedoc.getelementbyid("reportsTab").FireEvent "onclick"

Комментарии:

1. Привет, Рикардо, я мог бы это сделать, если мой iedoc читает HTML-документ, в котором указан этот идентификатор элемента. но мой iedoc считывает 1-й HTML-документ… хм, я добавил скриншот для вас, ребята, чтобы увидеть, что я пытаюсь сказать.