#html #vba #web-scraping #drop-down-menu
#HTML #vba #очистка веб-страниц #выпадающее меню
Вопрос:
Я создаю код для загрузки информации с веб-сайта. Моя проблема заключается в доступе к Href в выпадающем списке с помощью подменю. Я перепробовал много кодов, но любой из них работает.
Ссылки с getElementById или getElementsByClassName не работали, потому что функции focus , click, selecteditems =»1″ не поддерживаются этими объектами. Особенность выпадающего меню в том, что оно управляется сначала щелчком мыши, а затем фокусировкой. После первого щелчка по трем точкам отображается уникальная опция с именем Export, а при приближении к ней отображаются еще три опции. Мне нужен последний с именем «Загрузка связанных вычетов». Это код конкретного тега.
<a title="Download associated deductions" class="ajax" href="exportPaymentLineItems.lvp?requestUID=amp;amp;reportType=xlsamp;amp;reportName=Payments and associated deductionsamp;amp;ajax=trueamp;amp;isDrillable=" target="_blank">
<span class="prgx-icon excel-icon"></span> Download associated deductions
</a>
Это код, который у меня есть в VBA
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
'...
IE.Document.getElementsByClassName("ajax").Click
Предыдущий в HTML-коде, первый щелчок, чтобы открыть выпадающее меню
<a class="btn btn-dots-vertical" id="dLabel" role="button" aria-expanded="true" href="#" data-toggle="dropdown" data-target="#">
</a>
<ul class="dropdown-menu multi-level dropdown-menu-right" role="menu" aria-labelledby="dropdownMenu">
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Export</a>
<ul class="dropdown-menu dropdown-menuright">
<li><a title="Excel" href="supplierReport.lvp?requestUID=amp;amp;reportType=xlsamp;amp;reportName=BasicClaimsPaymentReport" target="_blank"><span class="prgx-icon excel-icon"></span>Excel</a></li>
<li><a title="CSV" href="supplierReport.lvp?requestUID=amp;amp;reportType=csvamp;amp;reportName=BasicClaimsPaymentReport" target="_blank"><span class="prgx-icon csv-icon"></span>CSV</a></li>
<li><a title="PDF" href="supplierReport.lvp?requestUID=amp;amp;reportType=pdfamp;amp;reportName=BasicClaimsPaymentReport" target="_blank"><span class="prgx-icon pdf-icon"></span>PDF</a></li>
'The one I need to click, download or copy to open in another explorer tab
<li>
<a title="Download associated deductions" class="ajax" href="exportPaymentLineItems.lvp?requestUID=amp;amp;reportType=xlsamp;amp;reportName=Payments and associated deductionsamp;amp;ajax=trueamp;amp;isDrillable=" target="_blank">
<span class="prgx-icon excel-icon"></span> Download associated deductions
</a>
</li>
</ul>
</li>
</ul>
Чтобы загрузить документ, я ожидаю щелкнуть нужный класс, скопировать ссылку и вставить в новую вкладку проводника или просто инициировать загрузку с помощью сектора запроса.
Ответ №1:
Попробуйте использовать селектор атрибутов
ie.document.querySelector("[title=Excel]").click
ie.document.querySelector("[title='Download associated deductions']").click
Ваша строка:
IE.Document.getElementsByClassName("ajax").Click
не будет работать хотя бы потому, что этот метод возвращает коллекцию. Вам понадобится индекс, например
IE.Document.getElementsByClassName("ajax")(0).Click
querySelector возвращает один узел. Первое совпадение для селектора css, переданного ему между «»
Комментарии:
1. Спасибо. Он по-прежнему не работает из-за ошибки времени выполнения ‘424’ (требуется объект). Знаете ли вы, к какому объекту он относится?
2. Второй код … («ajax») (0).Click выдает ошибку времени выполнения ’91’ (переменная объекта или переменная блока не задана).
3. Он ссылается на объект в строке, отмеченной ошибкой. Обычно 1 из 3 вещей. 1) Время — попробуйте добавить приложение. Подождите сейчас TimeSerial(0,0,3) перед этой строкой 2) путь указан неверно — проверьте элемент не внутри родительского фрейма или iframe 3) элемент не существует — проверьте html
4. Я проверяю, что это iframe. Что я могу сделать?
5. Он находится внутри iframe? Можете ли вы включить html для iframe и вашего элемента внутри него?