筛选:通过以上方法找出来的元素会找到很多你本意不需要的元素,因此还需要通过一些筛选运算来找到对应的元素,筛选方式多种多样,下面的各种例子助你定位又快又准。 通用的筛选条件是以[xxxx]形式出现的(上面的例子中已有体现),常见筛选如下: A、属性筛选:属性名前+@来表示属性,如下 [td]xpath
| 说明
| //div[@class='class1'] | 筛选class属性值等于class1的div | //div[@hight>10] | 筛选hight属性值大于10的div(仅限数字) | //div[text()='divtext'] | 筛选文本是divtext的div | //div[contains(@class,'class1')] | 筛选class属性中包含class1的div | //div[contains(text(),'text1')] | 筛选文本包含text1的div | //div[text()='text1' and @class=‘class1’] | 同时满足两个条件的筛选,类似的,“或者” 的话用“or”,运算优先级高的用"()"括起来 | //div[text()='text1' and not(@class)] | 筛选文本包含 text1,且无class属性的 div |
B、序号筛选:通过序号(从1开始),或排序运算查找元素 [td]xpath
| 说明
| //div[@id='id1']/span[1] | 找到id=“id1”的div元素后代的第一个span元素,如[4]则是第4个 | //div[@id='id1']/span[last()] | 找到id=“id1”的div元素子元素的最后一个span元素,如[last()-2]则是倒数第3个 | //div[@id='id1']/span[position()>2 and position() < 7] | 找到id=“id1”的div元素后代的第3、4、5、6个span元素 | //div[@id='id1']/text()[2] | 找到id=“id1”的div元素的第二段文本(注:此处用于文本被子元素分割,需要选择后面文本的情况: 如<div id="id1">this is text one<strong>haha</strong>this is text two</div>) |
特别注意:序号筛选时,指定是当前元素的同级的第n个,如果当前元素的祖先中有元素不是唯一的,那么序号筛选是无效的。 通过括号将祖先括起来,再指定序号,可以使当前元素前的祖先是指定的、且唯一的,如: (//div[@class='class1']//span[@class='class2'])[1]/div[3] 这样就可以十分准确的定位到需要span下的第3个div,没有此括号,当//div[@class='class1']//span[@class='class2']找到多个元素时,就算用[3]也则只能定位到第1个 |