Интегрировать CSS селектор

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Здравствуйте уважаемая администрация!

Время от времени стыкаюсь с проблемой длительного поиска элемента на странице и/или с тем что его затруднительно искать в DOM дереве. Например чтобы найти вложеный в "div" с классом "wraper" элемент "span" с текстом "ZZ" и в нем вложенный элемент "b" надо:
1) найти "$els = $tab->FindElementsByAttribute("div", "class", "wraper", "text");";
2) перебрать все найденые div'ы в поисках тех кто содержит нужные span'ы:
for($i = 0; $i < $els->Count; $i++) {
$buffer = $els->GetByNumber($i)->FindChildrenByAttribute("span", "InnerText", "ZZ", "text");
$els2 = $els2->Add($buffer);
}
3) И потом еще раз повторить пункт 2, но уже в поисках элемента "b"

В то же время в CSS селекторе это выглядит так: "div.wraper span:contains('ZZ') b". Стоит отметить что CSS селектор очень быстрый, как по мне в разы быстрее существующих методов. И (это мои размышления, поскольку полноценным програмистом я себя не считаю) CSS селектор должен возвращать объект на подобии HtmlElement или колекции таких объектов.

Благодарю за внимание! С уважением, Олег.
 

freeman

Client
Регистрация
31.07.2010
Сообщения
130
Благодарностей
138
Баллы
43
Для этого существуют xpath выражения, они гораздо мощнее. Будет примерно так для примера выше
Код:
//div[@class='wraper']/span[text()='ZZ']/b
 
  • Спасибо
Реакции: Adamastor

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Для этого существуют xpath выражения, они гораздо мощнее. Будет примерно так для примера выше
Код:
//div[@class='wraper']/span[text()='ZZ']/b
Спасибо что просветили. Я почему-то считал что xpath это прямой путь к элементу (полный путь).
 

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