Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XPath 解析器(Parser))他比xpath更高效更准确更易编写,美中不足是根据页面文字时略有缺陷没有xpath直接。
匹配实例:
以百度首页为例定位:
1.根据标签和ID (id前加#)
gy=driver.find_element_by_css_selector(“div#u1”) #根据地图的上级ID定位
2.根据className (className前加.)
gy=driver.find_element_by_css_selector(".head_wrapper #u1")
3.根据元素属性
精准定位:
gy=driver.find_element_by_css_selector(“a[name=‘tj_trmap’]”) #根据地图的属性定位;属性名=属性值,id,class,等都可写成这种形式
gy=driver.find_element_by_css_selector("#u a[onclick]") #存在属性;根据登录按钮存在onclick属性定位;
gy=driver.find_element_by_css_selector(“a[class=‘mnav’][name=‘tj_trmap’]”) #多属性定位
模糊定位(正则表达式匹配属性)
^ 匹配到属性头部 gy=driver.find_element_by_css_selector("[name^='tj_trm']")
$ 匹配到属性尾部 gy=driver.find_element_by_css_selector("[name$='map']")
* 匹配到属性中间 gy=driver.find_element_by_css_selector("[name*='ma']")
4.子元素 A>B(B是A的子元素)
gy=driver.find_element_by_css_selector("#u1>[name=‘tj_trmap’]")
5.后代元素 A空格B(B是A的后代元素)
6.div+div 选择紧接再div元素之后的所有div元素
div div 选择div元素内部所有的 div元素
div>div 选择父元素为div元素的所有div元素
a~a:紧跟这a元素后面的所有a元素,默认选中第一个
7.子元素
第一个后代元素 :first-child
最后一个子元素 :last-child [类同:first-child]
第2个子元素 :nth-child(N) [类同:first-child]
冒号前有空格,定位到div下所有级别的第一个子元素
冒号前无空格,定位到div下所有级别的第一个a元素
div最后一个子元素
第3个子元素 :nth-child(N) [类同:first-child]
参考文章:https://www.cnblogs.com/sylvia-liu/p/4469597.html
https://blog.csdn.net/galen2016/article/details/71106900