zoukankan      html  css  js  c++  java
  • 自动化8-xpath

      Xpath表达式是用于XML和HTML文档中选择节点的语言。xpath语法中,整个HTML文档根节点用“/”表示,若我们想选择的是根节点下面的html结点,则在搜索框框输入 “/html/body/div”。

    1、绝对路径选择

      从根节点开始,到某个节点,每层一次写下来,每层之间用“/”分隔的表达式,就是某元素的绝对路径。

    方法 find_elemenet_by_xpath()、find_elements_by_xpath()。

    2、相对路径选择

      选择网页中某个元素,无论在什么位置。xpath需要前面加 //, 表示从当前节点往下寻找所有的后代元素。所以可写为:elements=driver.find_elements_by_xpath("//div//p")。

      若要选择div下的所有p元素,可以选择:elements=driver.find_elements_by_xpath("//div/p")。

    3、通配符

      若选择所有div节点的所有直接子节点,使用表达式 //div/*。

    4、依据属性选择

      xpath可以依据属性选择元素。

    格式:[@属性名=‘属性值’]

    注意:* 属性名注意前面有个@;

       * 属性值一定要用引号,可以单/双引号;

      1)依据id属性选择

        选择id为west的元素,可以是 //*[@id='west']

      2)依据class属性选择

        选择所有select元素中class为single_choice的元素,可以这样 //select[@class='single_choice']

        若一个元素class有几个,若要选他,class属性应相同的写上去。

      3)依据其他属性

        选择具有multiple元素的所有页面元素,可以  //*[@multiple]

      4)属性值包含字符串

        * 要选择style属性值包含color字符串的页面元素,可以 //*[contains(@style,'color')];

        * 要选择style属性值包含color字符串开头的页面元素,可以 //*[starts-with(@style,'color')];

        * 要选择style属性值以某个字符串结尾的页面元素,可以 //*[ends-with(@style,'color')];(目前浏览器不支持);

    5、按次序选择

      xpath依据次序选择元素,直接在方括号中使用数字表示次序。

      1)第几个子元素

        eg:  //div/*[2]    父元素为div的第2个子元素,不管什么类型;

      2)某类型倒数第几个子元素

        eg:  * 选择p类型倒数第1个子元素: //p[last()]

            *  选择p类型倒数第2个子元素: //p[last()-1]

            *  选择p类型倒数第3个子元素: //p[last()-2]

    6、范围选择

      xpath还可以选择子元素的次序范围。

      1)选择option类型第1到2个子元素:  //option[position()<=2]

                         //option[position()<3]

      2)选择class属性为multi_choice的前3个子元素:  //*[@class='multi_choice']/*[position()<=3];

      3)选择class属性为multi_choice的后3个子元素:  //*[@class='mulyi_choice']/*[position()>=last()-2]

    7、组选择、父节点、兄弟节点

      1)组选择:* css的组选择,表达式使用 逗号 隔开;

             *  xpath的组选择,表达式使用 竖线 隔开;

    //CSS的写法:选择所有的 class为single_choice和class为multi_choice的元素
    .single_choice, .multi_choice
    
    等同于 xpath的:
    //*[@class='single_choice'] | //*[@class='multi_choice']

       2) 选择父节点:某个元素的父节点用 /.. 表示。

          eg: 选id为china的节点的父节点://*[@id='china']/..

          当某个元素没有特征可以直接选择,但是他有子节点有特征,就可以采用这种方法,先选择子节点,再指定父节点。还可以继续找上层父节点。

       3)兄弟节点选择:* css要选择某个节点的后续兄弟节点,用波浪线;

                 * xpath的语法是:following-sibling::

    //CSS写法:选择class为single_choice的元素的所有后续兄弟节点
    .single_choice~*
    
    // xpath的写法是:
    //*[@class='single_choice']/following-sibling::*

                * xpath选择前面的兄弟节点:preceding-sibling::

    //选择class为single_choice的元素的所有前面的兄弟节点
    //*[@class='single_choice']/preceding-sibling::*

    注意:要在某个元素内部使用xpath选择元素,需要 再xpath表达式最前面加个点。    

    elements=china.find_elements_by_xpath('.//p')
  • 相关阅读:
    xdvipdfmx:fatal: Unable to open "xxx.pdf". Output file removed. fwrite: Broken pipe xelatex.exe
    安装Visual Studio 时窗口闪过就退出
    一些概念的收集
    如何让字符串中奇怪的空格现出原形
    mysql替换特殊字符
    asscii码对应表
    Linux下的tar压缩解压缩命令详解
    centos 6.8 /etc/sysconfig/下没有iptables的问题
    mysqldumpslow简单用法
    linux查询占用空间较大的文件
  • 原文地址:https://www.cnblogs.com/Free-Ink/p/12597699.html
Copyright © 2011-2022 走看看