Python3+Selenium界面自动化-06-元素定位(xpath)
前几篇讲的主要是通过id、name、class_name、tag_name、link_text、partical_link_text、这些单一的定位方式,他们只能针对各自的领域进行定位,而且某些元素则无法定位到,因为上面的几种方式都有各自的局限性。
假如当前有个元素,它没有id、name、class_name,tag_name不唯一,且不是链接文本,那我们都无法通过上面的方法将它定位到。
这个时候我们的xpath就闪亮登场来了!
我们假设【地图】这个链接不能用之前的方法来定位,我们通过编写xpath将他进行定位。我们可以打开谷歌的开发者模式,里面可以验证我们的xpath是否书写正确。
1、通过绝对路径定位(一般不用)
绝对路径的写法就跟我们平时访问计算机的某一个文件一样,一层层的往下好,这种方法绝对能找到,但是xpath书写过长且一旦前端的html代码有改动,这条xpath就有可能失效。
写法:/html/body/div/div/div[3]/a[3]
html/body/第一个div/第一个div/第三个div/第三个a
就是这样一层层往下找,我们把xpath放到谷歌开发者模式的搜索框中回车,加入书写正确就会将该元素标黄显示
第二种相对路径
引入一下【/】和【//】的概念
【/】表示在当前子节点下面找
【//】表示在当前所有子节点或者子节点的子节点下面找,只要符合规则就行
举例:我们现在要定位span
—html
—div
——div
——div
———span
——a
【/】的写法:/html/div/div[2]/span
【//】的写法://div/span(规则:找到div下面包含span标签)
写法1://div[@id=‘s-top-left’]/a[3]
在id为s-top-left的div下找到第三个标签
写法2:标签内多属性联合定位 //a[@target=’_blank’ and @class='mnav c-font-normal c-color-t]
写法3:属性值模糊查找 //a[contains(@href,‘map’)]
写法4:文本模糊定位 //a[contains(text(),‘地’)]
写法5:文本绝对定位 //a[text()=‘地图’]
写法6:通过返回父节点查找 //a[contains(text(),‘新闻’)]/…/a[contains(text(),‘地图’)]
【…】表示返回父节点
xpath的写法有很多,不管怎么写,只要能定位且后期维护成本低那就是好的xpath写法。