网站首页 > 知识剖析 正文
当我们用自动化测试工具对网页进行处理时,首先就需要定位到我们业务中指定的元素,然后才能获取这个元素的内容、进行点击或输入内容等操作。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']")
其结果和上图一样这里就不截图了。不过还是那句话,具体页面具体分析灵活运用。
篇幅原因这里只对简单的页面数据获取做了个介绍,本文内容仅做技术学习和讨论,如大家在学习中有什么问题,可以留言或私信我,大家一起学习交流。
猜你喜欢
- 2025-08-03 206.C# XML读取XPath
- 2025-08-03 python中xpath学习笔记
- 2025-08-03 XPath定位如何在App自动化测试中大显神威
- 2025-08-03 如何用xpath根据下面方框里的文字定位到上面标签?
- 2025-08-03 「2022 年」崔庆才 Python3 爬虫教程 - 网页解析利器 XPath 初体验
- 2025-08-03 WebDriver-工具辅助生成XPath语法和CSS语法
- 2025-08-03 Python+Requests+Xpath+lxml 数据采集
- 2025-08-03 python爬虫之xpath解析
- 2025-08-03 Python爬虫之xpath用法全解析
- 2025-08-03 Python解析库lxml与xpath用法总结
- 08-03mysql 工作时工作日函数 计算两个时间间隔分钟数
- 08-03开源鸿蒙OpenHarmony 5.1.0(API 18)正式上线:进一步增强ArkUI
- 08-03MySql
- 08-03MYSQL自动导出某表数据到EXCEL的方案
- 08-03MySQL进行整库数据备份「表(结构+数据)、视图、函数、事件」
- 08-03SQL高效使用20招:数据分析师必备技巧
- 08-03MySQL 中时间函数详解,及加减计算总结和使用!
- 08-03MySQL 日期函数
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)