driver.find_element_by_class_name(), но в имени класса есть пробелы

Error message : selenium.common.exceptions.InvalidSelectorException: Message: Given css selector expression ". clickable event-link math " is invalid: InvalidSelectorError: Document.querySelector: '. clickable event-link math ' is not a valid selector: ". clickable event-link math "

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

Algebra = ' clickable event-link math '
math = driver.find_element_by_class_name(Algebra)

person casketx3    schedule 25.01.2021    source источник


Ответы (2)


Это означает, что элемент имеет несколько классов... Попробуйте использовать CSS-селектор

driver.find_element_by_css_selector(".clickable.event-link.math")
person dukkee    schedule 25.01.2021

Согласно документации selenium.webdriver.common.by:

class selenium.webdriver.common.by.By
    Set of supported locator strategies.

    CLASS_NAME = 'class name'
    

So,

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

      Message: invalid selector: Compound class names not permitted
    
  • Кроме того, поскольку вы хотите вернуть массив чатов, вместо find_element* вам нужно использовать find_elements*


Решение

В качестве альтернативы вы можете использовать любую из следующих стратегий поиска:

  • CSS_SELECTOR:

      math = driver.find_element(By.CSS_SELECTOR, ".clickable.event-link math")
    
  • XPATH:

      math = driver.find_element(By.XPATH, "//*[contains(@class, 'clickable') and contains(@class, 'event-link math')]")
    

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

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

person DebanjanB    schedule 25.01.2021