#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-документ… хм, я добавил скриншот для вас, ребята, чтобы увидеть, что я пытаюсь сказать.