Py学习  »  Python

如何使用selenium和python中的兄弟关系以最可靠的方式从div读取文本列表?

Sputnik • 7 年前 • 2072 次点击  

我试着找到并阅读文本列表1-5。所有跳水运动员 class=“col-md-6” 具有相同的结构,因此我尝试使用以下文本:

<h5>Header Unique Text</h5>

因为它是唯一唯一的元素,然后继续提取文本,但不使用/div[x]/div[y]类型的xpath,因为在我的情况下它是不可靠的。我正在搜索一个css选择器(甚至xpath),它使用与header标记或其父div相关的兄弟关系(可能是第n个子关系)。但是,我不确定您是否能够使用css选择器在dom中向后移动。

任何帮助都将不胜感激。

<div class="row  dashboard-admin-widgets">
    <div class="col-md-6">...</div>
    <div class="col-md-6">...</div>
    <div class="col-md-6">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>Header Unique Text</h5>
            </div>
            <div class="ibox-content">
                <div>Text 1</div>
                <div>Text 2</div>
                <div>Text 3</div>
                <div>Text 4</div>
                <div>Text 5</div>
	    </div>
        </div>
    </div>
</div>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40335
文章 [ 2 ]  |  最新文章 7 年前
Fenio
Reply   •   1 楼
Fenio    7 年前

可以使用xpath获取 <h5>Header Unique text</h5> 这样地:

//h5[normalize-space(.)='Header Unique Text']/ancestor::div[@class='ibox float-e-margins']/div[@class='ibox-content']/div

让我为您分解它,以便您可以根据需要调整xpath。

首先,我们要寻找 <h5>标题唯一文本</h5> 然后我们得到它的祖先 div[@class='ibox float-e-margins'] . 您可以使用任何属性、标记,就像编写xpath一样。

现在我们正在寻找 div[@class='ibox float-e-margins'] . 然后,利用我们寻找所有 div 包含所需文本的元素。

另外,不用 /ancestor::div ,您可以得到第一个父级,然后查找它的兄弟级,如下所示:

//h5[contains(text(), 'Header Unique Text')]/parent::div[@class='ibox-title']/following-sibling::div[@class='ibox-content']/div
QHarr
Reply   •   2 楼
QHarr    7 年前

如果它是所示的最后一个子对象,则可以使用最后一个子选择器

.col-md-6:last-child .ibox-content div

你也可以用第N种

.col-md-6:nth-of-type(n) .ibox-content div

甚至是最后一种

.col-md-6:last-of-type .ibox-content div