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

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

infosimple

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


Пробовал:
  • -1 - Выполнение действия HtmlElement Не найден HTML элемент, по условиям поиска.
  • * - уходит в запой, приходится перезагружать.
  • .* - уходит в запой, приходится перезагружать.
  • all - Выполнение действия HtmlElement Не найден HTML элемент, по условиям поиска.
 
Не актуально, написал на c#.
 
  • Оценить
Реакции: Roman48
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
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}

Здравствуйте, как можно задействовать все подходящие по условию элементы на странице через это поле:
Нужно работать через HtmlCollection (tab.FindElementsByAtribute("div", "class", "regexp", "Mr508")) и потом в цикле перебирать все элементы коллекции.
 
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}


Нужно работать через HtmlCollection (tab.FindElementsByAtribute("div", "class", "regexp", "Mr508")) и потом в цикле перебирать все элементы коллекции.
Главное что он работает)
Я этот код упростил для публики. Для моих обстоятельств твой код не поможет. Я со второго захода перебор веду не с 0 элемента.
 
Кто-то может прокомментировать как этот ад работает?
for(int i = 0; true; i++){}
ну получается из for сделал while :) а выход из цикла происходит по исключению, когда счетчик выходит за пределы диапазона элементов.
 
  • Оценить
Реакции: Alexmd
Главное что он работает)
Я не в плане критики, просто никогда такой конструкции цикла не встречал.
Ты это сам придумал или скопировал откуда-то?
Для моих обстоятельств твой код не поможет.
Конечно поможет. Веди счетчик с нужного значения.
 
while(true){} , только через одно место
У while четка задача выполнить хотя бы один раз. Для моей задачи, пришлось бы все также создавать коунтер. Не знаю, чего вы все топите за while, ведь WHILE - это 5 букв, а FOR - всего 3)
Ну мне легче было объявить переменную счета i, т.к. она равнялась не 0, а другой переменной.
 
Последнее редактирование:
объясните для тех кто не шашрит в шарпе, че тут происходит?
на примере желательно
Да мы тут смотрим на яйцо с разных ракурсов)
p.s. я кстати тоже в шарпе не силен, больше в php.
 
Да мы тут смотрим на яйцо с разных ракурсов)
p.s. я кстати тоже в шарпе не силен, больше в php.
просто пользуюсь только xpath еще ни разу не подводил, просто саму задачу в первом посте не понял что требуется...
всегда через xpath можно решить
 
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", "");
}
 
Ну почему вы пишите только когда все уже сделано.
Ладно, буду сперва нелепость писать, чтобы разжечь ажиотаж)))
 

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