Неверный селектор: составные имена классов не разрешены с использованием find_element_by_class_name с Webdriver и Python - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь распечатать одно из своих сообщений из чата через 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 ]

0 голосов
/ 29 ноября 2018

Согласно документации 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*

Solution

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

  • 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']")
    
0 голосов
/ 29 ноября 2018

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

recived_msg = driver.find_element_by_css_selector('XELVh.selectable-text.invisible-space.copyable-text')
...