获取所有子元素

问题描述 投票:0回答:6

在带有 Python 的 Selenium 中,是否可以将 WebElement 的所有子元素作为列表获取?

python selenium selenium-webdriver
6个回答
183
投票

是的,您可以通过

find_elements_by_css_selector("*")
find_elements_by_xpath(".//*")
实现它。

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

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))

93
投票

是的,您可以使用

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 编辑您的帖子。


5
投票

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

from selenium.webdriver.common.by import By


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

2
投票

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")

1
投票

您可以使用

get_attribute 
BeautifulSoup


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


0
投票

你不能使用

all_children_by_css = header.find_elements_by_css_selector("*")

你现在需要使用

all_children_by_css = header.find_elements(By.CSS_SELECTOR, "*")
© www.soinside.com 2019 - 2024. All rights reserved.