Selenium3+python3自动化(四十七)--定位的坑:class属性有空格

前言

有些class属性中间有空格,如果直接复制过来定位是回报错的:no such element: Unable to locate element,即:没有这样的元素:找不到元素

一、定位带空格的class属性

1.以百度首页,定位新闻按钮为例:https://www.baidu.com

 2.如果直接复制class属性定位,是会报错的

 二、class属性科普

1.class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素多个class的属性名称(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没有多个属性的)

2.了解更多html知识,参考:https://www.runoob.com/html/html-attributes.html

 三、class定位

1.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="mnav c-font-normal c-color-t",取mnav 或c-font-normal 或c-color-t都可以,只要这个class属性在页面上唯一就行。

2.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?

四、判断元素唯一性

1.F12调出的窗口中,Ctrl+F搜索关键字:如mnav,然后回车键搜索,看页面上有几个class属性中有mnav这个属性的,就知道是不是唯一的了。

 五、class属性不唯一怎么办?

1.如果这个class的多个属性都不是唯一的咋办呢,元素不唯一也不用怕,可以用复数定位,把所有的相同元素定位出来,按下标取第几个就行。

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(3)
# t=driver.find_element_by_class_name("mnav c-font-normal c-color-t").click()
t=driver.find_elements_by_class_name("mnav")
print(t)
t[0].click()

 百度首页源码中,可以发现【新闻】按钮是第一个

 六、css定位

1.css来定位class属性的元素前面加个点(.)就行,然后空格变成点(.)就能定位了;#表示id,.表示class属性

2.当然css也可以取class属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(3)
#css定位
# driver.find_element_by_css_selector(".mnav.c-font-normal.c-color-t").click()
#取单个class属性
driver.find_element_by_css_selector(".mnav").click()

备注:这里mnav不是唯一的,也可以,默认找第一个  

七、xpath定位(根据路径找,默认找到第一个a),class的属性值有空格,可以直接使用

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(3)
t=driver.find_element_by_xpath("//div/a[@class='mnav c-font-normal c-color-t']")
t.click()  
越努力,越幸运!!! good good study,day day up!!!
原文地址:https://www.cnblogs.com/canglongdao/p/13618469.html