使用Python的Selenium WebDriver查找所有子元素XPath从父XPath中找出。

12

我可以通过 driver.find_element_by_xpath('//*[@id="app"]/table/tbody/tr[1]/td[1]') 的xpath找到元素。但是是否有办法返回所有子元素,如标签 和 的xpath ?

<tr>
    <td class="">
        <div>
            <a href="/user/1">
                <!-- react-text: 6011 -->user first name |
                <!-- /react-text -->
                <!-- react-text: 6012 -->
                <!-- /react-text -->
                <!-- react-text: 6013 -->user last name
                <!-- /react-text -->
            </a>
            <div>
                <span>
            <!-- react-text: 6014 -->town<!-- /react-text -->
            <!-- react-text: 6015 -->  | <!-- /react-text -->
            <!-- react-text: 6015 -->month<!-- /react-text -->
            <!-- react-text: 6081 --> | date<!-- /react-text -->
            <!-- react-text: 6082 -->year<!-- /react-text -->
            </span>
            </div>
        </div>
    </td>
    <td class=""><a href="/address/1">1</a>
        <div class="">city</div>
    </td>
</tr>

只是为了澄清,您需要当前WebElement的所有子元素吗? - Jayesh Doolani
2个回答

20

关键是使用xpath .//* 获取当前节点的所有子节点。 . 选择当前元素,//* 选择所有元素,使得整个xpath选择当前元素的所有子元素。您的代码将如下所示:

parent_elem = driver.find_element_by_xpath('//*[@id="app"]/table/tbody/tr[1]/td[1]')
child_elements = parent_elem.find_elements_by_xpath('.//*')

我能够找到所有的子元素,但是我想要一个包含所有子元素xpath的列表[<child 1 xpath>, <child 2 xpath>, ..]。 - jacobcan118
获取xpath的方法并没有一个通用的方式,因为一个元素并没有唯一的xpath。有很多种方法可以获取元素的xpath。 - Jayesh Doolani

3

如果您需要查找直接子元素,请使用

child_elements = parent_elem.find_elements_by_xpath('./*')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接