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 usarfind_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'')