1、常用的路径表达式
2、绝对定位和相对定位
绝对路径:从根节点html开始
相对路径:每次只需从第一个已经找到的节点开始
绝对路径的劣势:如果前端经常变化,如增加了div,表达式下次就不能用了
3、谓语
谓语用来查找某个特定的节点或者包含某个指定的值的节点
谓语被嵌在方括号中
① 索引取值
找到多个节点时可以使用
这里的索引下标从1开始而不是0;索引的优先级比 // 高,建议使用索引的时候把前面的部分括号括起来
如:(//div[@class='c-tips-container'])[1]
② 有某个属性
如://input[@value]
③ 属性为某个特定值
如://input[@value=‘kw’]
④ 子元素中属性为某个特定值
如://div[div/@id='wrapper_wrapper']
⑤ 文本
如://a[text()='新闻']
⑥ 选取未知节点
如://title[@*] 表示:选取所有带有属性的 title 元素
4、运算符
如://a[@class='nav-block' and @title='京东' and @target='_blank']
//span[text()='推荐' or text()='导航']
5、函数
介绍其中三个:
text():获取节点的文本内容,如://a[text()='新闻']
starts-with(str1,str2) str1是否以str2开头,如://input[starts-with(@value,'百度')] 表示:value属性以百度开头的input标签
contains(str1,str2) str1是否包含str2,如://input[contains(@value,'百度')] 表示:value属性包含百度的input标签
//a[contains(text(),'抗击')] 表示:文本内容包含抗击的a标签
6、轴定位
如:定位id=form的form节点中 子元素中name='issp'的input标签
//form[@id='form']/child::input[@name='issp'] --> 定位的是input标签,这个input标签是form[@id='form']的子元素,同时name属性是issp
如:定位id=form的form节点中 祖先元素中id='wrapper'的div标签
//form[@id='form']/ancestor::div[@id='wrapper'] --> 定位的是div标签,这个div标签是form[@id='form']的祖先元素(爸爸、爷爷等都行),同时id属性是wrapper
以上的语法在网页页面 f12-elements-ctrl+f 搜索框中敲入,能够定位到目标节点则说明xpath语法正确
在selenium中,用driver.find_element(by=By.XPATH, value="xpath语句")即可实现定位