找寻一些信息-Xpath

5 篇文章 0 订阅
2 篇文章 0 订阅

对于浏览器中的某些信息我需要提取的时候,有几种方法,使用Xpath来定位这些元素的位置然后提取,或者是用正则表达式来匹配,不知道可不可以使用css的来定位元素获取相关信息,我觉得应该也是可以的

在写UI自动化的时候,selenium中操作元素的时候最靠谱的定位方式应该就是Xpath和css的方式了,xpath就像是地址的定位,css就像是样子的定位。
在写爬虫的时候虽然你可以使用正则来匹配你需要的信息,但是用Xpath会更方便,至少在我看来正则比xpath学起来更头疼吧。可能你会觉得爬虫不是有美丽汤BeautifulSoup来提取信息,但是通过各种测试,匹配的效率来说,Re>Xpath>BeautifulSoup,当然难度来说也是成正比的

我觉得用一个东西得灵活点用,不能死板的用,可以举一反三的用,譬如:我知道xpath可以定位元素,那我平时除了脚本中用到了它,还能怎么用呢?
有时候我网上看到了一些信息,它是这样的,我想一次性都复制完,没法复制,顿时我就想来句…
在这里插入图片描述

这时候咱们就装一个谷歌浏览器的插件,Xpath helper,这个样子的
在这里插入图片描述
在这里插入图片描述

1.点击 Ctrl + Shift + X 激活 XPath Helper的控制台,然后您可以在 Query 文本框中输入相应 XPath 进行调试了,提取的结果将被显示在旁边的 Result 文本框中
2.按住Shift键鼠标在页面上的元素。查询框会不断更新,以显示鼠标指针下面的元素充分XPath查询。结果框其右侧将显示评价结果的查询。
3.如果需要的话,可以直接在控制台编辑XPath查询。在结果框中将立即反映任何变化。
4.再次按Ctrl-Shift键-X关闭控制台

咱先调出谷歌的F12,ctrl+F的查找中是支持xpath的语法的,先定位到想要的信息位置
在这里插入图片描述

到指定的标签下,右键Copy,然后Copy Xpath,然后ctrl+f粘贴到Xpath
在这里插入图片描述
helper然后就显示出来了信息了,就可以复制了,但是只有一小段,那么就需要修改xpath表达式了

直接定位到整个子元素的父元素的标签位置,就可以复制所有信息了
在这里插入图片描述

还有次是需要复制snmp的相关oid信息,网上有很多,想着一次性复制不调格式就好,所以也可以使用xpath表达式来实现
在这里插入图片描述

//div[@class=‘table-box’]/table/tbody/tr/td[2],这样我就选除了所有oid信息,然后使用//div[@class=‘table-box’]/table/tbody/tr/td[1]就选出了所有oid的含义信息

在Python中配合lxml库来使用是这样子的

from lxml import etree
selector=etree.HTML(rsp.content)  #转化为能被XPath匹配的格式
selector.xpath(表达式)  #返回为一列表

遇到一个问题就是选择父元素下的子元素是出现找不到的情况,但是直接找子元素却能够找到,但是这个元素有很多个且是一个数量可能随时发生变化的元素,虽然最后在使用其他的方法解决了,但是实际上我可以使用这个方法来解决更为方便

1.starts-with方法 所以使用到xpath中的一个starts-with方法,匹配一个属性开始位置的关键字 //*[starts-with(@id,”cbi-asso-“)]

2.contains 方法 或者使用另外一个方法contains 匹配一个属性值中包含的字符串 //*[contains(@id,”bi-asso”)]

3.与text组合使用 //a[text()=’百度搜索’] 或者 //a[contains(text(),”百度搜索”)]

4.end-with方法 //input[end-with(@name,’name1′)] 查找name属性中结束位置包含’name1’关键字的页面元素

例子一://*[@id=”maincontent”]/div[4]/table[1]/tbody/tr/td[1]
解释:选择所有id名为”maincontent”下第四个div标签下的第一个table标签下的tbody下的tr标签的第一个td标签
因为tr标签存在多个,所以会将tbody下的所有的tr标签全部选择再一次选择他们的第一个td标签

例子二://*[@id=”kw” and @name=”wd” or @class=”s_ipt”]/text()
解释:选择所有id属性为kw而且name属性为wd 或者 class属性为s_ipt的元素的文本信息 重点:and or
text()的使用

例子三://[@id=”kw”]/@name|//[@name=”sw”]/@id|//*[@id=”cw”]/@class
解释:选择所有id属性为kw的元素的name属性的值 和 所有name属性为sw的元素的id属性的值 和
所有id属性为cw的元素的class属性的值
重点:获取元素的某个属性的值:@在selenium中的xpath使用的是.get_attribute(“href”)的方法
而不能直接使用@来获取 多条xpath语句的组合: | 可以选取若干个路径

例子四://div[starts-with(@id,”a”)]/text()
解释:这里使用starts-with方法提取div的id标签属性值开头为a的div标签

关注“码点小干货”公众号,一起分享一起交流各类信息技术和工具资源

愿你眼中总有光芒! - 愿你活成想要的样子!

公众号回复xpath 获取谷歌xpath调试插件,方便测试页面xpath输出的信息

在这里插入图片描述

复制粘贴下语法,方便下次看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值