【问题标题】:Get all child elements获取所有子元素
【发布时间】:2014-09-07 19:58:38
【问题描述】:

在使用 Python 的 Selenium 中,是否可以将 WebElement 的所有子项作为列表获取?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    是的,您可以通过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))
    

    【讨论】:

    • 只要弄清楚//之前的.很重要,如果缺少点,即使您从元素调用该方法,它也会再次搜索整个HTML
    • 我们可以用这种方式来定位一个特定的孩子,或者下一个直系孩子吗?还是从父级开始的整个路径?
    【解决方案2】:

    是的,您可以使用find_elements_by_ 将子元素检索到列表中。在此处查看 python 绑定: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
    【解决方案3】:

    find_elements_by_xpath(".//*") 的另一种尊崇是:

    from selenium.webdriver.common.by import By
    
    
    find_elements(By.XPATH, ".//*")
    

    【讨论】:

      【解决方案4】:

      你不能用

      all_children_by_css = header.find_elements_by_css_selector("*")
      

      你现在需要使用

      all_children_by_css = header.find_elements(By.XPATH, "*')
      

      【讨论】:

        猜你喜欢
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 2016-11-06
        • 2014-10-08
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        相关资源
        最近更新 更多