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)
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来编辑您的帖子.
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)
的另一个变体find_elements_by_xpath(".//*")是:
from selenium.webdriver.common.by import By
find_elements(By.XPATH, ".//*")
Run Code Online (Sandbox Code Playgroud)