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

  • Автор темы Автор темы arbplv
  • Дата начала Дата начала

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 раз все засовываю в коллекцию, но ищется все равно очень долго...
спасибо
 
Ссылку на сайт скиньте
 
кажется что просто должен искать в html, 1 раз все засовываю в коллекцию, но ищется все равно очень долго...
Попробуйте составить xpath для нужного элемента, тогда не нужно будет перебирать все коллекцию.
 
Ну вот подсказали, так я же не знаю где нужный элемент, я потому и перебираю чтобы найти его... или я чет в xpath не понимаю?
 
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
Будем копать в этом направлении, работает сильно быстрее
 

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