Obtener todos los elementos secundarios

Respuestas:

123

Sí, puedes lograrlo con find_elements_by_css_selector("*")o find_elements_by_xpath(".//*").

Sin embargo, esto no parece un caso de uso válido para encontrar todos los hijos de un elemento. Es una operación costosa conseguir todos los hijos directos / indirectos. Explique con más detalle lo que está intentando hacer. Debería haber una forma mejor.

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))
Yi Zeng
fuente
2
solo descubra que lo .anterior //es importante, si falta el punto, incluso si está llamando al método desde un elemento, nuevamente busque en todo el HTML
Luk Aron
61

Sí, puede utilizar find_elements_by_para recuperar elementos secundarios en una lista. Vea los enlaces de Python aquí: http://selenium-python.readthedocs.io/locating-elements.html

HTML de ejemplo:

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

Puedes usar el me find_elements_by_gusta así:

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

Si desea ayuda con un caso específico, puede editar su publicación con el HTML del que desea obtener elementos para padres e hijos.

Ricardo
fuente
* find_element_by_class_name
Iorek
1

Otra veneración de find_elements_by_xpath(".//*")es:

from selenium.webdriver.common.by import By


find_elements(By.XPATH, ".//*")
Jortega
fuente
-1

Aquí hay un código para obtener los elementos secundarios (en 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++;
    }
 }
shikha nagar
fuente