文档章节

XPath编写规则学习总结

孟飞阳
 孟飞阳
发布于 2016/06/26 10:21
字数 749
阅读 52
收藏 0

XPath编写规则学习

辅助工具:firefox安装findbugs,view Xpath

firefox :Xpath验证方式:$x("xpath"); 粘贴xpath语句回车即可

定位:

1、依靠自己属性,文本定位:

   //td[text()='test']

   //div[contains(@class ,'test')]

   //input[@type='radio' and @value='1']

   //span[@name='bruce' and text()='bruce2'] 或 //span[@name='bruce'][ text()='bruce2'] --and关键字

   //span[@name='bruce' or text()='bruce2'] --or关键字

2、依靠父节点定位:

  //div[@class='test mytest']/div

  //div[@id='test']/div

3、依靠子节点定位

  //div[div[@id='test']] --寻找含有id=test的div的div

  //div[div[@name='test']]

  //div[p[@id='test']]

4、混合型定位

  //div[div[@name='test']]/img

  //td[a//font[contains(text(),'test')]]//input[@type='checkbox']

5、高级方法 

  (1)following-sibling ---寻找紧跟定位到的元素的下一个元素

   例子://input[@id='1234']/following-sibling=input --定位紧跟id=1234的下一个的input元素,同级有效

             //input[@id='1234']/following-sibling::input ,input后可再跟条件

   (2)preceding-sibling ---寻找紧跟定位到的元素的上一个元素

   例子://input[@id='123']/preceding-sibling=span --定位紧跟id=123的上一个span元素

             //input[@id='1234']/preceding-sibling::input ,input后可再跟条件

     (3)starts-with --判断是否以某关键字开头

      例子://input[starts-with(@id,'test')]

     (4)contains -- 是否包含某关键字

       例子: //td[a//font[contains(text(),'test')]]//input[@type='checkbox']

     (5)not ---不包含某关键字

        例子://input[not(@id='1234')]

                  //span[not(contaions(text(),'xpath'))]

6、索引关键字,position,last

    (1)position()=2

             position()>3

             position()<5    

      例子://div[@id='test']/span[2]或

                //div[@id='test']/span[position()=2] --正数第2个span

      (2)last()-1

       例子://div[@id='test']/span[last()-2] --倒数第2个span元素

7、根据属性定位

  //div[@class] --查找含有class属性的div

  //div[@class='test'] --查找含有class属性且class属性值为test的的div元素

8、不常用关键字

     (1)substring,语法:substring(str,start_postion,length) ,从1开始计算

           例子://div[@id='test']/span[substring(@name,3,5)='bruce'] --找name的第三位开始总共5位字母为bruce的span

     (2)substring-before ,语法:substring-before(str,substr)

           例子://div[@id='test']/span[substring-before(@class,'-')='spanclass'] --查找分割关键字前面的字符为spanclass的span

     (3)substring-after,语法:substring-after(str,substr)

            例子://div[@id='substring']/span[substring-after(@class,'-')='spanclass'] --查找分割关键字后面的字符为spanclass的span

9、通配符:*

      //span[@*='bruce']

      //*[@*='bruce']

      //*[@name='bruce']

10、axes 轴

   (1)parent 父节点

          例子://div[span[text()='+++test']]/parent::div[contaions(text(),'test')] --查找含有span的text为+++test的的div的父节点

                    //div[span[text()='+++test']]/parent::div/span[contaions(text(),'test')]

   (2)ancestor 祖先节点

          例子://div[span[text()='+++test']]/ancestor::div    

   (3)descendant 孙子节点

           例子://div[span[text()='+++test']]/descendant::div --会将该节点下的所有div打印出来

                      //div[span[text()='+++test']]/descendant::div/span[contaions(text(),'test')]

   (4)following 将当前节点下后面所有的指定节点取出

            例子://div[text()='current NodeA']/following::div --会将current NodeA后面的所有的div取出来,后续的div可再加条件判断       

   (5)preceding 将当前节点下前面所有的指定节点取出

            例子://div[text()='current NodeA']/preceding::div --会将current NodeA前面的所有的div取出来,后续的div可再加条件判断

© 著作权归作者所有

共有 人打赏支持
孟飞阳
粉丝 205
博文 964
码字总数 543203
作品 5
朝阳
个人站长
Python实现电影排行榜自动网盘下载(1)Scrapy爬虫框架

本人学习参考的是博主崔庆才的系列教程 cuiqingcai.com/912.html cuiqingcai.com/3472.html 当然是比我写的详细的多啦,下面是我自己总结的学习过程 简介 我们来看看要获取的电影信息的网址 ...

Seeker_zz
2017/08/02
0
0
元素定位XPath 简单操作分享

XPath 简单实用 学习Selenium2 为了学习元素定位开始学习xpath,现在把学习心得记录下,给大家参考下。 什么是 XPath? XPath 使用路径表达式在 XML 文档中进行导航 XPath 包含一个标准函数库...

余二五
2017/11/15
0
0
使用Scrapy构建一个网络爬虫

记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构、地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能。因为要考...

铁扇公主1
2017/05/04
48
0
Java 语言的 XPath 学习 API

简介: XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多。如果需要从 XML 文档中提取信息,最快捷、最简单的办法就是在 Java™ 程序中嵌入 XPath 表达式。Java 5 推出了 ja...

挨踢人生
2012/03/30
0
0
Scrapy爬取猫眼电影并存入MongoDB数据库

之前入门了Scrapy,用Scrapy框架爬取了豆瓣电影TOP250,最近打算学习下scrapy-redis分布式爬虫,学习之前再重新温故下Scrapy,这个总结我缩写了很多内容,很多介绍可以看下我之前写的豆瓣mov...

Treehl
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis应用之分布式锁(set)

Redis应用之分布式锁(set) 在单机应用的场景下,我们常使用的锁主要是synchronized与Lock;但是在分布式横行的大环境下,显然仅仅这两种锁已经无法满足我们的需求; 需求:秒杀场景下,有若干...

GMarshal
18分钟前
0
0
python实现简单的文件加密与解密

对于任意的一个文件,本质上来讲都是二进制的。 对于任意一个二进制数a,对其用另外任意一个与a的位数相同的二进制数m进行“异或”操作得到结果e,即e=a xor m; 如果再讲上面得到的e用m进行...

Aomo
20分钟前
0
0
Android开发应用程序生成以太坊钱包

Android应用程序以太坊钱包生成,要做的工作不少,不过如果我们一步一步来应该也比较清楚: 1.在app/build.gradle中集成以下依赖项: compile ('org.web3j:core-android:2.2.1') web3j核心是...

geek12345
35分钟前
0
0
ArrayList嘿嘿嘿

数组扩容技术: //扩容技术 将原数组objs类容复制到新数组并且长度为11 Object[] newObjs = Arrays.copyOf(objs,11); 数组比较大那么System.arraycopy比较有优势,因为其使用的是内存复制,省...

熊猫你好
58分钟前
2
0
Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

python版的sxtwl_cpp传送入口 在build.gradle的allprojects中加入 maven { url 'https://dl.bintray.com/yuangu/sxtwl' } 最终如下面代码所示: allprojects { repositories { ......

元谷
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部