सभी बाल तत्व प्राप्त करें


85

पायथन के साथ सेलेनियम में एक वेबइमेन्ट के सभी बच्चों को एक सूची के रूप में प्राप्त करना संभव है?

जवाबों:


130

हाँ, आप इसे प्राप्त कर सकते हैं 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))

2
बस यह पता लगाएं कि .पहले //महत्वपूर्ण है, अगर डॉट गायब है, भले ही आप किसी तत्व से विधि को कॉल कर रहे हों, यह फिर से पूरे HTML को
ल्यूक एरोन

61

हां, आप find_elements_by_बच्चों के तत्वों को एक सूची में पुनः प्राप्त करने के लिए उपयोग कर सकते हैं । यहाँ अजगर बाँध देखें: http://selenium-python.readthedocs.io/locating-elements.html

उदाहरण HTML:

<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 से संपादित कर सकते हैं जिसे आप माता-पिता और बच्चों के तत्वों से प्राप्त करना चाहते हैं।


* Find_element_by_class_name
Iorek


-2

यहाँ बाल तत्वों को प्राप्त करने के लिए एक कोड है (जावा में):

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++;
    }
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.