#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. вот почему он не смог найти элемент