Неверный селектор: составные имена классов не разрешены с использованием 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']")