Извлечение документа из href

#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 и вашего элемента внутри него?