XPath: получить текст заданного условия в другом DIV - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь получить текст из структуры, подобной этой:

...
  <div class="a">
    <div class="a">
      <div class="a">
        <div class="inner">
          <a>
            <div class="a">...</div>
            <div class="a">&gt;</div>
            <div class="important class">Some interisting text</div>
            <div class="a">...</div>
          </a>
          <a>
            <div class="a">
              <button class="criterion A">...</button>
            </div>
          </a>
        </div>
      </div>
    </div>
  </div>
  <div class="a">
    <div class="a">
      <div class="a">
        <div class="inner">
          <a>
            <div class="a">...</div>
            <div class="a"/>
            <div class="important class">Some interisting text</div>
            <div class="a">...</div>
          </a>
          <a>
            <div class="a">
              <button class="criterion B">...</button>
            </div>
          </a>
        </div>
      </div>
    </div>
  </div>

...

Что я хочу:
получить путь к тексту из div с class = "важный класс", который соответствует критериюгде button имеет атрибут class="B".

Поскольку я использую селен, я попытался сделать что-то вроде следующего, чтобы получить список XPath:

list_xpath = driver.find_elements_by_xpath('.//div[@class="importante class" and .//button[@class="cirterion B"]]')

Но он возвращает пустойlist.
Чтобы получить текст, я сделаю это позже:

for path in list_xpath:
   print(path.text)

Как правильно получить этот текст по критерию, находящемуся в другой ветви?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы можете получить значение text() Some interisting text, используя следующее выражение XPath-1.0:

//div[a/div/@class='important class' and a/div/button/@class='criterion B']/a/div[@class='important class']/text()

В целом выражении Python это будет:

list_xpath = driver.find_elements_by_xpath("//div[a/div/@class='important class' and a/div/button/@class='criterion B']/a/div[@class='important class']/text()")
0 голосов
/ 28 января 2019

Попробуйте этот XPath:

//a[.//button[@class="cirterion B"]]/preceding-sibling::a//div[@class="importante class"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...