我有一个页面结构,其中包含具有不同级别的嵌套列表项的超链接。我只为第二个嵌套列表项(级别2)编写了xpath
,但它也为我提供了不需要的级别2(级别3或以下)下的所有列表项。现在变得非常沮丧,因为每次尝试将第3级列表项和第2级列表同时使用时,我尝试了不同的xpaths
和cssSelectors
。
页面结构如下:
<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级物品。我想正确而分别地获得每个等级物品。任何人的帮助将不胜感激
答案 0 :(得分:0)
欢迎来到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>
//ul[@class='menu_lvl_1']//li[not(parent::ul[@class='menu_lvl_2'])]
这是仅从父元素获取文本的方法。
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()