绝对路径
- 不要轻易使用,除非已经使用了所有方式仍然无法定位
- 方法:根据实际目录,逐层输写。
- 例子:
"/html/body/div[2]/form/span/input" #div[2]指第2个元素
相对路径
- 首先找目录元素是否有”精准元素“即唯一能标识的属性,找到,则用此属性定位;
- 通过元素本身的唯一属性定位
- 方法:找到目标元素所在的”精准元素“即唯一标识属性,使用此属性定位
- 通过id属性定位
"//input[@id='input']"
- 通过name属性定位
"//div[@name='q']"
- 通过上一级目录的唯一属性定位
- 方法:目标元素没有唯一属性,则去找到与目标元素相近的上级目录中”唯一元素“作为起始位置,然后根据此相对位置逐层往子目录编写到目标位置
//span[@id='input-container']/input
"//div[@id='hd']/form/span/input"
"//div[@name='q']/form/span/input"
- xpath做布尔逻辑运算
"//div[@id='hd' or @name='q']"
- 双条件同时过滤
"//div[@id='hd'][@name='q']"
- 目录元素存在层级关系
"//ul[@class='app-list']/li[contains(@class,'safe')]/div"
- 模糊定位
- contains 方法(包含)
"//a[contains(@name,'trnews')]"
- start-with方法(以XX开头)
"//a[start-with(@href,'http')]
- text方法
"//a[contains(text(),'新闻')]"
查找超链接元素的文本内容 - 注意:元素属性值有空格时,尽量不使用带空格,可用contains等其他方法,避开空格
/ul/li[1] # 选取属于 ul 子元素的第一个 li 元素。
/ul/li[last() - 1] # 选取属于 ul 子元素的倒数第二个 li 元素。
//title[@lang] # 选取包含lang属性的title元素
//title[@lang='eng'] # 选取lang属性为eng的title元素
//title[contains(@lang, 'eng')]
//input[@type='name' and @name='kw1']
//input[start-with(@id,'nice')]
//input[ends-with(@id,'很漂亮')]
//input[contains(@id,'那么美')]
//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3]
//div # (获取所有 div 元素,不管在文档什么位置)
/div # (获取根路径 div 元素)
//div/span #(获取 div 元素下一级的 span 元素)
//div//span #(获取 div 元素所有后代的 span)
//ul/li[1] #(获取 ul 子元素下的第一个 li 元素)
//ul/li[last()] #(获取 ul 子元素下的最后一个 li 元素)
//div[@class="demo"] #(获取 class 为 demo 的 div 元素)
//ul/li/a/@href # (获取 ul>li>a 链接的 href 属性)
//ul/li/a/text() # (获取 ul>li>a 链接的内容)
//*[@class="item-0"] #(获取 class 为 item-0 的元素)
//*[contains(@class, "de")] # (获取 class 元素包含 de 的元素)
/
表达式 | 描述 |
---|
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性 |
div | 选取 div 元素的所有子节点 |
/bookstore | 选取根元素 bookstore。 |
bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
//book | 选取所有 book 子元素,而不管它们在文档中的位置 |
bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置 |
//@lang | 选取名为 lang 的所有属性。 |
/bookstore/book[1] | 取属于 bookstore 子元素的第一个 book 元素 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
/bookstore/book[position()❤️] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
//title[@lang=‘eng’] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性 |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00 |
/bookstore/book[price>35.00]//title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 |