Как настроить таргетинг на определенный элемент в Internet Explorer с помощью Access VBA

Прежде всего, пожалуйста, прости меня за ошибки в публикации - это мой первый раз (хотя я частый посетитель!

Я работаю над программой для повышения производительности в моей рабочей группе. Я пытаюсь связать базу данных Access с внутренним веб-приложением (на основе Pega), которое очень сложно. К сожалению, мои знания по кодированию очень просты, и у меня нет доступного финансирования или пропускной способности для получения официальной помощи. Хотя я хотел бы использовать надстройки, я не могу, поскольку моя компания не допустит этого (я просил, просил, умолял и т. Д.).

Вот так выглядит страница программы. Сначала нужно щелкнуть вкладку «Диспетчер работ» (WMT), заблокированную в ЗЕЛЕНОМ, а затем нажать кнопку «Получить следующий» (СПП), заблокированную в КРАСНОМ. Шаги, я думаю, должны произойти

  1. Привязать правильный сеанс окна IE
  2. Нажмите на WMT
  3. Нажмите на СПП

Я смог использовать Access для привязки правильного окна и вкладки IE (спасибо человеку, который предоставил основной код для этого!), Но пока не смог расшифровать, как нацелить правильный элемент на страницу. Насколько мне известно, структура именования - это слишком много.

Это скриншот HTML для WMT (он не скопирует его, по крайней мере, разборчиво, даже после очистки). Я хотел бы иметь возможность использовать идентификатор для конкретного элемента, однако он динамический и меняется с каждым взаимодействием, поэтому я пытался нацеливаться на статические элементы, выделенные зеленым цветом.

Тем не менее, я не проделал большую работу со вторым фрагментом. Это скриншот для этого, с желтой кнопкой, если кто-то тоже хочет помочь.

Спасибо!

КОД ДЛЯ ПОДКЛЮЧЕНИЯ ОКНА (пока работает!)

Sub C360WindowFind()
marker = 0
Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next
    my_url = objShell.Windows(x).document.Location
    my_title = objShell.Windows(x).document.Title

    If my_title Like "Coverage User" & "*" Then
        Set C360Window = objShell.Windows(x)
        marker = 1
        Exit For
    Else
    End If
Next

If marker = 0 Then
MsgBox ("C360 window is not found. Please ensure C360 is open in Internet Explorer and try again")
Else
    'DO THE OTHER THINGS
End If
End Sub

КОД, КОТОРЫЙ Я ПОПЫТАЛ ДЛЯ ЦЕЛЕВОЙ ПРАВИЛЬНОЙ вкладки (добавьте вместо «ДЕЛАТЬ ДРУГИЕ ВЕЩИ» в предыдущем наборе кодов)

FIRST TRY (делает некоторые сумасшедшие вещи, которые заканчиваются тем, что программа выходит из системы)

FindWorkManager1()
Dim C360doc As HTMLDocument
Dim Element
Dim ULTabName As String
Dim LIElement As String
Dim WMT_HREF As String
ULTabName = "yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList"
ULElement = "getElementsByClassName"
LIElement = "getElementbyID"
WMT_HREF = "getElementsByTagName"

Set C360doc = C360Window.document
With C360doc.all
If element = ULElement("ULTabName").LIElement("Work Manager").innerText.WMT_HREF("a")(0) Then
element.Click
Else
MsgBox ("Please ensure Work Manager is open, then try again")
End If
End With
End Sub

ВТОРАЯ ПОПРОБОВАТЬ: получает на линии со звездами и выходит (попробовал пару вариантов этого с теми же результатами)

FindWorkManager2()
Dim C360doc As HTMLDocument
Set C360doc = C360Window.document
    TabTagCounter = 0
    TabItemCounter = 0
    With C360doc.all
        Set Header = C360doc.getElementsByClassName("yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList")
'Find the correct TabTag within Header
        For Each TabTag In Header
            If TabTag.tagName Like "UL" Then
            TabTagCounter = 1
'If we've identified the correct TabTag, then look at the TabItem
'*************Not currently working beyond this point :(
        If TabTagCounter = 1 Then
            For Each TabItem In TabTag
                If TabItem.innerText Like "*Work Manager*" Then
                TabItemCounter = 1
                End If
        MsgBox ("try again")
        Next
            Else
            End If
End If
Next
End With
End Sub

Всего 1 ответ


Я думаю, что вы должны попытаться нажать на тег <a> как это ссылка, #Tab2 к #Tab2 . Если yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList является единственным классом yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList , вы можете сначала найти ul с этим именем класса, а затем найти li и a с именем тега.

Поскольку настоящая ссылка недоступна, я создаю тестовую страницу, как показано ниже:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div class="tStrCntr">
        <ul class="yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList">
            <li tabindex="-1"></li>
            <li tabindex="0" title="Work Manager" id="Tab2">
                <a tabindex="-1" id="TABANCHOR" href="https://www.google.com">
                    <span style="display: inline-block">
                        <label>Work Manager</label>
                    </span>
                </a>
            </li>
        </ul>
    </div>
</body>
</html>

И код VB, чтобы щелкнуть Диспетчер работ на тестовой странице, как показано ниже, вы можете пройти тест:

Sub LOADIE()
    Set ieA = CreateObject("InternetExplorer.Application")
    ieA.Visible = True
    ieA.navigate "http://the test web page"
    Do Until ieA.readyState = 4
       DoEvents
    Loop

    Set doc = ieA.Document
    Set link = doc.getElementsByClassName("yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList")(0).getElementsByTagName("li").Item(1).getElementsByTagName("a").Item(0)
    link.Click

End Sub

Есть идеи?

10000