Xpath使用技巧

绝对路径

  • 不要轻易使用,除非已经使用了所有方式仍然无法定位
  • 方法:根据实际目录,逐层输写。
  • 例子:
"/html/body/div[2]/form/span/input" #div[2]指第2个元素

相对路径

  • 首先找目录元素是否有”精准元素“即唯一能标识的属性,找到,则用此属性定位;
    • 通过元素本身的唯一属性定位
      • 方法:找到目标元素所在的”精准元素“即唯一标识属性,使用此属性定位
      • 通过id属性定位"//input[@id='input']"
      • 通过name属性定位"//div[@name='q']"
    • 通过上一级目录的唯一属性定位
      • 方法:目标元素没有唯一属性,则去找到与目标元素相近的上级目录中”唯一元素“作为起始位置,然后根据此相对位置逐层往子目录编写到目标位置
      • //span[@id='input-container']/input
      • "//div[@id='hd']/form/span/input"
      • "//div[@name='q']/form/span/input"
    • xpath做布尔逻辑运算
      • "//div[@id='hd' or @name='q']"
    • 双条件同时过滤
      • "//div[@id='hd'][@name='q']"
    • 目录元素存在层级关系
      • 在这里插入图片描述
        "//ul[@class='app-list']/li[contains(@class,'safe')]/div"
    • 模糊定位
      在这里插入图片描述
    • contains 方法(包含)"//a[contains(@name,'trnews')]"
    • start-with方法(以XX开头)"//a[start-with(@href,'http')]
    • text方法"//a[contains(text(),'新闻')]"查找超链接元素的文本内容
    • 注意:元素属性值有空格时,尽量不使用带空格,可用contains等其他方法,避开空格
/ul/li[1]             # 选取属于 ul 子元素的第一个 li 元素。
/ul/li[last() - 1]    # 选取属于 ul 子元素的倒数第二个 li 元素。
//title[@lang]         # 选取包含lang属性的title元素
//title[@lang='eng']   # 选取lang属性为eng的title元素
//title[contains(@lang, 'eng')]
//input[@type='name' and @name='kw1']
//input[start-with(@id,'nice')]
//input[ends-with(@id,'很漂亮')]
//input[contains(@id,'那么美')]
//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3]
//div  # (获取所有 div 元素,不管在文档什么位置)
/div  # (获取根路径 div 元素)
//div/span  #(获取 div 元素下一级的 span 元素)
//div//span  #(获取 div 元素所有后代的 span)
//ul/li[1]  #(获取 ul 子元素下的第一个 li 元素)
//ul/li[last()]  #(获取 ul 子元素下的最后一个 li 元素)
//div[@class="demo"]  #(获取 class 为 demo 的 div 元素)
//ul/li/a/@href  # (获取 ul>li>a 链接的 href 属性)
//ul/li/a/text() # (获取 ul>li>a 链接的内容)
//*[@class="item-0"]  #(获取 class 为 item-0 的元素)
//*[contains(@class, "de")] # (获取 class 元素包含 de 的元素)
/
表达式描述
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点
选取当前节点的父节点
@选取属性
div选取 div 元素的所有子节点
/bookstore选取根元素 bookstore。
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置
//@lang选取名为 lang 的所有属性。
/bookstore/book[1]取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()❤️]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book[price>35.00]//title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值