Message: invalid selector: Compound class names not permitted

Message: invalid selector: Compound class names not permitted

BUG描述:

      使用Selenium模拟鼠标在浏览器中输入内容或点击,调用第三方库selenium,使用webdriver声明浏览器,打开网页,然后使用find_element_by_class_name('class_name')选择html标签时,报错:

       Message: invalid selector: Compound class names not permitted

       消息:无效选择器:不允许使用复合类名

原因分析:

      我们通过F12从浏览器获取到的html元素的class name中间有空格,所以提示我们类名不合法,不允许的类名

解决方法:

1.html元素的class name中间的空格是表示父级和子级的关系,我们调用以上方法的时候使用类名的最后一段就可以了

      如:<button type="submit" class="btn-search tb-bg">

         我们通过find_element_by_class_name('btn-search tb-bg')选择button标签,就会报错

         改成find_element_by_class_name('tb-bg')就可以选择到button标签(btn-search和tb-bg中间有空格),但是要确认tb-bg不是很多标签都重复的类名,能确保选择到自己要选的那个标签

2.webdriver有很多方法,使用其他方法:

         find_element_by_id(),find_element_by_name(),find_element_by_css_selector()等,如果需要选择的html标签有id,优先通过id选择,或者通过name等,除非这个标签只有class时,再使用上面的方法(换种思路).

参考代码:

(注意:运行代码时要下载与自己的浏览器版本匹配的chromedriver.exe放到代码同级目录下,

否则会报错:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

下载地址:http://chromedriver.storage.googleapis.com/index.html)

from selenium import webdriver
import time


# 声明浏览器
browser = webdriver.Chrome()
try:
    # get打开指定的url,传入要打开的url,以淘宝网为例
    browser.get('https://www.taobao.com/')
    # 通过find_element_by_name获取到网页标签,send_keys()输入内容,在搜索栏输入python
    browser.find_element_by_name('q').send_keys('python')
    time.sleep(1)
    '''
    通过find_element_by_class_name获取到网页标签,click()点击
    注意class名中的空格是表示父子级的关系,如果有空格,则class_name只取最后一段,然后还要避免有同名的class,为了
    避免取错标签,优先根据id或name等其他方式取
    淘宝网的搜索按钮class name为btn-search tb-bg,用btn-search tb-bg取时报错,用tb-bg取则成功
    '''
    # browser.find_element_by_class_name('btn-search tb-bg').click()  # 报错
    browser.find_element_by_class_name('tb-bg').click()  # 成功
    time.sleep(5)
    # 点击"密码登录"按钮
    # browser.find_element_by_class_name('forget-pwd J_Quick2Static').click()  # 报错
    browser.find_element_by_class_name('J_Quick2Static').click()  # 正常
    time.sleep(10)
    browser.close()
except Exception as e:
    print("模拟登录失败:{}".format(e))
    browser.close()

Message: invalid selector: Compound class names not permitted