HtmlElementCollection

AleksandrYolo

Client
Регистрация
06.04.2016
Сообщения
21
Реакции
4
Баллы
3
Похоже я переработал сегодня, стандартная процедура до этого не вызывала проблем.

Делаю коллекцию девушек по xpath и запускаю цикл по ним, получаю 10 Тань

HTML:
Развернуть Свернуть Копировать
<article><h4>Татьяна77</h4></article>
<article><h4>Алена88</h4></article>
и тд до 10

Код:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
string post_xpath = "//article";

HtmlElementCollection posts = tab.FindElementsByXPath(post_xpath);

   foreach (HtmlElement post in posts.Elements)
   {      
    project.SendInfoToLog(post.FindChildByXPath("//h4", 0).InnerText);
   }
tanyas.jpg

А мне нужны ВСЕ понятное дело.
 
"//h4" на ".//h4" попробуй заменить
Спасибо, работает, но не могу понять откуда там данные первой девушки? Как они вообще могут быть доступны во всех итерациях цикла по коллекции?
 
Разве это важно?)
Конечно! Я же спать не смогу) Я то думал что у меня в каждой комнате по 1 девушке, и полная изоляция, а они оказывается доступные и ходить могут друг к другу...
 
  • Оценить
Реакции: SergSh
не могу понять откуда там данные первой девушки?
// - ищет с начала страницы, в данном случае это происходит в каждой итерации foreach
. - относительно контекстного элемента

Это особенность JS и исходит из него.
 
Последнее редактирование:
  • Оценить
Реакции: AleksandrYolo и Drom
Это особенность JS и исходит из него.

На JS всё было бы проще :-)
Добавляет в массив только те <h4>, которые находятся внутри <article> и выводит в консоль их innerHTML

Код:
Развернуть Свернуть Копировать
var posts = document.querySelectorAll('article > h4');
for(var key of posts) console.log(key.innerHTML);
 
  • Оценить
Реакции: AleksandrYolo
На JS всё было бы проще :-)
Так в зенке аналогично https://help.zennolab.com/en/v5/zennoposter/5.27.0.0/webframe.html#topic542.html
Код:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
string post_xpath = "//article";

HtmlElementCollection posts = tab.FindElementsByXPath(post_xpath);

   foreach (HtmlElement post in posts.Elements)
   {     
    project.SendInfoToLog(post.FindChildByXPath("//h4", 0).InnerText);
   }
Вообще, советую сначала получить корневой элемент и от него искать.
 
Последнее редактирование:
  • Оценить
Реакции: AleksandrYolo и Drom
// - ищет с начала страницы, в данном случае это происходит в каждой итерации foreach
Вообще, советую сначала получить корневой элемент и от него искать.
Но как это может происходить в каждой итерации если я формирую коллекцию из всех артиклов (корневых элементов от h4)? Селектор post.FindChildByXPath("//h4", 0) не должен знать ничего о других элементах т.к HtmlElement post содержать в себе должен только 1 объект <article><h4>имя</h4></article>
Видимо я что-то не улавливаю. Как сформировать коллекцию так, чтобы в каждом ее элементе было только <article><h4>имя</h4></article>, и селектор post.FindChildByXPath("//h4", 0) не имел доступа к другим и выполнял то, что от него требуется?
формирование коллекции через .//article не помогает. post.FindChildByXPath снова получает доступ к другим элементам
 
Последнее редактирование:
Но как это может происходить в каждой итерации если я формирую коллекцию из всех артиклов (корневых элементов от h4)? Селектор post.FindChildByXPath("//h4", 0) не должен знать ничего о других элементах т.к HtmlElement post содержать в себе должен только 1 объект <article><h4>имя</h4></article>
Видимо я что-то не улавливаю. Как сформировать коллекцию так, чтобы в каждом ее элементе было только <article><h4>имя</h4></article>, и селектор post.FindChildByXPath("//h4", 0) не имел доступа к другим и выполнял то, что от него требуется?
формирование коллекции через .//article не помогает. post.FindChildByXPath снова получает доступ к другим элементам
точку перед путями нужно ставить в дочернем элементе
 
  • Оценить
Реакции: AleksandrYolo
Селектор post.FindChildByXPath("//h4", 0) не должен знать ничего о других элементах
Меня тоже поначалу это удивило + подобная тема уже поднималась, но так работает document.evaluate.

Суть в том, что полученная нода - это ссылка на объект, что позволяет получить его соседей, родителя и т.д.,
с куском - это невозможно, xPath бы был убог.
 
Последнее редактирование:
  • Оценить
Реакции: AleksandrYolo

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