1、Xpath表达式:比较强大、灵活的选择元素的方式
2、目前主流的浏览器chrome、firefox、edge、safari都支持xpath语法,xpath和xpath2两个版本,目前支持的是xpath1的语法
3、Xpath:爬虫框架Scrapy、手机APP框架 Appium
一、
根据id属性来选择:[@属性名=“属性值”]
选择id为tes的元素 //*[@id='tes']
选择有id属性的元素 //*[@id]
选择所有属性id名 且tag为p //p[@id]
二、
根据class选择:注意 属性值必须一模一样,
div元素 //div[@class='tes']
三、
选择属性包含multiple的元素
<select class="multi_choice" multiple>
//*[@multiple]
四、
CSS:选择属性值包含某个字符串的元素abc
a[href*="abc"]
CSS::选择属性值某个字符开头的
a[href^='http']
CSS:选择属性值谬个字符串结尾的元素
a[href$='gov.cn']
Xpath:属性style 含有color
//*[contains(@style,'color')]
XPath:属性style以color开头//*[starts-with(@style,'color')]
目前浏览器不支持:以..为结尾
五、
Xpath : 可以按照次序选择:
选择p元素的第二个子元素://p[2]
父元素为div中的p的第二个元素
//div/p[2]
p类型的最后一个元素
//p[last()]
倒数第二个元素
//p[last()-1]
六、
xpath:可以选择子元素的次序范围
比如:选择option类型的第一个到第二个子元素
//option[position()<=2] or //option[position()<3]
获取class属性为a的前三个子元素
//*[@class='a']/*[position()<3]
选择后三个元素
//*[@class='a']/option[position()>=last()-2]
七、
组选择器
选择所有的option和h4元素,可以使用
// option | //h4
选择所有clss为a和class b的元素 可以使用:
//*[@class='a'] | //*[@class='b']
八、
选择父节点
/..:属性本身没有什么特征
选择id为b的父节点
//*[@id = 'b']/..
九、
兄弟节点 : following-sibling::
选择class为b的元素的所有后续兄弟节点div
//*[@class='b']/follwing-sibling::div
选择前面的兄弟节点
//*[@class='b']/preceding-sibling::div
十、
陷阱:找某个对象的内部的p,则需要在前面加上,
需要在某个对象加上.
c = self.driver.find_element_by_id("c")
e = c.find_elements_by_xpath(".//p")