Получите данные из последней отфильтрованной строки в веб-таблице с помощью Selenium VBA

Я не очень разбираюсь в VBA и совершенно не знаком с Selenium для VBA. Я пытаюсь получить доступ к этому сайту https://www.tablefilter.com/0-configuration.html , на котором есть таблица с фильтрами, а затем фильтровать в соответствии с критериями конкретной страны. После этого я смогу перейти к последней строке, которая была отфильтрована для этой страны, в данном случае это «Россия», чтобы скопировать год в ячейку Excel B1. Я не знаю, как сделать это последнее и более, учитывая, что этот случай возвращает три строки для 1998, 1999 и 2000 годов, но в случае «Словацкой Республики» в результате есть только одна строка и, например, «Зимбабве "имеет семь строк. В любом случае мне нужно иметь возможность получить для любой страны год последней строки этой таблицы или единственной записи, понимая, что это динамические записи. Заранее большое спасибо.

Это мой код до сих пор

Sub Filtros()

Dim bot As New WebDriver
''Dim Sbutton As Selenium.WebElement
''Dim lista As Selenium.SelectElement
Dim Keys As New Selenium.Keys
        
bot.Start "chrome"
bot.Get "https://www.tablefilter.com/0-configuration.html"

''Application.Wait (Now + TimeValue("00:00:02"))
bot.FindElementById("flt0_demo").SendKeys "Russia"
bot.FindElementById("flt0_demo").SendKeys Keys.Enter

Stop

End Sub

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать список выбора css для фильтрации видимых строк после фильтрации таблицы. Затем вам нужно будет взять последний webElement в сопоставленной коллекции webElements, установить в переменной, используя .Count.

Dim elems As WebElements, last As WebElement

Set elems = bot.FindElementsByCss("#demo tbody > tr:not([style]) > td:nth-child(3)")

Set last = elems.item(elems.Count)

Debug.Print last.Text

Фильтрация таблицы добавляет атрибут style со значением display: none; к строкам, которые не будут отображаться в таблице. Исключение строк в теле таблицы, имеющих атрибут style, tbody > tr:not([style]), позволяет сопоставить только видимые строки. Затем выберите для 3-го столбца (год) > td:nth-child(3) и возьмите последний.

enter image description here


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

bot.findElementsByCss("#demo tbody > tr[style]").count > 0

Выход в зависимости от того, что наступит раньше.

Или используйте встроенный механизм тайм-аута и попытайтесь сопоставить скрытую строку (что будет означать, что фильтрация произошла по крайней мере для одной строки):

Dim hiddenRow As WebElement

Set hiddenRow = bot.FindElementByCss("#demo tbody > tr[style]", timeout:=<enter timeout>, Raise:=False)

If hiddenRow Is Nothing Then Exit Sub

Спасибо @QHarr. Это сработало!!!

Diego Solano 22.04.2022 23:35

Другие вопросы по теме