Сайт, который я пытаюсь почистить, - https://hitbtc.com/market-overview/overview.
Я пытаюсь получить пары монет криптовалюты со страницы, открыв следующий html (и другой аналогичный html для других пар монет):
<div class="ReactVirtualized__Table__row ReactVirtualized__Row__odd ReactVirtualized__Table__row ReactVirtualized__Row__odd animation__redToWhite--2EMEW" role="row" style="height: 30px; left: 0px; position: absolute; top: 0px; width: 1202px; overflow: hidden; padding-right: 0px;">
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" style="flex: 0 1 200px; overflow: hidden;">
**<a href="/BTC-to-USDT" style="color: rgb(55, 71, 79); text-decoration: none;">BTC/USDT</a>**
</div>
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" style="flex: 0 1 200px; overflow: hidden;">
<div>
<div class="styles__imgUp--1O8Kn"></div>
1.92%
</div>
</div>
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" title="₮ 59 843 794" style="flex: 0 1 200px; overflow: hidden;">₮ 59 843 794</div>
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" title="₮ 6780.73" style="flex: 0 1 200px; overflow: hidden;">₮ 6780.73</div>
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" title="₮ 6486.82" style="flex: 0 1 200px; overflow: hidden;">₮ 6486.82</div>
<div class="ReactVirtualized__Table__rowColumn" role="gridcell" title="₮ 6833.25" style="flex: 0 1 220px; overflow: hidden;">₮ 6833.25</div>
</div>
Я хочу получить текст из первого тега, который должен дать мне «BTC / USDT». Я обнаружил, что с помощью Selenium's Driver.FindElements () я получу только первые 29 элементов (т.е. те, которые отображаются без прокрутки). Из-за этого я попытался реализовать цикл do-while для прокрутки вниз страницы, получения списков элементов и добавления их в основной список, пока ранее полученный список не совпадал с текущим списком (достигнута нижняя часть страницы). Вот мой код:
List<IWebElement> totalElemList = new List<IWebElement>();
List<IWebElement> elementList = new List<IWebElement>();
List<IWebElement> prevList = new List<IWebElement>();
do
{
prevList.Clear();
prevList.AddRange(elementList);
totalElemList.AddRange(prevList);
var infoList = RetryingFind(By.ClassName("ReactVirtualized__Table__row"));
foreach (var element in infoList)
{
elementList.Add(element.FindElement(By.TagName("a")));
}
Thread.Sleep(10000);
((IJavaScriptExecutor)Browser.Driver).ExecuteScript("arguments[0].scrollIntoView(true);", elementList[elementList.Count - 1]);
}
while (prevList != elementList);
Однако elementList по какой-то причине не заполняется какими-либо элементами. Я добавил Thread.Sleep (), пробуя разные времена ожидания до 10 секунд, но это не решило проблему. Затем происходит сбой строки ExecuteScript (), поскольку он пытается получить доступ к индексу -1 элемента elementList, так как его Count равен 0.
У меня возникают проблемы с пониманием того, почему я раньше мог заполнять список элементов хотя бы некоторыми элементами на странице, но когда я использую цикл do-while, я ничего не получаю. Какие-нибудь мысли?