获取所有子元素
在使用Python的Selenium时,有没有办法把一个网页元素的所有子元素都拿到,并放在一个列表里呢?
6 个回答
2
你可以使用 get_attribute
和 BeautifulSoup
。
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))