//查找所有的"B"
var xpath="//B";
//查找所有元素
xpath = “//*”;
// 选择所有路径依附于/A/B/的元素
xpath ="/A/B/*";
//选择所有的有3个祖先元素的B元素
xpath ="///*/B" ;
// 选择所有父元素是DDD的BBB元素
xpath="//C/D";
// 选择A/B/C的第一个E子元素
xpath="/A/B/C/E[1]";
//选择A/B/C的最后一个E子元素
xpath="/A/B/C/E[last()]" ;
//选择有name属性的B元素
xpath = “//B[@name]” ;
//选择所有的name属性
xpath="//@name";
//选择有任意属性的B元素
xpath="//B[@*]";
//选择没有属性的B元素
xpath="//B[not(@*)]";
//选择含有属性id且其值为’e2’的E元素
xpath="//E[@id=‘e2’]";
//选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为’b’的B元素
xpath="//B[normalize-space(@name)=‘b’]";
//选择含有2个B子元素的元素
xpath="//*[count(B)=2]";
//选择含有3个子元素的元素
xpath="//[count()=3]";
//选择所有名称为B的元素(这里等价于//B)
xpath="//*[name()=‘B’]";
//选择所有名称以"W"起始的元素
xpath="//*[starts-with(name(),‘W’)]";
//选择所有名称包含"W"的元素
xpath="//*[contains(name(),‘W’)]";
//选择名字长度为2(大于、小于)的元素;
xpath="//*[string-length(name()) = 2]";
xpath="//*[string-length(name()) < 2]";
xpath="//*[string-length(name()) > 1]";
//多个路径可以用分隔符 | 合并在一起,可以合并的路径数目没有限制,选择所有的WF和C元素
xpath="//WF | //C";
//等价于/A
xpath="/child::A";
//等价于//C/D
xpath="//child::C/child:: D";
//选择文档根元素的所有后代.即所有的元素被选择
xpath="/descendant:: *";
//选择/A/C的所有后代元素
xpath="/A/C/descendant:: *";
//选择D元素的所有父节点
xpath="//D/parent:: *";
//选择D元素的父节点
xpath="//D/…" (两个点,这个csdn编辑器怎么回事啊!)
//选择WF元素的祖先节点
xpath="//WF/ancestor:: *";
//包含上下文节点之后的所有兄弟节点(此节点之后的所有兄弟节点)
xpath="//WF/following-sibling:: *";
//选择兄弟节点中span标签且其class属性为alert
xpath="//WF/following-sibling::span[@class=‘alert’]"
//包含上下文节点之前的所有兄弟节点(此节点之前的所有兄弟节点)
xpath="//WF/preceding-sibling:: *";
//包含同一文档中按文档顺序位于上下文节点 之后 的所有节点, 除了祖先节点,属性节点和命名空间节点
xpath="/A/B/following:: *";
xpath="//B/following:: *";
//包含同一文档中按文档顺序位于上下文节点之前的所有节点, 除了祖先节点,属性节点和命名空间节点
xpath="//WF/preceding:: *";
//包含上下文节点本身和该节点的后代节点;
xpath="//C/descendant-or-self:: *";
//仅代表自身节点
xpath="//A/self:: *";
//一起使用则包含所有节点
xpath="//WF/ancestor:: * | //Wf/descendant:: * | //WF/following:: * | //WF/preceding:: * | //WF/self:: *";
//选择当前节点的文字
xpath="//E/child::text()";
//选择所有当前节点的子节点
xpath="//V/child::node()";
//选择偶数位置的B元素
xpath="//B[position() mod 2 = 0 ]";
//选择中间的E元素
/*
div运算符做浮点除法运算,
mod运算符做求余运算,
floor函数返回不大于参数的最大整数(趋近于正无穷),
ceiling返回不小于参数的最小整数(趋近于负无穷) */
xpath="//E[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]";
//可以忽略空白,寻找属性name=‘b’ or name=’ b '的元素
xpath="//@name[‘b’]";
//不忽略空白,完全匹配,寻找属性name='b’的元素
xpath="//@name[.=‘b’]";
2、使用dom定位
//span[text()=’${stockName}’]/parent:: */preceding-sibling:: *//div[@class=‘num’]
xpath:
contains:.//a[contains(@class,‘btnX’) and .//text()=‘Sign in’]
starts-with:.//a[starts-with(@class,‘btnSelectedBG’)]
使用相对位置定位当前元素的兄弟节点:
//span[contains(text(),‘昨收’)]/following-sibling:: *[position() = 1]
6、使用xpath匹配到多个元素时,可以使用一些关键字剔除掉某些不需要的元素
xpath=//input[ not(@id)][@type=“checkbox”]
这样就剔除了那些包含id属性的元素了
xpath=//span[ contains(.,‘已选’)]
xpath=//iframe[ starts-with(@id, ‘compose’)]
xpath= //li[@id=‘btn_forward’]//i[@class=‘i_triangle_d’]
//span[text()=‘买入’ and not(@class)]
//img[contains(@id,‘ext-gen605’)]
//img[contains(@src,’/…/’) and index=1]
3、定位元素出现多个,但只有一个可见,其他隐藏,可以这样定位:
$(".button:visible")[0]
$(".code-name-line:visible")[0].children[1]
4、找出文本为“买入”的元素
//button[text()=‘退出’]
//h1[contains(.,‘人民币’)]
此外,cssSelector还有一些高级用法,如果熟练后可以更加方便地帮助我们定位元素,如我们可以利用^用于匹配一个前缀,$用于匹配一个后缀,*用于匹配任意字符。例如:
匹配一个有id属性,并且id属性是以”id_prefix_”开头的超链接元素:a[id^=‘id_prefix_’]
匹配一个有id属性,并且id属性是以”_id_sufix”结尾的超链接元素:a[id$=’_id_sufix’]
匹配一个有id属性,并且id属性中包含”id_pattern”字符的超链接元素:a[id*=‘id_pattern’]
xpath指定子节点
原文链接:https://blog.csdn.net/DaxiaLeeSuper/article/details/79347838