我试图从这样的HTML中获取数据:
<div>
<h4 id='id1'>...</h4>
<ul>
<li></li>
<li></li>
</ul>
</div>
<div>
<h4 id='id2'>...</h4>
<ul> ... </ul>
</div>
目标是从每个<li>
中获取<h4>
值。为了得到这个,我尝试过这样的方法:
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 python或selenium find child's child elements,上面写着设置上下文,所以我试了一下:
for value in h4._parent.find_elements_by_xpath('.//li'):
^
但它给了我同样数量的元素。
所以,我误解了什么?
提前谢谢。
发布于 2022-02-09 21:52:26
//div[./h4[starts-with(@id,'id')]]//li
要获得所有div的li's,其中包含一个元素h4,并启动某个id,请尝试以下操作。
// div ./h4基本上是指在1层深度内有h4元素的div。
发布于 2022-02-09 22:06:21
Arendeep question很好,对我来说很管用,但我也注意到了我遇到的问题。
元素_parent
似乎是网页,而不是父元素。这就是为什么find_element
方法从页面中获取所有<li>
标记的原因。
我可以使用公认的答案,也可以:
parent = h4.find_element_by_xpath('..')
for value in parent.find_elements_by_tag_name('li'):
# TODO
其中xpath ('..')
返回父元素。
这种方式给了我来自当前元素的唯一子元素(可能是一个更准确的答案),但是接受的答案也适用于我的场景,我希望所有的<li>
标记都依赖于<h4>
。
顺便说一下,我还没有找到关于_parent
的文档。
https://stackoverflow.com/questions/71057115
复制相似问题