转载别人的,原文链接如下,我在这里做个备忘
原文:https://blog.youkuaiyun.com/hou_angela/article/details/80305828
一、XPath是什么:
XPath是一种在XML文档中查找指定信息的语言;可用于在XML中进行元素和属性的遍历
XPath使用表达式来选取XML中的节点或节点集;
二、XPath常用定位方法:
1. 通过元素本身的唯一属性定位
方法:找到目标元素所在的”精准元素“即唯一标识属性,使用此属性定位
1.1 通过id属性定位
例:find_element_by_xpath("//input[@id='input']") #@后跟属性,可以是任何属性
1.2 通过name属性定位
例:find_element_by_xpath("//div[@name='q']")
2. 通过上一级目录的唯一属性定位
方法:目标元素没有唯一属性,则去找到与目标元素相近的上级目录中”唯一元素“作为起始位置,然后根据此相对位置逐层往子目录编写到目标位置
例:find_element_by_xpath("//span[@id='input-container']/input")
find_element_by_xpath("//div[@id='hd']/form/span/input")
find_element_by_xpath("//div[@name='q']/form/span/input")
3. xpath做布尔逻辑运算
find_element_by_xpath("//div[@id='hd' or @name='q']")
4. 双条件同时过滤
find_element_by_xpath("//div[@id='hd'][@name='q'")
5.目录元素存在层级关系
例1: find_element_by_xpath("//ul[@class='app-list']/li[contains(@class,'safe')]/div")
例2:定位上一层再定位目标元素(定位dl再定位dt)
find_element_by_xpath("//form[@id='J_login_form]/dl/dt/input[@id='J_password']")
6. 模糊定位
6.1 contains 方法(包含)
find_element_by_xpath("//a[contains(@name,'trnews')]")
6.2 start-with方法(以XX开头)
find_element_by_xpath("//a[start-with(@href,'http')]")
6.3 text方法
find_element_by_xpath("//a[contains(text(),'新闻')]") 查找超链接元素的文本内容
find_element_by_xpath("//*[text()='新闻']") 查找所有内容为退出二字的元素
7、xpath的一些包含逻辑的用法
//*[count(XXX)=2] //统计XXX元素个数=2的节点
//*[local-name()='xxx'] //找到tag为xxx的元素
//*[starts-with(local-name(),'x')] //找到所有tag以x开头的元素
//*[contains(local-name(),'x')] //找到所有tag包含x的元素
//*[string-length(local-name())=3] //找到所有tag长度为3的元素
//xxx | //yyy //多个路径查找