Python Selenium, как найти элемент, НЕ содержащий строку - PullRequest
1 голос
/ 29 июня 2019

По сути, у меня уже есть фрагмент кода, который находит все элементы селена на странице, содержащие ключевое слово Мэтти Мэтисон Худ (см. Ниже):

keyword = 'Matty Matheson Hood'
list = driver.find_elements_by_xpath("//*[contains(text(), '" + keyword + "')]")
print(list)

Теперь это работает нормально, однако возвращает 4 элемента, и я пытаюсь сузить его до 1, избавившись от тех, которые содержат ключевое слово Tie Dye

Проще говоря, мне было интересно, смогу ли я использовать что-то похожее на то, что у меня есть выше, но вместо этого использовать не содержит , и возможно ли объединить оба содержимого и не содержать в 1 поиске?

Так что найдите все элементы (должны быть только 1), которые содержат Мэтти Мэтисона Гуда, но не содержат краситель Tie Dye.

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 29 июня 2019

Мне удалось решить мою проблему с помощью обхода из нескольких списков:

    positive_list = driver.find_elements_by_xpath("//*[contains(text(), '" + positive_keyword + "')]")
    negative_list = driver.find_elements_by_xpath("//*[contains(text(), '" + negative_keyword + "')]")

    result_list = [item for item in positive_list if item not in negative_list]

Возможно, это не самая эффективная система, но она работает для моих целей. Не стесняйтесь добавлять более эффективные методы, если вы найдете любой:)

0 голосов
/ 01 июля 2019

Вот чистый xpath, который будет возвращать только те элементы, которые содержат Matty Matheson Hood и не содержат Tie Dye.

//*[contains(text(), 'Matty Matheson Hood')][not(contains(text(),'Tie Dye'))]

Скриншот: enter image description here

0 голосов
/ 29 июня 2019

Мы могли бы использовать понимание списка и удалить все наши нужные элементы из списка, которые нам больше не нужны.

Опция может быть следующей:

some_list = driver.find_elements_by_xpath("//*[contains(text(), '" + keyword + "')]")

matching = [s for s in some_list if "Tie Dye" in s]

Понимания списков используются для создания новых списков из других итераций.

Поскольку понимание списков возвращает списки, они состоят из скобок, содержащих выражение, которое выполняется для каждого элемента вместе с циклом for для итерации по каждому элементу.

Это основной синтаксис:

new_list = [expression for_loop_one_or_more conditions]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...