Фон:
Для проекта я пытаюсь контролировать страницу и ее элементы. Я очень плохо знаком с управлением веб-страницами через VBA, но мне удалось использовать учетные данные для входа в систему, щелкнуть некоторые промежуточные windows и элементы управления, чтобы, наконец, попасть на главную страницу, представляющую интерес: Ultimo. К сожалению, я не могу поделиться URL-адресом и учетными данными для входа, поэтому я извиняюсь за то, что вставил только HTML
и большой скриншот.
Проблема:
После входа в систему и перехода в это меню c я застрял в том, что выглядит как мультитабельный фрейм. Ниже HTML
, через который я прошел .document.body.innerHTML
<div class="c-viewport c-container c-component" id="viewport">
<div class="c-maincontainer c-container c-component l-vbox" id="maincontainer">
<div class="maintoolbar c-maintoolbar c-toolbar c-container c-component l-hbox" id="maintoolbar" style="height: 50px; line-height: 50px;">
<div class="mainmenuicon c-container c-component l-flow" id="container14" style="width: 32px;"><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-menu1" id="button17" type="button"></button></div>
<div class="logo clickable c-container c-component l-flow" id="container20"><img title="Logo" class="c-image c-component" id="image23" src="ultimo.framework.web/assets/images/system/ultimo-logo-small.png"></div>
<div class="history c-history c-toolbar c-container c-component l-hbox" id="history" style="height: 50px; line-height: 50px;">
<button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-history-previous" id="button28" type="button"></button><button tabindex="-1" disabled="" class="c-button c-component c-button-appearance-icon c-button-large icon icon-history-next" id="button31" type="button"></button>
<div class="c-menubutton c-container c-component l-flow" id="menubutton34"><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-arrow-dropdown" id="button37" style="height: 100%;" type="button"></button></div>
</div>
<span class="c-separator c-component" id="separator64"></span><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-home" id="button67" type="button"></button><span class="c-template c-component l-template" id="header"><span class="breadcrumbs"><span class="icon icon-breadcrumb-item-separator"></span><span>Decompositie per niveau</span><span class="icon icon-breadcrumb-item-separator"></span><span>Objecten</span></span>
</span>
<div class="c-fill c-component" id="fill72" style="flex:1 1 1px;"></div>
<div class="c-menubutton c-container c-component l-flow" id="settingsMenu"><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-gear" id="button77" style="height: 100%;" type="button"></button></div>
<div class="c-menubutton c-container c-component l-flow" id="recordPackage" style="display: none;"></div>
<button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-search" id="search" type="button"></button>
<div class="c-menubutton c-container c-component l-flow" id="menuhelp"><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-help" id="button156" style="height: 100%;" type="button"></button></div>
<button tabindex="-1" class="c-badgebutton c-button c-component c-badgebutton-appearance-icon c-badgebutton-large icon icon-notification" id="notifications" type="button"></button><span class="c-separator c-component" id="separator199" style="display: none;"></span><span class="c-template c-component l-template" id="template202" style="display: none;"><span class="dtap dtap-production">Production</span>
</span><span class="c-separator c-component" id="separator205"></span><span class="welcome literal c-literal c-component" id="literal208">here was my username</span><span class="c-separator c-component" id="separator211"></span><button tabindex="-1" class="c-button c-component c-button-appearance-icon c-button-large icon icon-logout" id="button214" type="button"></button>
</div>
<div class="c-container c-component l-hbox" id="container217" style="left: 0px; top: 50px; right: 0px; bottom: 0px; position: absolute;">
<div class="c-mainmenubar c-container c-component l-flow" id="mainmenubar224" style="display: none;">
<div title="Mijn Ultimo" class="item" data-index="0"><i class="app-icon-user"></i></div>
<div title="Werkprocessen" class="item" data-index="1"><i class="app-icon-infra"></i></div>
<div title="Beheer en onderhoud" class="item" data-index="2"><i class="app-icon-selfservice-requestrebuilding"></i></div>
<div title="Industriele automatisering" class="item" data-index="3"><i class="app-icon-processfunction-configuration"></i></div>
<div title="De balie registraties" class="item" data-index="4"><i class="app-icon-job-fleet"></i></div>
<div title="Verkenners" class="item" data-index="5"><i class="app-icon-module-explorers"></i></div>
<div title="Decompositie per niveau" class="item" data-index="6"><i class="app-icon-processfunction-object"></i></div>
<div title="Organisatie" class="item" data-index="7"><i class="app-icon-building"></i></div>
<div title="Contracten" class="item" data-index="8"><i class="app-icon-servicecontract-infra"></i></div>
<div title="Programmering" class="item" data-index="9"><i class="app-icon-cost"></i></div>
<div title="Arbeidsmiddelen" class="item" data-index="10"><i class="app-icon-inspection"></i></div>
<div title="Functioneelbeheer" class="item" data-index="11"><i class="app-icon-job-servicerequest"></i></div>
<div title="Geo-informatie" class="item" data-index="12"><i class="app-icon-address"></i></div>
<div title="Gebouw" class="item" data-index="13"><i class="app-icon-building-standard"></i></div>
<div title="Inkoop" class="item" data-index="14"><i class="app-icon-purchase"></i></div>
<div title="Magazijn" class="item" data-index="15"><i class="app-icon-warehouse-standard"></i></div>
<div title="HSE" class="item" data-index="16"><i class="app-icon-hse"></i></div>
<div title="FIT" class="item" data-index="17"><i class="app-icon-pmworkorder"></i></div>
<div title="Algemeen" class="item" data-index="18"><i class="app-icon-general"></i></div>
<div title="Stamgegevens" class="item" data-index="19"><i class="app-icon-basic"></i></div>
<div title="Statische overzichten " class="item" data-index="20"><i class="app-icon-report"></i></div>
<div title="Instellingen" class="item" data-index="21"><i class="app-icon-settings"></i></div>
<div title="TD" class="item" data-index="22"><i class="app-icon-technicalservice"></i></div>
</div>
<div tabindex="0" class="c-mainmenu c-menu c-treepanel c-panel c-container c-component l-vbox has-arrows" id="mainmenu">
<div class="c-panelheader c-toolbar c-container c-component l-hbox" id="panelheader229" style="display: none;"></div>
<div class="panelbody c-container c-component l-flow" id="container241">
<table class="treenode is-toplevel is-expanded is-hidden">
<tbody>
<tr title="">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"></td>
</tr>
</tbody>
</table>
<table class="treenode is-toplevel is-expanded">
<tbody>
<tr title="Decompositie per niveau">
<td class="line pad"><i class="app-icon-processfunction-object"></i></td>
<td class="line first"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner">Decompositie per niveau</td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Hoofdsysteem">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/24d7a953-c8a4-4b8a-cc91-28d551c8c033">Hoofdsysteem</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Systeem">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/052769b9-757c-4a3c-d7da-6cd2f20c389e">Systeem</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Systeemdeel">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/a129239c-58d2-4d9d-8a95-c543aff824f2">Systeemdeel</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Complexen">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/58ab5a6e-e1ad-41d2-a992-3ceab120644a">Complexen</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf is-selected is-highlight">
<tbody>
<tr title="Objecten">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/fefbf433-378d-4bd4-ad8d-e395c22100cf">Objecten</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Installaties">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/2fd711d4-f0d8-41aa-c3b8-96d204d756ee">Installaties</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Elementen">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/7aa389ad-73ce-4f1d-b7c1-fe67ce7e5907">Elementen</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Onderdelen">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/f88c0a48-c29a-4e14-96c4-feb20c9e12ba">Onderdelen</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Bouwdelen">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/8c24ae05-07a0-4446-a625-292dcb2359a1">Bouwdelen</a></td>
</tr>
</tbody>
</table>
<table class="treenode is-leaf">
<tbody>
<tr title="Componenten">
<td class="line pad"><i class="app-icon-"></i></td>
<td class="line first"></td>
<td class="line"></td>
<td class="line">
<div class="toggleimage"></div>
</td>
<td class="inner"><a tabindex="-1" href="main.aspx#screen/5663968c-ede6-4045-8d90-7274ed812cb6">Componenten</a></td>
</tr>
</tbody>
</table>
Это помогло мне перейти в левое меню к «Decomposit ie per niveau»> «Objecten», используя такой код:
For Each oHTML_Element In .document.getElementsByTagName("td")
If oHTML_Element.innerHTML = "Decompositie per niveau" Then oHTML_Element.Click
Next
For Each oHTML_Element In .document.getElementsByTagName("a")
If oHTML_Element.innerHTML = "Objecten" Then oHTML_Element.Click
Next
Принимая во внимание, что вышеизложенное успешно открывает проблемное c мультитабное представление, после осмотра элемента (выделенная вкладка) я больше не вижу / не распознаю HTML
. Глядя на код, я дал IsObject(.document.getElementById("IdInputTab"))
попытку, но это возвращение FALSE
. Я выделил то, что я думаю, что я должен ссылаться на скриншоте ниже. Когда выбрана правильная вкладка, «title» меняется на «clsTabPage is-selected». Есть еще одна вкладка (прямо под выделенной), которая затем скрыта и показывает пустой заголовок.
Вопрос:
Я попробовал несколько вещей, найденных одновременно:
- Здесь : Попытка изменить имя класса
- Здесь : Попытка использовать CSS селектор
Но безрезультатно. Там, где я мог следовать логике c нахождения других элементов по идентификатору / имени, я не понимаю, как «щелкнуть» на правильной вкладке (и ее элементах) в этом окне.
РЕДАКТИРОВАТЬ На основе комментариев:
Следующее (при добавлении к рабочим шагам выше), например, вернет ошибку 424 Требуемый объект:
Application.Wait Now() + TimeValue("00:00:30")
Range("C1").Value = .document.querySelector("[id='iframe258']").contentDocument.body.innerHTML
Или:
Debug.Print IsObject(.document.getElementsByTagName("iframe")(0).contentDocument.getElementById("IdInputTab"))
вернет False
Однако я получил HTML
внутренний текст через: .document.getElementsByTagName("iframe")(0).contentDocument.body.innerHTML
. Так как тело вопроса больше не поддерживает символы (и я хочу быть завершенным, насколько это возможно). Настоящим ссылка на файл блокнота.
Есть идеи?