获取所有子元素

Posted

技术标签:

【中文标题】获取所有子元素【英文标题】:Get all child elements 【发布时间】:2014-09-07 19:58:38 【问题描述】:

在使用 Python 的 Selenium 中,是否可以将 WebElement 的所有子项作为列表获取?

【问题讨论】:

【参考方案1】:

是的,您可以通过find_elements_by_css_selector("*")find_elements_by_xpath(".//*") 实现。

但是,这听起来不像是查找元素的所有子元素 的有效用例。获取所有直接/间接孩子是一项昂贵的操作。请进一步解释您要做什么。应该有更好的办法。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.***.com")

header = driver.find_element_by_id("header")

# start from your target element, here for example, "header"
all_children_by_css = header.find_elements_by_css_selector("*")
all_children_by_xpath = header.find_elements_by_xpath(".//*")

print 'len(all_children_by_css): ' + str(len(all_children_by_css))
print 'len(all_children_by_xpath): ' + str(len(all_children_by_xpath))

【讨论】:

只要弄清楚//之前的.很重要,如果缺少点,即使您从元素调用该方法,它也会再次搜索整个html 我们可以用这种方式来定位一个特定的孩子,或者下一个直系孩子吗?还是从父级开始的整个路径?【参考方案2】:

是的,您可以使用find_elements_by_ 将子元素检索到列表中。在此处查看 python 绑定:http://selenium-python.readthedocs.io/locating-elements.html

示例 HTML:

<ul class="bar">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ul>

您可以像这样使用find_elements_by_

parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")

如果您需要有关特定案例的帮助,您可以使用要从中获取父元素和子元素的 HTML 来编辑帖子。

【讨论】:

* find_element_by_class_name【参考方案3】:

find_elements_by_xpath(".//*") 的另一种尊崇是:

from selenium.webdriver.common.by import By


find_elements(By.XPATH, ".//*")

【讨论】:

【参考方案4】:

你不能用

all_children_by_css = header.find_elements_by_css_selector("*")

你现在需要使用

all_children_by_css = header.find_elements(By.XPATH, "*')

【讨论】:

以上是关于获取所有子元素的主要内容,如果未能解决你的问题,请参考以下文章

Jquery如何选取元素及其所有子元素?

获取具有类名的字段集的所有子输入元素,输入元素只是字段集的间接子元素

获取所有子元素

js删除一个父元素下面的所有子元素

jQuery怎么获取一个DIV下所有元素的值

jquery怎样获取一个元素下面相同子元素的个数?