获取所有子元素

wal*_*ie4 63 python selenium selenium-webdriver

在Selenium with Python中,是否可以将WebElement的所有子节点作为列表?

Yi *_*eng 89

是的,你可以通过find_elements_by_css_selector("*")或实现它find_elements_by_xpath(".//*").

但是,这听起来不是一个有效的用例来查找元素的所有子元素.获得所有直接/间接儿童是一项昂贵的手术.请进一步说明您要做的事情.应该有更好的方法.

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.stackoverflow.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))
Run Code Online (Sandbox Code Playgroud)

  • 只要弄清楚“//”之前的“.”很重要,如果缺少点,即使您从元素调用该方法,它也会再次搜索整个 HTML (7认同)

Ric*_*ard 48

是的,您可以使用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>
Run Code Online (Sandbox Code Playgroud)

你可以这样使用find_elements_by_:

parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")
Run Code Online (Sandbox Code Playgroud)

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

  • +1:好极了!我只使用过`driver.find_elements_by_` - 我没有想到我也可以在个别元素上使用它来找到自己的孩子. (6认同)

Hee*_*ara 10

到 2022 年,selenium==4.2.0@Richard 的答案将需要重写为:

from selenium.webdriver.common.by import By

parentElement = driver.find_element(By.CLASS_NAME,"bar")
elementList = parentElement.find_elements(By.TAG_NAME,"li")
Run Code Online (Sandbox Code Playgroud)


Jor*_*ega 7

的另一个变体find_elements_by_xpath(".//*")是:

from selenium.webdriver.common.by import By

find_elements(By.XPATH, ".//*")
Run Code Online (Sandbox Code Playgroud)