领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

XPath语法实战简介

nixiaole 2025-08-03 07:22:19 知识剖析 1 ℃

当我们用自动化测试工具对网页进行处理时,首先就需要定位到我们业务中指定的元素,然后才能获取这个元素的内容、进行点击或输入内容等操作。XPath全称是XML路径语言(XML Path Language),顾名思义它是用来标识XML文件中节点路径的。而我们常见的网页基本都是基于Html语言的,其实也算是XML文件的一种,所以也可以用XPath语法来进行定位。另外需要说明的是目前主流浏览器的调试功能里都自带有控制台,大家可以直接用控制台功能来验证自己写的XPath路径是否正确,能极大的提高定位效率。下面我们也主要以浏览器控制台来介绍我们的XPath路径功能。XPath的基础语法在头条百科或者相关百科内大家都可以查得到,这里我们就不过多赘述了。这里我们主要对XPath的实际运用进行介绍。

我们以淘宝的商品列表页面为例,如我们想获取商品连接、商品名称或者价格之类的信息,首先就需要定位到页面中所显示的元素位置,具体定位方式大家可以参考我前面文章,里面有详细的步骤介绍。


定位到元素后,首先我们需要先对页面结构进行个简单的分析,可以看到我们所需要的商品都是在一个class名为items的div内的,然后里面包含的就是一个个商品,而单个商品又是由图片和文字两部分组成的,他们也分别在两个div内,而我们需要的商品链接和名称位于文字部分的标题部分中。是不是听着比较绕口,我们用xpath来表述出来就简单多了。首先我们要找的内容在items的大div内,那么XPATH表述为“//div[@class ='items']”。然后我们要找到items内的每一个的商品框,具体表达式为“/div[@class = 'item J_MouserOnverReq ']”。而对于单个商品我们只需要得到它文字部分,那就是“/div[@class = 'ctx-box J_MouseEneterLeave J_IconMoreNew']”。依次类推,我们得到标题文字所在的A标签,同时需要将前面的每一级路径都带上,最终得到完整的XPath为:

$x("//div[@class ='items']/div[@class = 'item J_MouserOnverReq  ']/div[@class = 'ctx-box J_MouseEneterLeave J_IconMoreNew']/div[@class = 'row row-2 title']/a[@class = 'J_ClickStat']")

我们打开浏览器的控制台,然后将我们的xpath语句放进去看看效果如何。

大家可以看到我们一共找到了45个商品的标题信息,但是我们看到的页面内实际是有48个商品的,还有3个商品哪去了呢?眼尖的小伙伴可能已经发现了,少的那3条就是页面最前面那标记有广告字样的三条商品。我们再回到页面代码看看,带广告标的class属性都会多个"item-ad"属性,当然如果你想过滤掉广告其实到这里就可以了,如果需要包含广告商品该怎么处理呢?XPath里面也提供了便捷的方式进行选择,只需要将@class = 'XX'改成contains(@class,'XX')即可。最后我们的XPath语句就是:

$x("//div[@class ='items']/div[contains(@class, 'item J_MouserOnverReq ')]/div[@class = 'ctx-box J_MouseEneterLeave J_IconMoreNew']/div[@class = 'row row-2 title']/a[@class = 'J_ClickStat']")


这里需要说明下就是对于这个例子来说,其实只要将第二个div的筛选条件直接去掉也是可以的。因为就这个页面而言items节点下只有这两个类型的标签,并没有其他的div标签了,不加条件其实就代表取全部的结果,所以说在实际运用的时候也需要灵活根据实际页面情况具体分析。

除了上面我们用到的contains方法以外,XPath还内置了许多函数和运算方法,可以通过组合或内置方法来简化我们的语句。再简单举个例子,上面我们找到每个商品链接信息了,但是xpath的语句写了一长条,其实我们可以用它内置的关系轴进行简单查找,具体语句为:

$x("//div[@class ='items']/descendant::a[@class = 'J_ClickStat']")

其结果和上图一样这里就不截图了。不过还是那句话,具体页面具体分析灵活运用。

篇幅原因这里只对简单的页面数据获取做了个介绍,本文内容仅做技术学习和讨论,如大家在学习中有什么问题,可以留言或私信我,大家一起学习交流。

Tags:

最近发表
标签列表