Get all child elements

前端 未结 4 369
太阳男子
太阳男子 2020-12-07 13:55

In Selenium with Python is it possible to get all the children of a WebElement as a list?

相关标签:
4条回答
  • 2020-12-07 14:39

    Yes, you can achieve it by find_elements_by_css_selector("*") or find_elements_by_xpath(".//*").

    However, this doesn't sound like a valid use case to find all children of an element. It is an expensive operation to get all direct/indirect children. Please further explain what you are trying to do. There should be a better way.

    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))
    
    0 讨论(0)
  • 2020-12-07 14:45

    Yes, you can use find_elements_by_ to retrieve children elements into a list. See the python bindings here: http://selenium-python.readthedocs.io/locating-elements.html

    Example HTML:

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

    You can use the find_elements_by_ like so:

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

    If you want help with a specific case, you can edit your post with the HTML you're looking to get parent and children elements from.

    0 讨论(0)
  • 2020-12-07 14:52

    Here is a code to get the child elements (In 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++;
        }
     }
    
    0 讨论(0)
  • 2020-12-07 15:00

    Another veneration of find_elements_by_xpath(".//*") is:

    from selenium.webdriver.common.by import By
    
    
    find_elements(By.XPATH, ".//*")
    
    0 讨论(0)
提交回复
热议问题