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 突出显示到按钮。希望这就是您要找的。
我正在寻找一种解决方案,以获取已知元素的第二个父项 (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 突出显示到按钮。希望这就是您要找的。