Как можно прочитать список текста из div наиболее надежным способом, используя родственные отношения в Selenium с Python? - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь найти и затем прочитать список текста 1-5.Все div с class = "col-md-6" имеют одинаковую структуру, поэтому я пытаюсь использовать текст из:

<h5>Header Unique Text</h5>

, так как это единственный уникальный элемента затем приступить к извлечению текстов, но без использования / div [x] / div [y] типа xpath, так как в моем случае это будет ненадежно.Я ищу селектор css (или даже xpath), который использует родственные отношения, возможно, nth-child, связанные с тегом header или его родительским div.Однако я не уверен, что вы даже можете двигаться назад в DOM с помощью селекторов CSS.

Любая помощь будет принята с благодарностью.

<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>

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Если это последний дочерний элемент, как показано, вы можете использовать селектор последнего дочернего элемента

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

Вы также можете использовать nth-of-type

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

Или даже последний тип

.col-md-6:last-of-type .ibox-content div
1 голос
/ 14 марта 2019

Вы можете использовать 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>Header Unique text</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
...