由于最新版火狐不在支持FireBug等开发工具,可以通过https://ftp.mozilla.org/pub/firefox/releases/下载49版本以下的火狐就可以增加Firebug等扩展了。

什么是Xpath?

XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素。

工具

Xpath可以下载火狐浏览器插件FireBug

用法:

1. /(绝对路径,从根节点选取) 
2. //(相对路径,所有子代节点,不用考虑是否直接子节点) 
3. @ 选取属性 
4. “.”选取当前节点 
5. “..”选取当前节点的父节点

使用方法:

注://* 代表定位页面下所有元素,固定模式 @引用某样属性 id ='xxx'

1、Xpath支持ID、Class、Name定位功能,将 * 换位任意标签名,则可根据标签进行筛选

通过ID定位

//*[@id='i1']
//div[@id='i2'] 通过Class定位 //*[@class='inner']
//div[@class='inner1'] 通过Name定位 //*[@name='name']
//input[@name='name']
class包含xxx的div
//div[contains(@class,’xxx’)] 

2. 如果标签没有ID、Class、Name三总属性,Xpath还支持属性定位功能

//*[@placeholder='请输入用户名']

3. 当标签页重复时,Xpath提供了层级过滤

支持通过 / 进行层级递进,找到符合层级关系的标签
//input[@value=text][8]  ->>第8个input的value=text

//div[@class='inner'][3]/input[@type='text']
当层级都重复时,可以通过单个层级的属性进行定位

//div[@class='driver'][1]/div[@class='inner'][3]/input

4. 一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。Xpath提供了索引过滤

通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始

//select[@name='city'][1]/option[1]

5. 上面集中如果都用上了之后还重复的话,我们就可以使用Xpath提供的终极神器,逻辑运算定位。and 或 or

通过and来缩小过滤的范围,只有条件都符合时才能定位到

//select[@name='city' and @size='' and @multiple="multiple"]

or就相反了,只要这些筛选中,其中一个出现那么久匹配到了

//select[@name='city' or @size='']

Xpath拓展

following-sibling: 选择当前节点之后的所有同级节点,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:

<div>
<input id="">
<input>
</div>

要定位第二个input://input[@id=’123’]/following-sibling::input

  • preceding-sibling: 选取当前节点之前的所有同级节点

  • starts-with: 以某某开头,例如://input[starts-with(@class,’xxx’)]

  • 绝对路径 html/body/div/span[2]/input[2] 中间结构变化,就失效

  • 相对路径 //开始,在整个html source里找,不管在什么位置

  • 索引[x] //div/input[2] div下面第二个input

  • 完全匹配 xpath=//*[text()=”Join”]

  • not关键字 就是否定的意思 
    比如找一个id不为123的input:input[not[id=’123’]] 
    又如找一个文本中不包含xxx字段的span://span[not(contains(text(),’xxx’))]

  • 通配符 * 
    比如//span[@*=”xxx”]指定位span中任意属性包含xxx的 
    比如//[@=”xxx”]指定位页面中任意属性保护xxx的标签

Selenium - Xpath 使用方法的更多相关文章

  1. selenium定位方式-Xpath使用方法

    什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 一. 在火狐浏览器上安装Xpath 方法如下: 1.使用 Firefox 访问 https://a ...

  2. 元素定位-XPATH定位方法总结

    1.Xpath定位方法探讨 xpath是比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能.如果Xpath使用的比较好,几乎可以定位到任何页面元素,而且受页面变化影响较小. 1.1.什么 ...

  3. 【转载】Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  4. Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  5. selenium 之定位方法

    1 id 定位 driver.find_element_by_id() HTML 规定id 属性在HTML 文档中必须是唯一的.这类似于公民的身份证号,具有很强的唯一性 from selenium i ...

  6. selenium 定位元素方法

    1.通过id定位元素 写法1: element = driver.find_element_by_id("kw") 写法2: from selenium.webdriver.com ...

  7. Java&Selenium智能等待方法封装

    Java&Selenium智能等待方法封装 ExpectedConditions方法还有很多,自然也可以继续扩展很多 package util; import org.openqa.selen ...

  8. Java&Selenium 模拟鼠标方法封装

    Java&Selenium 模拟鼠标方法封装 package util; import org.openqa.selenium.By; import org.openqa.selenium.W ...

  9. selenium的定位方法-多元素定位

    在实际工作中,有些时候定位元素使用ID.NAME.CLASS_NMAE.XPATH等方法无法定位到具体元素,会发现元素属性有很多一致的,这个时候使用单元素定位方法无法准确定位到具体元素,例如,百度首页 ...

随机推荐

  1. MFC 消息映射表和虚函数实现消息映射到底谁的效率高

    深入浅出MFC对于虚函数实现方式的缺点,它指出:虚函数耗费大量内存,系统最终将被这些额外负担拖垮. 但是现在对于容量巨大的白菜价格的内存来说,这种额外负担是否已经过时了呢~?    书中提到,虚函数表 ...

  2. 如何使用 Flexbox 和 CSS Grid,实现高效布局

    CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想.幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来 ...

  3. 百度编辑器(UEditor)自定义工具栏

    百度编辑器(UEditor)自定义工具栏的自定义 百度编辑器默认功能比较齐全,但是不一定是我们所需要的,有的功能可以去掉,用自己想要的就可以了,可以参考百度官方文档! 百度编辑器默认配置展示界面 如何 ...

  4. mysql的root的权限被控制无法授权

    一.环境: MariaDB [(none)]> select version(); +----------------+ | version()      | +---------------- ...

  5. 题目1005:Graduate Admission(录取算法)

    题目链接:http://ac.jobdu.com/problem.php?pid=1005 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  6. [转]RedHat Enterprise Linux 7关闭防火墙方法

    在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop 在RHEL7中,其实没有这个服务 [root@rhel7 ~]# ...

  7. Nginx学习之keepalive

    当然,在nginx中,对于http1.0与http1.1也是支持长连接的.什么是长连接呢?我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建立TCP连接,而每一 ...

  8. layerui如何隐藏按钮?

    https://www.layui.com/doc/modules/layer.html#btn 建议把 btn: ['取消'],btnAlign: 'c',yes: function (index) ...

  9. Scala实现乘法口诀

    object Test4 {  def main(args: Array[String]) {    for (i <- 1 to 9; j <- 1 to 9 if (j <= i ...

  10. POJ-1887 Testing the CATCHER(dp,最长下降子序列)

    Testing the CATCHER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16515 Accepted: 6082 ...