web自动化之xpath元素的定位

首先我们先打开谷歌的F12开发者模式,然后我们在开发者模式使用ctr+F,就会出现xpath,我们以百度举例
在这里插入图片描述
假如我输入 //link[@rel=‘dns-prefetch’],那它下面有个1of8.。表示的是有这个属性有8个相同的地方,那黄色显示是我们定位到的元素,假如定位不到它就不会显示出颜色。要是显示黄色就是定位到了
在这里插入图片描述

xpath分为:绝对定位、相对定位、部分定位、层级定位

1.绝对定位:
严格按照路径和位置来定位元素 以/开头 父/子关系
比如百度输入框,我们开发者模式的小箭头指向百度输入框,就会出现,百度输入框所在的位置
在这里插入图片描述

绝对定位是从html一层一层的往下定位,所以我们百度的输入框就是/html/body/div/div/div/div/div/form/span[1]/input
一看这么多,万一哪天层级目录发生改变了呢?那我们是不是得在重新修改我们的定位方法?前期还可以,后期的话,随着项目的越来越大,那么就很维护这个脚本
在这里插入图片描述
2.相对定位
参照物:整个html 只要能够在这个页面当中,找到符合属性的元素。 # 以//开头,
怎么写 ://标签名[@属性名称=属性值] * 匹配所有
还是拿百度的输入框来做
在这里插入图片描述

输入 //[@id=‘kw’] 就能找到我们的输入框了,是不是很方便?但是这里有个不好的点是,带了 号,相对定位里的 * 代表啥?就是代表所有匹配的,假如页面上出现了同个id或者同个class呢?应该怎么办?
那我们可以用标签名来。我们发现百度输入框的标签名是input,那我们可以这样写://input[@id=‘kw’],是不是就可以避免同个class或name等存在了?
在这里插入图片描述
假如还担心是否定位不到,xpath给我们提供了逻辑运算 and 和or 表达式为://标签名[@属性名称=属性值 and @属性名称=属性值]
当我们在f12里输入://input[@id=‘kw’ and @class=‘s_ipt’],是不是就可以定位到输入框? or也是同理
在这里插入图片描述
但是是同一个标签名同样的属性怎么办? 我们拿baidu的登录来看看
在这里插入图片描述
有图可见,我们输入 //a[@name=‘tj_login’],百度的登录没有变亮,因为百度的登录在这里,那我们怎么定位它呢?
在这里插入图片描述
这时候我们就用层级定位,找到它的上一级,根据它的上一级ID进行定位它
3.层级定位,层级定位分为两种,一种是层级、一种是轴定位(注:同一层叫兄弟,上一层叫爸爸,爸爸的上一层叫爷爷,爷爷的上一层是祖宗)
我们先来说说第一种:
发现百度的登录有两种同样的标签名,那么我们就找到它上一级的标签名来定位它,也就是它的父亲,咱们再他的f12 xpath里面输入 //div[@id=‘u1’]//a[@name=‘tj_login’],就会发现定位百度可以了
在这里插入图片描述

我们来讲讲第二种,关于轴定位
轴定位: 表达式为 :# 表达式 /轴定位名称::标签名[属性表达]
轴定位分为
哥哥/姐姐定位:preceding-sibling:
弟弟/妹妹定位:following-sibling:
爸爸定位:parent
祖先定位:ancestor

那我们怎么知道哪个是爸爸哪个是兄弟哪个是弟弟妹妹?看下图
在这里插入图片描述
我们先来讲讲兄弟/姐妹定位 preceding-sibling:
在xpath里面输入 //a[@name=‘tj_settingicon’]/preceding-sibling::a[@name=‘tj_login’] 就能定位我们的登录了
在这里插入图片描述

那弟弟/妹妹定位呢?(following-sibling:)
那就在 f12 里面输入//a[@name=“tj_trvideo”]/following-sibling::a[@name=“tj_login”]
在这里插入图片描述

爸爸定位(parent)
在xpath里输入 //a[@name=‘tj_trxueshu’]/parent::div/a[@name=“tj_login”]
爸爸定位的表达式我理解了有点久。 我理解是:爸爸下面的儿子+/parent::父亲的标签名/想要定位到的元素(有错请提醒我更改)
在这里插入图片描述

爷孙定位(ancestor)先不写,等我熟练先

4.部分匹配
部分匹配里有个contains 方法,表达式为 //标签名[contains(@属性,“部分文本内容”)]
这个什么时候用到呢?就是id(不变动/变动),class有多个。text文本太多了。
我们以百度的更多设置来举例
在这里插入图片描述

注:在xpath里的/ 和// 表达啥?/ 表达精确匹配,//表达相对匹配。能用//尽量用//

如何写出尽量少维护的 Xpath 表达式 :http://www.lemfix.com/topics/260

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值