selectors presence_of_element_located find_element_by_css_selector attribute python-3.x selenium-webdriver xpath css-selectors webdriver

python-3.x - presence_of_element_located - selenium selectors



Selector no válido: los nombres de clase compuestos no están permitidos usando find_element_by_class_name con Webdriver y Python (2)

Estoy intentando imprimir uno de mis mensajes desde un chat a través de webWhatsapp.

Pude hacerlo a través de Javascript desde la pestaña de la Consola, lo hice de esta manera

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

El problema es que intenté hacer lo mismo en Python pero no funciona para mí ...

Heres lo que he intentado:

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

mi error que recibo es: Mensaje: selector no válido: nombres de clase compuestos no permitidos

Soy un poco nuevo en javascript, lo siento mucho por el malentendido y gracias por su ayuda! :)


Según la documentación de la implementación de selenium.webdriver.common.by :

class selenium.webdriver.common.by.By Set of supported locator strategies. CLASS_NAME = ''class name''

Asi que,

  • Al usar find_element_by_class_name() no podrá pasar varios nombres de clase.
  • Además, como desea devolver una serie de chats, en lugar de find_element* necesita usar find_elements*

Solución

Como alternativa, puede utilizar una de las siguientes estrategias de localización :

  • 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'']")


Utilice el selector css como se sugiere here y aquí también

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