Как найти элементы, которые не включают определенное имя класса с селеном и питоном - PullRequest
0 голосов
/ 19 января 2019

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

У меня есть элемент <div class="examplenameA"> и элемент <div class="examplenameA examplenameB">

На данный момент я делаю это, чтобы преодолеть мою проблему:

items = driver.find_elements_by_class_name('examplenameA')
for item in items:
    cname = item.get_attribute('class')
    if 'examplenameB' in cname:
        pass
    else:
        rest of code

Мне нужны только те элементы, которые имеют имя класса examplenameA, и я хочу пропустить те, которые также содержат examplenameB

Ответы [ 2 ]

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

Найти все элементы с атрибутом class как examplenameA, исключая элементы с атрибутом class как examplenameB Вы можете использовать следующее решение:

  • css_selector:

    items = driver.find_elements_by_css_selector("div.examplenameA:not(.examplenameB)")
    
  • xpath:

    items = driver.find_element_by_xpath("//div[contains(@class, 'examplenameA') and not(@class='examplenameB')]")
    
0 голосов
/ 19 января 2019

В этом случае вы можете использовать xpath.В соответствии с вашим примером вам нужно использовать что-то вроде driver.find_elements_by_xpath('//div[@class='examplenameA').Это даст вам только элементы, чей класс examplenameA

Так как работает xpath: Xpath=//tagname[@attribute='value']

Следовательно, класс рассматривается как атрибут, и xpath будет пытаться найти точноеданное значение, в этом случае examplenameA, поэтому <div class="examplenameA examplenameB"> будет игнорироваться

В случае find_elements_by_class_name method он будет пытаться сопоставить элемент, имеющий класс, как examplenameA, поэтому <div class="examplenameA examplenameB"> также будет соответствовать

Надеюсь, это поможет

...