获取所有子元素

131 投票
6 回答
279886 浏览
提问于 2025-04-18 13:38

在使用Python的Selenium时,有没有办法把一个网页元素的所有子元素都拿到,并放在一个列表里呢?

6 个回答

2

你可以使用 get_attributeBeautifulSoup

html_str = el.get_attribute('innerHTML')
bs = BeautifulSoup(html_str, 'lxml')
7

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

from selenium.webdriver.common.by import By

find_elements(By.XPATH, ".//*")
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")
94

是的,你可以使用 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 代码。

198

是的,你可以通过 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))

撰写回答