2014-07-17 32 views

cevap

54

Evet, bunu find_elements_by_css_selector("*") veya find_elements_by_xpath(".//*") aracılığıyla gerçekleştirebilirsiniz. Ancak bu, öğesinin tümünü öğesinin bir öğesinin bulunması için geçerli bir kullanım durumu gibi gelmiyor. Doğrudan/dolaylı tüm çocukları almak için pahalı bir işlemdir. Lütfen ne yapmaya çalıştığınızı açıklayın. Daha iyi bir yol olmalı.

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

Evet, alt öğeleri bir listeye almak için find_elements_by_ kullanabilirsiniz. http://selenium-python.readthedocs.io/locating-elements.html

örnek HTML: Burada piton bağlamaları bakın

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

kullanabilirsiniz find_elements_by_ şöyle:

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

Belirli bir vaka ile yardım istiyorsanız, yayınınızı düzenleyebilir HTML ile ebeveyn ve çocuk öğeleri almak istiyoruz.

+2

+1: Harika! Ben sadece 'driver.find_elements_by_' kullanıyordum - bana sadece çocuklarını bulmak için bireysel elemanlarda kullanabileceğimi hissetmedim. – ArtOfWarfare

+0

* find_element_by_class_name – Iorek