Справка XPATH — поиск текста, затем следующая кнопка через несколько разделов

#python #selenium #xpath

#python #селен #xpath

Вопрос:

XPATH новичок… Я пытаюсь найти текст, затем найти следующую кнопку в блоке кода, как показано ниже. Номера ember меняются, поэтому их нельзя использовать. Необходимо найти текст в пределах диапазона, затем следующая (следующая) кнопка после того, как этот текст найден. Затем нажмите на эту кнопку. В данном случае это кнопка контакта.

Я пробовал:

 //*[text()[contains(.,'Jason')]]/div/div/button
  

Также пробовал:

 //*[text()[contains(.,'Jason')]]/following-sibling::button
  

Пример блока кода, который я пытаюсь найти.

  <div data-test="e-list-item" data-e-id="Fdh348uF" class="material-list-tile e-list-item">
                <div class="e-name">
<a href="/embed/Gdfsdjfhd25d88/gallery/Fdh348uF" id="ember2539" class="ember-view">                    <span data-test="e-name">Jason Alamoa</span>
</a><!---->                </div>
<!---->                  <div id="ember2539" class="c-info ember-view">    <div class="c-icons">
      <!---->
      <!---->
      <!---->
      <!---->
    </div>

</div>
                <div class="e-actions">
                  <div class="e-action-buttons">
<!---->                            <div class="e-action">
                                  <button class="ssButton ssButtonPrimary v-button v " type="button" data-ember-action="" data-ember-action-2540="2540">
      <i class="ssIcon-ok-sign ssIcon-large"></i>
      Contact
    </button>
 

<!---->
                            </div>
                  </div>
                </div>
              </div>
  

Комментарии:

1. Обновите свой HTML-код — его структура неясна

Ответ №1:

На основе предоставленного фрагмента HTML можно использовать следующий XPath:

 //div[./a/span[contains(.,'Jason')]]/following::div[@class="e-actions"]//button
  

Объяснение:

 //div[./a/span[contains(.,'Jason')]] => selects "div" with child "a" containing child "span" containing text "Jason"
/following::div[@class="e-actions"] => selects following "div" after the first one having attribute "class" with value "e-actions"
//button => selects "button" inside of the previous "div"
  

Комментарии:

1. Спасибо. К сожалению, у меня это не сработало. Есть много разделов «выше» этого. Было бы поэтому?

2. Пришлось искать в iFRAME .. вот почему. Оба решения работают!

Ответ №2:

Если вы хотите найти span с определенным текстом и следующим button , самый простой способ

 //span[contains(text(), 'Jason')]/following::button
  

Комментарии:

1. Спасибо! Я попробовал это и получил это сообщение … o такой элемент: не удается найти элемент: {«метод»:»xpath»,»селектор»:»//span[содержит(text(), ‘Jason’)]/следующий::кнопка»} fName = web.find_element_by_xpath(«//span[содержит(text(), ‘Jason’)]/следующее::кнопка») fName.click() Есть еще мысли?

2. Моя проблема заключалась в том, что мне пришлось научиться искать в iFRAME. вот почему он не смог найти элемент