2014-07-17 16 views

Odpowiedz

54

Tak, można to osiągnąć przez find_elements_by_css_selector("*") lub find_elements_by_xpath(".//*").

Jednak to nie brzmi jak ważny przypadek użycia, aby znaleźć wszystkich dzieci danego elementu. Jest to kosztowna operacja, aby uzyskać wszystkie bezpośrednie/pośrednie dzieci. Proszę dalej wyjaśnić, 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") 

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

Tak, można użyć find_elements_by_, aby pobrać elementy podrzędne do listy. Zobacz Wiązania Pythona tutaj: http://selenium-python.readthedocs.io/locating-elements.html

Przykład HTML:

<ul class="bar"> 
    <li>one</li> 
    <li>two</li> 
    <li>three</li> 
</ul> 

Można użyć find_elements_by_ tak:

parentElement = driver.find_element_by_class("bar") 
elementList = parentElement.find_elements_by_tag_name("li") 

Jeśli chcesz pomóc w konkretnym przypadku można edytować swój post z kodem HTML, z którego chcesz pobrać elementy rodzica i dzieci.

+2

+1: Świetnie! Używałem tylko 'driver.find_elements_by_' - nie przyszło mi do głowy, że mogę również użyć go na poszczególnych elementach, aby znaleźć tylko ich dzieci. – ArtOfWarfare

+0

* find_element_by_class_name – Iorek

Powiązane problemy