php的html的xpath,Xpath定位的总结

这篇博客深入探讨了XPath在网页元素定位中的使用,包括相对定位和绝对定位的概念,节点操作如选取父节点和子节点,以及通过标签、属性和逻辑运算符进行精确和模糊查找的方法。还介绍了轴定位技术,如查找前后兄弟节点和祖先子孙节点。内容详实,适合前端开发者和网页自动化测试人员学习。
摘要由CSDN通过智能技术生成

1.相对定位与绝对定位

//表示相对定位,对于经常发生变化的页面或者节点要用相对定位进行查找

21e6ff848acec4b8ec9dfa4f5718c2e9.png

/表示绝对定位,一成不变的时候可以用绝对定位进行查找

div-tutorial-355455.html

2.节点

顶级节点:bookstore

00e1fdcada664df9e58a85a2a3ad8680.png当前节点:“.”

如果当前节点有多个则匹配多个

c02d7cc4d3f9eeb14b7d5eaae5560f91.png

如果当前节点只有1个,则匹配1个

a82959f5dc1cdd6a09a6f94b3593acb2.png

选取当前节点的父节点:”..”

对于html/body下的p来说它的父节点就是body,这是用绝对路径,表示必须从html下找到body再找到p,然后匹配p的父节点。

eac22ae5f11264db98b4dbb55f9f6a8e.png

如果用相对路径来找父节点,可以看到从p开始就不考虑它的绝对位置,也就是说从body开始 符合父节点条件的所有元素都会被找出来。

div-tutorial-355455.html

查找当前节点下的所有元素://book[1]/..

这个是节点索引+父节点的方式

bf5df26b73bba8f3c00078c04147de60.png

3.通过标签定位元素

//book:找到所有名为book的标签

48445b2d2242988b42127604516d8b72.png

再来一个百度的

93547ade96bdb33185b73cfdcc248a52.png

4.属性定位

1.定位属性为category 的元素

//book[@category='cooking'] ‘[]’表示查找属性

ef34d8e2ccf8ea92b20351e35c75bbbb.png

2.使用text文本属性精确定位,text也可以用.代替

查找//book//price下文本为30.00的元素

05ded28adeca26a7ae749ef662cd342e.png

查找year标签中text文本中大于2004的元素

a698f33d87015b105c0e3a0dd10ffc09.png

3.使用contains模糊定位,contains意为包含

模糊定位查找文本信息包含Potter的元素://title[contains(text(),"Potter")]

2ef8ebceeea7fad0917deb03fcc14cdf.png

扩充练习

1de6173553f4a742edc3522844e88049.png

1f05cb2451b192b3b5db14d63c81b576.png

4.”*”表示任何属性所有属性

查找所有带有属性值的://@*

div-tutorial-355455.html

cd44975b81387f90e839da786b7e60d8.png

查找title标签里所有有属性的元素:

ef27e52c01352d55eb74f0fc0c25f743.png

用Not取反,表示查找title标签里没有属性的元素,这里没有所以没查找出来

@*表示所有属性

not(@*)表示没有属性

5.查找带有category属性的元素

//@category

428cddf02247e218ad7b50d7a4b074cd.png

5.逻辑运算符

1.通过and运算符定位元素

//book[@category="web" and @cover="paperback"]

b28835f4b5a1f8cc6531b6a5725f1605.png

2.通过or运算符定位元素

//book[@category="children" or @cover="paperback"]

71c2865f38e895f0605128177184caa6.png

3.通过取反not运算符定位元素

//book[not(position()>2)] 取book标签中position大于2的

6f3daa5c50d790ab3a7fa61ef02f1e47.png

//book[not(position()>2)] not取反

51bfe9e039184492918436fa764f02b8.png

//year[not(.=2005)] 表示取非2005文本节点的year节点

0c9e06380c2c6f610a776086a807b0f8.png

通过“>=”“<=”运算符定位元素

//price>=30 查找元素中是否存在price大于等于30的 存在返回Boolean true 不存在返回Boolean: false

77255c916da69c9d249d2316facf3dc4.png

eb8e638a5fc9b9889ccfa56a81ac4437.png

4.通过“!”运算符定位元素

//book[@category!='web' ]

f187fb9e78f2140574326b2b09f50ac1.png

6.通过节点索引定位元素

1.查找第一个元素的

//book[1]:找到第一个标签为book的

6a143de8169df7df09ef6c00b1494e45.png

2.通过position定位第3个元素

//bookstore/book[position()=3]

74c7c55936e8b5dba356383aeed793b7.png

3.通过position取多个元素

//bookstore/book[position()>=2]

bc928cb6366f8debebaded0bfe2840f9.png

4.通过last()函数找到最后一个元素

//book[last()]

div-tutorial-355455.html

5.通过last()函数找到倒数第二个元素

//book[last()-1]

ca0a4f7a1c918fcc8855e2424850a1bd.png

7.轴定位

查找book[1]/title的父元素://book[1]/title/parent::*

a4cc6f5d5b85cdc379c092ae786e0999.png

查找book[1]的子元素://book[1]/child::*

417d32469aa09b51fbabbdd9c927237e.png

//book/child::price 查找book标签下的所有子元素中标签为price的

div-tutorial-355455.html

following-sibling的应用

//bookstore/book[1]/child::title/following-sibling::*

following-sibling表示当前节点的后序所有兄弟节点元素

就是说查找title后面所有兄弟节点

0238dc6d3e65913a46df221ce9dcf6f7.png

/bookstore/book[1]/child::title/following-sibling::author

following-sibling::author 指定查找title后面所有兄弟节点中名为author 的元素

d7df1ce44d4e974b58fb6c25c812edcd.png

preceding-sibling::* 表示当前节点的前面所有兄弟节点元素

//bookstore/book[1]/child::price/preceding-sibling::* 意为查找price节点前面所有的兄弟元素

ae6050a063c4abd4edbaab97236cdac0.png

查找祖先节点包括自身://book[1]/ancestor-or-self::*

86ba926446b18067c200bc753b2678ff.png

查找子孙节点包括自身://book[1]/descendant-or-self::*

5489da50c184be659d33fa5b7800a93c.png

查找当前节点的所有元素://book[1]/preceding::* 查找当前节点下的所有元素

753b82fa3ba0dd2437eac61d96b488d3.png

//book[2]//preceding::* 会把book[2]以及book[2]节点之前的所有元素都找出来

15a0431346fad7649eede60b8d0f3ca0.png

轴总结:

parent::* 表示当前节点的父节点元素

ancestor::* 表示当前节点的祖先节点元素

child::* 表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素

self::* 表示当前节点的自身元素

ancestor-or-self::* 表示当前节点的及它的祖先节点元素

descendant-or-self::* 表示当前节点的及它们的后代元素

following-sibling::* 表示当前节点的后序所有兄弟节点元素

preceding-sibling::* 表示当前节点的前面所有兄弟节点元素

following::* 表示当前节点的后序所有元素

preceding::* 表示当前节点的所有元素

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值