在Python的Selenium中,是否可以将WebElement的所有子元素作为列表获取?
um6iljoc1#
是的,您可以通过find_elements_by_css_selector("*")或find_elements_by_xpath(".//*")来实现。然而,这听起来不像是寻找元素的所有子元素的有效用例。获取所有直接/间接子元素是一个开销很大的操作。请进一步解释您正在尝试做什么。应该有更好的方法。
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))
1tu0hz3e2#
是的,你可以使用find_elements_by_来检索列表中的子元素。http://selenium-python.readthedocs.io/locating-elements.html示例HTML:
find_elements_by_
<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来编辑您的帖子。
nhhxz33t3#
find_elements_by_xpath(".//*")的另一个变体是:
from selenium.webdriver.common.by import By find_elements(By.XPATH, ".//*")
sf6xfgos4#
您不能使用
all_children_by_css = header.find_elements_by_css_selector("*")
您现在需要使用
all_children_by_css = header.find_elements(By.XPATH, "*')
qvk1mo1f5#
您可以使用get_attribute和BeautifulSoup
get_attribute
BeautifulSoup
html_str = el.get_attribute('innerHTML') bs = BeautifulSoup(html_str, 'lxml')
qf9go6mv6#
2022年,用selenium==4.2.0,@Richard的答案将需要改写为:
selenium==4.2.0
from selenium.webdriver.common.by import By parentElement = driver.find_element(By.CLASS_NAME,"bar") elementList = parentElement.find_elements(By.TAG_NAME,"li")
6条答案
按热度按时间um6iljoc1#
是的,您可以通过
find_elements_by_css_selector("*")
或find_elements_by_xpath(".//*")
来实现。然而,这听起来不像是寻找元素的所有子元素的有效用例。获取所有直接/间接子元素是一个开销很大的操作。请进一步解释您正在尝试做什么。应该有更好的方法。
1tu0hz3e2#
是的,你可以使用
find_elements_by_
来检索列表中的子元素。http://selenium-python.readthedocs.io/locating-elements.html示例HTML:
您可以像这样使用
find_elements_by_
:如果您需要特定案例的帮助,您可以使用要从中获取父元素和子元素的HTML来编辑您的帖子。
nhhxz33t3#
find_elements_by_xpath(".//*")
的另一个变体是:sf6xfgos4#
您不能使用
您现在需要使用
qvk1mo1f5#
您可以使用
get_attribute
和BeautifulSoup
qf9go6mv6#
2022年,用
selenium==4.2.0
,@Richard的答案将需要改写为: