zoukankan      html  css  js  c++  java
  • xpath语法

    一.曾经最头疼的问题

    xpath中  // 与 .//   的区别

    1 <span style="font-family:SimSun;"><a>  
    2   <b>blank</b>  
    3     <c id="z">  
    4       <b>content</b>  
    5     </c>    
    6 </a></span>  

    上面是一个简单的示例文档结构,在selenium中webElement也有一个findElement的方法,用于查找该元素下的子孙元素,假如我们已经获得了C元素,我们现在要获取C元素下的b元素:请注意以下两种代码的区别。

    写法一:webElement b = C.findElement(By.xpath(".//b"))

    写法二:webElement b = C.findElement(By.xpath("//b"))

    其实两个代码的区别就在于xpath路径加不加点的问题上,事实证明,写法一取到的是包含blank的b元素,而写法二取到的是包含content的b元素。所以其实加点和不加点是有很大区别的,在查找整个页面的时候没有区别,但是在当前元素调用此方法时就有了,加点代表取当前元素为根节点向下查找元素,而不加点是以整个页面为根元素向下查找的。所以firePath这个插件还是很智能的,默认给xpath路径加上了点,以防止在当前元素下找元素时发生错误。

    二.基础语法

    位置路径

     位置路径标识了和上下文有关的一组XPath节点,是XPath表达式的特化,使用'/'表示层级关系。
     
     位置路径有相对路径和绝对路径。
     
       相对路径:
         "nodename/childnodename"
          该路径在当前节点下查找到符合nodename的节点,再寻找nodename的子节点childnodename。
          路径的开始位置是 当前节点 。
       
       绝对路径
         "/nodename/childnodename"
          在路径字串前加了一个'/',表示字串从根开始表示,也就是nodename必须是表示根节点,才能找到childnodename。
         
      其它路径符号
      
        // 搜索所有位置节点。
          "//nodename"
           文档树中的所有名为nodename的节点。
          "//nodename/childnodename"
           文档树中的所有父元素名为nodename的childnodename节点。

       . 引用节点自身
         "./nodename/childnodename"
          是"nodename/childnodename"的完整写法,作用一致。
         ".//nodename"
          当前节点下的所有nodename节点。

       .. 引用节点自身的父节点
         "../nodename"
          nodename的父节点。
         "../nodename/othernodename"
          nodename的父节点的子节点othernodename,选择到的是nodename的兄弟节点。
          
       * 通配符号。
        "nodename/*"
         表示nodename的任意名称的子节点。
       
       [] 谓词符号,用于筛选元素。比如,list/item[2] 代表第二个 item 元素。实际上 [] 是一个谓词(参见 谓词)。
        "nodename[1]"
         表示nodename的第一个子节点。
        "nodename[@ss=/"1/"]"
         表示有属性ss值等于"1"的nodename节点。
         谓词中还可以使用其它的boolean表达式。
        
       @ 属性符号,后跟属性名。@* 也可以使用通配符表示所有属性。
        "nodename/childnodename[@ss]"
         筛选nodename/childnodename,找出拥有属性ss的。

       | 分隔符号,分隔多个路径
        "nodename/childnodename | nodename/otherchildnodename"
         节点nodename的childnodename和otherchildnodename节点。 

    更多点击:http://www.w3school.com.cn/xpath/xpath_examples.asp

  • 相关阅读:
    用代理IP进行简单的爬虫——爬高匿代理网站
    python利用django实现简单的登录和注册,并利用session实现了链接数据库
    python基础知识——基于python3.6
    笔记2_列表、元组、字典
    wpf Command
    可枚举对象操作
    2019寒假训练营寒假作业(二) 程序题部分
    2019-01-23 寒假作业(一)
    2019寒假训练营第二次作业
    网络空间安全概论 学习笔记(二)
  • 原文地址:https://www.cnblogs.com/qingsheng/p/8903357.html
Copyright © 2011-2022 走看看