Tak, możesz to osiągnąć za pomocą find_elements_by_css_selector("*")
lub find_elements_by_xpath(".//*")
.
Jednak nie brzmi to jak prawidłowy przypadek użycia do znalezienia wszystkich elementów potomnych elementu. Zdobycie wszystkich bezpośrednich / pośrednich dzieci jest kosztowną operacją. Prosimy o dalsze wyjaśnienie, co próbujesz zrobić. Powinien być lepszy sposób.
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.stackoverflow.com")
header = driver.find_element_by_id("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))
.
zanim//
to ważne, jeśli kropka brakuje, nawet jeśli wywołanie metody z elementu, ponownie przeszukać cały HTMLTak, możesz użyć
find_elements_by_
do pobrania elementów podrzędnych do listy. Zobacz wiązania Pythona tutaj: http://selenium-python.readthedocs.io/locating-elements.htmlPrzykładowy kod HTML:
<ul class="bar"> <li>one</li> <li>two</li> <li>three</li> </ul>
Możesz użyć
find_elements_by_
tak:parentElement = driver.find_element_by_class_name("bar") elementList = parentElement.find_elements_by_tag_name("li")
Jeśli potrzebujesz pomocy w konkretnym przypadku, możesz edytować swój post za pomocą kodu HTML, z którego chcesz uzyskać elementy nadrzędne i podrzędne.
źródło
Innym kultem
find_elements_by_xpath(".//*")
jest:from selenium.webdriver.common.by import By find_elements(By.XPATH, ".//*")
źródło
Oto kod do pobrania elementów podrzędnych (w języku java):
String childTag = childElement.getTagName(); if(childTag.equals("html")) { return "/html[1]"+current; } WebElement parentElement = childElement.findElement(By.xpath("..")); List<WebElement> childrenElements = parentElement.findElements(By.xpath("*")); int count = 0; for(int i=0;i<childrenElements.size(); i++) { WebElement childrenElement = childrenElements.get(i); String childrenElementTag = childrenElement.getTagName(); if(childTag.equals(childrenElementTag)) { count++; } }
źródło