Получение вложенных тегов <li>тоже ..... просто нужен прямой элемент <li> - PullRequest
0 голосов
/ 31 марта 2019

У меня есть структура страницы, где она содержит гиперссылки с различными уровнями вложенных элементов списка.Я пишу xpath только для второго вложенного элемента списка (уровень 2), но он также дает мне все элементы списка ниже уровня 2 (уровень 3 или ниже), который мне не нужен.Сейчас это очень расстраивает, потому что я пробовал разные xpaths и cssSelectors, каждый раз, когда он берет элементы списка уровня 3 вместе с уровнем 2.

Структура страницы выглядит примерно так:

<div>
     <ul class="menuBar_menu_lvl_0">
       <li class="item_lvl_1">
       <li class="item_lvl_1">
          <ul class="menu_lvl_1">
            <li class="item_lvl_2"></li>
            <li class="item_lvl_2"></li>
            <li class="item_lvl_2">
               <ul class="menu_lvl_2">
                 <li class="item_lvl_3"></li>
                 <li class="item_lvl_3"></li>
                 <li class="item_lvl_3"></li>
               </ul>
            </li>
          </ul>
       <li class="item_lvl_1">
       <li class="item_lvl_1">

xpath = //ul[@class="menuBar_menu_lvl_0"]//li[@class="item_lvl_1"]//ul[@class="menu_lvl_1"]//li[@class="item_lvl_2"]

Это также дает мне элементы 3-го предмета наряду с 2-м уровнем предмета. Я хочу получить каждый предмет уровня правильно и отдельно.Чья-либо помощь будет высоко ценится

1 Ответ

0 голосов
/ 31 марта 2019

Добро пожаловать на SO.Вот образец, который использовал.

<html>
  <body>
  <div>
     <ul class="menuBar_menu_lvl_0">
       <li class="item_lvl_1">
       <li class="item_lvl_1">
          <ul class="menu_lvl_1">
            <li class="item_lvl_2">Level1-li1</li>
            <li class="item_lvl_2">Level1-li2</li>
            <li class="item_lvl_2">
               <ul class="menu_lvl_2">
                 <li class="item_lvl_3">Level2-li1</li>
                 <li class="item_lvl_3">Level2-li2</li>
                 <li class="item_lvl_3">Level2-li1</li>
               </ul>
               Level1-li3
            </li>
          </ul>
       <li class="item_lvl_1">
       <li class="item_lvl_1">
         </ul>
</div>
</body>
  
</html>
И ниже xpath
//ul[@class='menu_lvl_1']//li[not(parent::ul[@class='menu_lvl_2'])]

Вот вывод: enter image description here

Вот метод, чтобы получитьтекст только из родительского элемента.

def get_text_exclude_children(element):
    return driver.execute_script(
        """
        var parent = arguments[0];
        var child = parent.firstChild;
        var textValue = "";
        while(child) {
            if (child.nodeType === Node.TEXT_NODE)
                    textValue += child.textContent;
                    child = child.nextSibling;
        }
        return textValue;""",
        element).strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...