zoukankan      html  css  js  c++  java
  • xpath定位

    1. contains (): //div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点
      2.text():由于一个节点的文本值不属于属性,比如“<a class=”baidu“ href=” http://www.baidu.com 

      “>baidu</a>”,所以,用text()函数来匹配节点://a[text()='baidu']
      3.last():前面已介绍
      4.starts-with(): //div[starts-with(@id,'in')] ,表示选择以’in’开头的id属性的div节点
      5.not()函数,表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。 not()函数通常与返回值为true or false的函数组合起来用,比如contains(),starts-with()等,但有一种特别情况请注意一下:我们要匹配出input节点含有id属性的,写法如下://input[@id],如果我们要匹配出input节点不含用id属性的,则为://input[not(@id)]

     

    http://www.w3school.com.cn/example/xmle/books.xml

    练习:找到最后一个title

    方法1://title[.='XQuery Kick Start'] 

    方法2://book[@category='web' and not(@cover)]/title

    方法3://author[text()="James McGovern"]/../title 

    方法4:/bookstore/book/title[.="XQuery Kick Start"]1

     

    文本中包含某一部分 //book/*[contains(text(),'De')]

    属性中包含某一部分//book[contains(@category,'oo')] 

     

    二、亲属匹配关系:

    parent::* 表示当前节点的父节点元素

    ancestor::* 表示当前节点的祖先节点元素

    child::* 表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素

    self::* 表示当前节点的自身元素

    ancestor-or-self::* 表示当前节点的及它的祖先节点元素

    descendant-or-self::* 表示当前节点的及它们的后代元素

    following-sibling::* 表示当前节点的后序所有兄弟节点元素

    preceding-sibling::* 表示当前节点的前面所有兄弟节点元素

    following::* 表示当前节点的后序所有元素

    preceding::* 表示当前节点的所有元素

     

    举例:

    //price[.=39.95]/preceding-sibling::* 

    //price[.=39.95]/preceding-sibling::year 

     

    练习:基于第三本书元素的位置,查找4个元素:
    1 第二本书的元素
    2 第四本书的元素
    3 父节点书的元素
    4 子节点中year元素

    自己写的:

    //book[3]/preceding-sibling::*[1]

    //book[3]/following-sibling::*[1]

    //book[3]/parent::*

    //book[3]/descendant-or-self::year

     

    老师:

    1 ://book[3]/preceding-sibling::book[1]

     

    2 //book[3]/following-sibling::book[1] 

    3 //book[3]/..                

    //book[3]/parent::bookstore 

    4 //book[3]/child::year
    /bookstore/child::book[1]/child::year 

     

    基于轴去找,非常强大

    孙节点:/bookstore/descendant::year[1] 

    找祖先://price[.='29.99']/ancestor::bookstore 

     

    //book[@*[2]]

     查找有第二个属性的book

     

     

    总结:

     

    定位的思路:

    1 能用id就用id

    2 尽量别用绝对定位,多用相对定位方式

    3 难定位的时候,常用三种方式

      * 查看元素是否有唯一的与众不同的属性值

      * 使用 and 将元素的多个属性进行组合,查看组合的多个属性

      * 使用轴,先一个目标元素周围的元素,找到一个好定位的,然后

    使用相对位置的方式,使用轴来进行定位。

    4 使用contains函数进行文字的部分文字匹配

    //p[contains(.,"gloryroad")]

     

     

     

     

     

    练习:页面不断变化的id,如何定位

    http://mail.126.com/  定位输入框

     

    //input[@placeholder="邮箱帐号或手机号"]   尝试去找唯一性的文字

     

    或者 //input[contains(@id,'auto-id') and @name="email"]  尝试使用contains模糊匹配,匹配不到的加and条件,再匹配一个

     

     

     

     

     

     

     

     

  • 相关阅读:
    puppeteer 离线安装chromium
    如何在Taro项目中使用Iconfont(阿里图标)
    POI3.8内存中限制行数为100问题记录
    centos下puppeteer调用chromium报错,缺少包
    VS Code 简单配置运行Java
    使用VSCode 断点调试 js项目,html页面
    Java--Excel--poi 边框、单元格换行、 背景色、合并单元格相关
    浅析Spring Aware
    Spring MVC 注解
    异常处理
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8620405.html
Copyright © 2011-2022 走看看