Неверный селектор: составные имена классов не разрешены с использованием find_element_by_class_name с Webdriver и Python

Я пытаюсь распечатать одно из моих сообщений из чата через webWhatsapp.

Я смог сделать это через Javascript на вкладке Консоль, я сделал это таким образом

recived_msg = document.getElementsByClassName('XELVh selectable-text invisible-space copyable-text') // returns an array of the chat
recived_msg[5].innerText // shows me the 4th message content

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

Вот что я попробовал:

from selenium import webdriver
recived_msg = driver.find_element_by_class_name('XELVh selectable-text invisible-space copyable-text')
final = recived_msg[5].innerText #doesnt work for some reason

Моя ошибка, которую я получаю: Сообщение: неверный селектор: Составные имена классов не разрешены

Я новичок в javascript, так что извините за недоразумение и спасибо за вашу помощь!:)

2 ответа

Решение

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

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

    CLASS_NAME = 'class name'

Так,

  • С помощью find_element_by_class_name() Вы не сможете передать несколько имен классов.
  • Кроме того, как вы хотите вернуть массив чатов, так что вместо find_element* вам нужно использовать find_elements*

Решение

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

  • CSS_SELECTOR:

    recived_msg = driver.find_elements_by_css_selector(".XELVh.selectable-text.invisible-space.copyable-text")
    
  • XPATH:

    recived_msg = driver.find_elements_by_xpath("//*[@class='XELVh selectable-text invisible-space copyable-text']")
    

Используйте селектор CSS, как предложено здесь и здесь

recived_msg = driver.find_element_by_css_selector('XELVh.selectable-text.invisible-space.copyable-text')
Другие вопросы по тегам