选择器无效:使用Webdriver和Python的find_element_by_class_name不允许使用复合类名称

时间:2018-11-28 21:05:22

标签: python-3.x selenium-webdriver xpath css-selectors webdriver

我正在尝试通过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 :(得分: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*

解决方案

或者,您可以使用以下Locator Strategies之一:

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

答案 1 :(得分:0)

根据建议herehere too

使用 css选择器
recived_msg = driver.find_element_by_css_selector('XELVh.selectable-text.invisible-space.copyable-text')