Selenium python, используйте css для выбора только двух классов

Предположим, у меня есть HTML-код, который выглядит так:

<div class="first second">
    Right!
</div>
<div class="first second third fourth">
    Wrong!
</div>
<div class="first second">
    Right!
</div>

Если я попытаюсь найти первый и третий div, используя css:

driver.find_elements_by_class_name("first, second")

Вместо того, чтобы получить 2 элемента в моем списке, я получаю все три элемента div, потому что второй фактически содержит эти классы и некоторые другие... Как я могу ограничить его, чтобы найти только <div> с помощью:

class = "first second"

person James Deen    schedule 09.06.2021    source источник
comment
какой тег у вас есть, который содержит first, second третий тег также содержит то же самое.   -  person cruisepandey    schedule 09.06.2021
comment
Вы не можете использовать Xpath?   -  person Aaron Cloud    schedule 09.06.2021


Ответы (3)


Вы можете использовать это, если вам нужно получить их через xpath:

driver.find_elements_by_xpath(".//div[@class='first second']")
person itronic1990    schedule 09.06.2021

div[class = 'first second']

должно сработать. Потому что это точное совпадение.

используйте его с CSS_SELECTOR

driver.find_elements(By.CSS_SELECTOR , "div[class = 'first second']")
person cruisepandey    schedule 09.06.2021

Используя find_element_by_class_name(), вы не сможете передать несколько имен классов. Проходя несколько классов, вы столкнетесь с ошибкой:

Message: invalid selector: Compound class names not permitted

Чтобы найти элементы с class=first second, вы можете использовать любой из следующих Стратегии поиска:

  • Использование css_selector:

    elements = driver.find_elements(By.CSS_SELECTOR, "div[class='first second']")
    
  • Использование xpath:

    elements = driver.find_elements(By.XPATH, "//div[@class='first second']")
    

использованная литература

Вы можете найти пару соответствующих подробных обсуждений в:

person DebanjanB    schedule 09.06.2021