自动化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')

猜你喜欢

转载自www.cnblogs.com/Free-Ink/p/12597699.html