Как выбрать узлы с помощью find_elemets_by_xpath () с Selenium и Python - PullRequest
0 голосов
/ 18 июня 2020

Я использую find_elements_by_xpath, чтобы узнать, существуют ли ключевые слова

driver.find_elements_by_xpath('//*[contains(text(), "' + str(key) + '")]') 

, когда ключевое слово = 0,5 HR, которое возвращает 0,5 HR (правильно)

, когда ключевое слово = 5 HR, которое по-прежнему возвращает как 5 HR, так и 0,5 ЧСС (неверно, 0,5 ЧСС не 5 ЧСС)

Можно ли избежать?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Для начала, использование contains(text(), "sometext") может сделать выражение немного нестабильным. Я бы использовал text () или contains (string, string)


text ()

text() рассматривает / выбирает все дочерние текстовые узлы контекстного узла


contains ()

contains() функция возвращает true, если первая строка аргумента содержит вторую строку аргумента, иначе возвращает false.


Пример

Рассмотрим пример ниже:

  • HTML:

    <ul>
        <li>0.5 HR</li>
        <li>5 HR</li>
    </ul>
    
  • Чтобы выбрать только узел с текстом 0,5 HR , вам необходимо использовать:

    //key = 0.5 HR
    driver.find_elements_by_xpath("//li[text()='" + str(key) + "']") 
    
  • Чтобы выбрать только узел с текстом как 5 HR , вам необходимо использовать:

    //key = 5 HR
    driver.find_elements_by_xpath("//li[text()='" + str(key) + "']") 
    
  • Чтобы выбрать оба узла с текстом как 0,5 HR и 5 HR необходимо использовать:

    //key = 5 HR
    driver.find_elements_by_xpath("//li[contains(., '" + str(key) + "')]")
    

Ссылка

Подробное обсуждение можно найти в:

0 голосов
/ 18 июня 2020

Я предполагаю, что у вас есть следующий фрагмент кода:

<div>
    <div>0.5 HR</div>
    <div>5 HR</div>
</div>

Если вы запросите с помощью функции contains со значением 5 HR следующим образом:

//*[contains(text(), "5 HR")]

Конечно, это будет верните 2, потому что действительно есть 2 элемента, которые содержат 5 HR текст.

Может быть, вам нужен запрос с точным значением, поэтому вы не можете использовать функцию contains.

Использовать равно =:

driver.find_elements_by_xpath('//*[text()="' + str(key) + '"]')
...