Долгий поиск элемента в html, C#, просьба помочь

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Добрый.
Есть вот такая структура сайта, что то похожее на таблицу, но не таблица, а все на динамических дивах.
1634120381926.png
Мне нужно найти циферку, она может быть в любом фиолетовом прямоугольнике
Структура
Есть большой блок, я его выделил красным, там лежит все что мне нужно.
В нем n-ое кол-во блоков, выделил синим
В каждом синем есть несколько столбцов их я выделил зеленым
В каждом зеленом столбце несколько строчек, они фиолетовые. и внутри фиолетовых строчек лежит спан с нужным мне текстом.

Проблема
Сделал кучу циклов, но ищется элемент очень долго от 2 до 5 сек, в зависимости от синих блоков.

Как я сделал.
Собрал в html коллекцию все синие блоки.
HtmlElementCollection outcome_container = instance.ActiveTab.FindElementsByAttribute("div", "class", "sip-MarketGroup", "regexp");
Дальше прохожу несколькими циклами по всему и ищу контейн моего числа...
C#:
for (int i=0; i<=outcome_container.Count(); i++){
        HtmlElement check_isvoid = outcome_container.GetByNumber(i).FindChildByAttribute();
        if (check_isvoid.IsVoid) continue;
        //пробегаемся по каждой колонке
        HtmlElementCollection number_col = outcome_container.GetByNumber(i).FindChildrenByAttribute();
        for (int j=0; j<=number_col.Count(); j++){
            HtmlElementCollection number_string = number_col.GetByNumber(j).FindChildrenByAttribute();
            for(int k=0; k<=number_string.Count(); k++){
                //сюда записываю что ищу
                if(number_string.GetByNumber(k).GetAttribute("innertext").Contains("1.25")){
                    project.SendInfoToLog("ok");
                    number_string.GetByNumber(k).RiseEvent("click","Full");
                    return "ok";
                }
            }
        }
Как можно оптимизировать мои циклы и находить значение быстрее?
кажется что просто должен искать в html, 1 раз все засовываю в коллекцию, но ищется все равно очень долго...
спасибо
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
Ссылку на сайт скиньте
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113
кажется что просто должен искать в html, 1 раз все засовываю в коллекцию, но ищется все равно очень долго...
Попробуйте составить xpath для нужного элемента, тогда не нужно будет перебирать все коллекцию.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Ну вот подсказали, так я же не знаю где нужный элемент, я потому и перебираю чтобы найти его... или я чет в xpath не понимаю?
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
Tab tab = instance.ActiveTab;
tab.FindElementByXPath("//*[@class='sip-MarketGroup ']//div[@class='gl-MarketGroup_Wrapper ']//div[starts-with(@class,'gl-Market gl-Market_General gl-Market_General-columnheader ')]//span[contains(.,'2.00')]",0).Click();
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Будем копать в этом направлении, работает сильно быстрее
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)