获取所有子元素
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, "*')
【讨论】:
以上是关于获取所有子元素的主要内容,如果未能解决你的问题,请参考以下文章