Как задействовать все найденые элементы по условию

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Здравствуйте, как можно задействовать все подходящие по условию элементы на странице через это поле:


Пробовал:
  • -1 - Выполнение действия HtmlElement Не найден HTML элемент, по условиям поиска.
  • * - уходит в запой, приходится перезагружать.
  • .* - уходит в запой, приходится перезагружать.
  • all - Выполнение действия HtmlElement Не найден HTML элемент, по условиям поиска.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Не актуально, написал на c#.
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
C#:
Tab tab = instance.ActiveTab;
for(int i = 0; true; i++){
    HtmlElement he = tab.FindElementByXPath("//ul[@class='Mr508']", i);
    if (he.IsVoid){
        return 1;
    }
    he.SetAttribute("innerhtml", "");
}
 
  • Спасибо
Реакции: Roman48

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 980
Благодарностей
4 433
Баллы
113
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}

Здравствуйте, как можно задействовать все подходящие по условию элементы на странице через это поле:
Нужно работать через HtmlCollection (tab.FindElementsByAtribute("div", "class", "regexp", "Mr508")) и потом в цикле перебирать все элементы коллекции.
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}


Нужно работать через HtmlCollection (tab.FindElementsByAtribute("div", "class", "regexp", "Mr508")) и потом в цикле перебирать все элементы коллекции.
Главное что он работает)
Я этот код упростил для публики. Для моих обстоятельств твой код не поможет. Я со второго захода перебор веду не с 0 элемента.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}
ну получается из for сделал while :-) а выход из цикла происходит по исключению, когда счетчик выходит за пределы диапазона элементов.
 
  • Спасибо
Реакции: Alexmd

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 980
Благодарностей
4 433
Баллы
113
Главное что он работает)
Я не в плане критики, просто никогда такой конструкции цикла не встречал.
Ты это сам придумал или скопировал откуда-то?
Для моих обстоятельств твой код не поможет.
Конечно поможет. Веди счетчик с нужного значения.
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28

backoff

Client
Регистрация
20.04.2015
Сообщения
6 054
Благодарностей
6 482
Баллы
113
объясните для тех кто не шашрит в шарпе, че тут происходит?
на примере желательно
 

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
  • Спасибо
Реакции: orka13

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
while(true){} , только через одно место
У while четка задача выполнить хотя бы один раз. Для моей задачи, пришлось бы все также создавать коунтер. Не знаю, чего вы все топите за while, ведь WHILE - это 5 букв, а FOR - всего 3)
Ну мне легче было объявить переменную счета i, т.к. она равнялась не 0, а другой переменной.
 
Последнее редактирование:

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
объясните для тех кто не шашрит в шарпе, че тут происходит?
на примере желательно
Да мы тут смотрим на яйцо с разных ракурсов)
p.s. я кстати тоже в шарпе не силен, больше в php.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 054
Благодарностей
6 482
Баллы
113
Да мы тут смотрим на яйцо с разных ракурсов)
p.s. я кстати тоже в шарпе не силен, больше в php.
просто пользуюсь только xpath еще ни разу не подводил, просто саму задачу в первом посте не понял что требуется...
всегда через xpath можно решить
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
C#:
Tab tab = instance.ActiveTab;
for(int i = 0; true; i++){
    HtmlElement he = tab.FindElementByXPath("//ul[@class='Mr508']", i);
    if (he.IsVoid){
        return 1;
    }
    he.SetAttribute("innerhtml", "");
}
Не смог пройти мимо. Я тоже люблю копипастить непонятный код, городить из него костыли и рад, когда заработает. Но здесь надо сразу в посте писать: «код не для примера, ищите решение получше». А то новички потом размножат его у себя в проектах.
Так как тут действительно цикл «через одно место». Но к тому же правильнее будет через коллекцию работать, и уже в ней перебирать элементы. например, вот так:
C#:
Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
// find elements by XPath
HtmlElementCollection heCol = tab.FindElementsByXPath("//ul[@class='Mr508']");
// if collection is invalid
if ((heCol.IsVoid) || (heCol.ErrorDetected)) return -1;
HtmlElement he = null;
for (int i = 0; i < heCol.Count; i++) {
    he = heCol.Elements[i];
    he.SetAttribute("innerhtml", "");
}
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Ну почему вы пишите только когда все уже сделано.
Ладно, буду сперва нелепость писать, чтобы разжечь ажиотаж)))
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

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