首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Selenium只从当前父级获取子元素。

Selenium只从当前父级获取子元素。
EN

Stack Overflow用户
提问于 2022-02-09 21:43:36
回答 2查看 619关注 0票数 0

我试图从这样的HTML中获取数据:

代码语言:javascript
运行
复制
<div>
  <h4 id='id1'>...</h4>
  <ul>
    <li></li>
    <li></li>
  </ul>
</div>
<div>
  <h4 id='id2'>...</h4>
  <ul> ... </ul>
</div>

目标是从每个<li>中获取<h4>值。为了得到这个,我尝试过这样的方法:

代码语言:javascript
运行
复制
divs = driver.find_elements_by_xpath("//div//h4[starts-with(@id,'id_')]")
for h4 in divs:
    title = h4.text
    # Get <li> from each div
    for value in h4._parent.find_elements_by_tag_name('li'): #<-- It gives me all <li> in the page
        # TODO ...

在这里,我尝试获取所有的<h4>标记,然后转到父标记( <div>),并找到只存在于父标记中的<li>标记。但是我检索了所有的<li>标签。

我在互联网上搜索过,我在StackOverflow中找到了几个问题,比如Get child element using xpath selenium pythonselenium find child's child elements,上面写着设置上下文,所以我试了一下:

代码语言:javascript
运行
复制
for value in h4._parent.find_elements_by_xpath('.//li'):
                                                 ^

但它给了我同样数量的元素。

所以,我误解了什么?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-09 21:52:26

代码语言:javascript
运行
复制
//div[./h4[starts-with(@id,'id')]]//li

要获得所有div的li's,其中包含一个元素h4,并启动某个id,请尝试以下操作。

// div ./h4基本上是指在1层深度内有h4元素的div。

票数 1
EN

Stack Overflow用户

发布于 2022-02-09 22:06:21

Arendeep question很好,对我来说很管用,但我也注意到了我遇到的问题。

元素_parent似乎是网页,而不是父元素。这就是为什么find_element方法从页面中获取所有<li>标记的原因。

我可以使用公认的答案,也可以:

代码语言:javascript
运行
复制
parent = h4.find_element_by_xpath('..')
for value in parent.find_elements_by_tag_name('li'):
    # TODO

其中xpath ('..')返回父元素。

这种方式给了我来自当前元素的唯一子元素(可能是一个更准确的答案),但是接受的答案也适用于我的场景,我希望所有的<li>标记都依赖于<h4>

顺便说一下,我还没有找到关于_parent的文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71057115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档