Python Selenium 获得第 n 个父项和第 n 个子项

Python Selenium get nth parent and nth child

我正在寻找一种解决方案,以获取已知元素的第二个父项 (div),然后使用 python.[=13= 在 selenium 中获取带有子元素的子元素]

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>


<div class="p1">
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <span class="target">b_Kunden</span>
        </div>
    </div>
    <div class="p2">...</div>
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <div class="p4">
                <div class="p5">
                    <div class="p6">
                        <button type="button" class="b1">button i want to click</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="p1">
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <span class="target">different</span>
        </div>
    </div>
    <div class="p2">...</div>
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <div class="p4">
                <div class="p5">
                    <div class="p6">
                        <button>some button</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="p1">
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <span class="target">different</span>
        </div>
    </div>
    <div class="p2">...</div>
    <div class="p2">...</div>
    <div class="p2">
        <div class="p3">
            <div class="p4">
                <div class="p5">
                    <div class="p6">
                        <button>some button</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


</body>
</html>

我正在使用 xpath 获取要查找的元素并检查特定文本 ("b_Kunden")(工作正常):

temp = browser.find_elements_by_xpath("//*[contains(text(), 'b_Kunden')]")[0]

** 我无法通过简单的 className 等访问它。这只是 环境中的虚拟 HTML 我需要从跨度文本为“b_Kunden”的位置上升到 p1 class,然后下降到子元素 p6 以单击其中的按钮 **

原因是我需要准确按下跨度文本为 b_Kunden 的部分的按钮。因为部分的数量是可变的,所以我无法通过示例计算和访问它们:[1] operator for classes。我需要找到术语“b_Kunden”并按下 p1 部分中的相关按钮。

如果有人能帮助我解决这个问题,我会很高兴。

此致, 利亚姆

这可能对您有所帮助(假设您提到的第二个 parent 在层次结构中倒退(更高 DOM):

browser.find_elements_by_xpath("//*[contains(text(), 'b_Kunden')][1]//parent::div//parent::div")

更新(根据@Liam 提供的评论和 html 块的代码)

//*[text()='b_Kunden']//ancestor::div//button

这里是 HTML,DOM 突出显示到按钮。希望这就是您要找的。

HTML DOM highlighted snapshot