xpath语法

1. 什么是XPath?

XPath是一种XML路径,用于浏览页面的HTML结构。他是一种语法或者语言用来查找使用XML路径表达的网页中的任意元素。

XPath的基本形式如下:

Xpath=//tagname[@attribute='value']

//:选中当前节点

Tagname:特定节点的标记名

@:选中属性的标记符

Attribute:节点的属性名字

Value:属性值

为了精确查找网页中的元素,有以下几种不同类型的定位器:

XPath定位器

查找不同元素

ID

通过元素中的ID查找元素

Classname

查找元素中的Class

Name

通过元素的名字查找元素

Link text

通过链接的内容查找元素

XPath

查找动态元素并在网页的各个元素之间遍历所需的XPath

CSS path

CSS 路径也能定位到没有name、class或者ID的元素

2. X-path的类型

XPath有两种类型:

1)绝对XPath路径

2)相对XPath路径

2.1 绝对XPath

这是一种直接查找元素的方式,不过弊端就是如果元素路径中有一点儿变动的话,XPath就会获取失败。

XPath的关键特征是它以单个正斜杠(/)开头,这意味着您可以从根节点中选择元素。

Absolute XPath

/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]

2.2 相对XPath

XPath相对路径从HTML DOM结构的中间部分开始。它以双正斜杠//开始。他可以查找网页中的任何元素,不需要写很长的XPath路径。相对XPath一直让人偏爱的原因就在于不需要从根元素得到一个完整路径。

Relative XPath

Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]

2.3 什么是XPath axes

XPath axes在XML文档中从当前上下文节点搜索不同的节点。XPath Axes是查找动态元素的方法,否则,这是没有ID、Classname,Name等常规XPath方法无法实现的。

Axes方法用来查找那些刷新或者执行其他操作而动态改变的元素。Selenium Webdriver中常用的Axes方法很少,例如孩子(child),父母(parent),祖先(ancestor),兄弟姐妹(sibling),上一级(preceding),自己(self)等。

3. 在selenium中用XPath处理复杂的&动态的元素

1)基本的XPath

XPath表达式根据XML文档中的ID、Name、Classname等基本属性,选择节点或节点列表,如下所示:

Xpath=//input[@name='uid']

一些基本的xpath表达式:

Xpath=//input[@type='text']

Xpath= //label[@id='message23']

Xpath= //input[@value='RESET']

Xpath=//*[@class='barone']

Xpath=//a[@href='http://demo.guru99.com/']

Xpath= //img[@src='//cdn.guru99.com/images/home/java.png']

2)Contains()

Contains()是一个在XPath表达式中使用的方法。当任何属性的值动态变化(例如,登录信息)时,将使用该属性。

contain功能可以查找具有部分文本的元素,如以下示例所示。

在这个例子中,我们尝试仅仅通过属性的部分文本值来辨认元素。在下面的XPath表达式中部分值’sub’用来替代提交按钮。可以观察到成功找到了元素。

‘Type’的完整值是’submit’但是只使用了部分值’sub’。

Xpath=//*[contains(@type,'sub')]

‘name’的完整值是’btnLogin’但是只用了部分值’btn’。

Xpath=//*[contains(@name,'btn')]

在上面的表达式中,我们将“name”作为属性,将“ btn”作为部分值,如下面的屏幕快照所示。 这将找到2个元素(LOGIN和RESET),因为它们的’name’属性以’btn’开头。

同样,在下面的表达式中,我们将“ id”作为属性,将“ message”作为部分值。 这将发现2个元素(“用户ID不能为空”和“密码不能为空”),因为其“name”属性以“message”开头。

Xpath=//*[contains(@id,'message')]

在下面的表达式中,我们将链接中的’text’作为属性,’here’作为部分值,如下面快照中所示。这将找到链接(‘here’)因为它显示了文本’here’。

Xpath=//*[contains(text(),'here')]

Xpath=//*[contains(@href,'guru99.com')]

3)使用OR & AND

在OR表达式中,有两个条件要用到,条件一或者条件二应为真。如果任何一个条件为真或两者皆为真,则也适用。 意味着任何一种条件都应为真才能找到该元素。

在下面的XPath表达式中,辨认出了单个条件或者两个条件皆为真的元素。

Xpath=//*[@type='submit' or @name='btnReset']

高亮显示两个元素,“LOGIN”元素有’type’属性,“RESET”元素有’name’属性。

在AND表达式中,有两个条件要用到,这两个条件必须全部为真才能找到元素。如果任意一个条件为假就不能查找到元素。

Xpath=//input[@type='submit' and @name='btnLogin']

在下面的表达式中,高亮显示的’LOGIN’元素拥有’type’和’name’属性。

4)Xpath Starts-with

XPath starts-with()是一个用来查找属性值随着页面刷新或者其他动态操作而改变的页面元素的函数。在这个方法中,属性的开始文件被匹配到用来查找属性值动态变化的元素。你也可以查找属性值是静态(不变)的元素。

例如:假设特定元素的ID这样动态变化:

Id=”message12”

Id=”message345”

Id=”message8769”

等等等等…但是初始文本是一样的。在这种情况下,我们就可以使用Start-with表达式。

在下面的函数中,有两个以”message”开头的id元素(例如:’用户-Id不能为空’&’密码不能为空’)。在下面的表达式中,XPath查找到这些以’message’开头的’ID’元素。

Xpath=//label[starts-with(@id, 'message')]

5)XPath Text() Function

XPath text()函数是一个用来基于页面元素文本来定位元素的selenium webdriver的内建函数。它帮助查找精准的文本元素以及在文本节点集合中定位元素。要定位的元素应为字符串形式。

在这个表达式中,使用文本功能,我们找到了具有完全文本匹配的元素,如下所示。在我们的例子中,我们找到了文本为”UserID”的元素。

Xpath=//td[text()='UserID']

6)Xpath轴方法

这些XPath轴方法被用来查找复杂的或者动态的元素。下面我们会看到一部分这些方法。

为了

举例说明这些XPath轴方法,我们将会使用Guru99 bank demo站点。

a)Following

选取文档中当前节点所有元素[UserID输入框是当前节点],如下所示:

Xpath=//*[@type='text']//following::input

通过使用”following”轴匹配到了3个”input”节点-密码、登陆、重置按钮。如果你想集中任意一个特定的元素,那么你可以用下面的Xpath方法。

Xpath=//*[@type='text']//following::input[1]

你可以根据需求通过放置[1],[2]…等等来更改XPath。

输入为’1’时,下面的截图找到了特定的节点是’密码’输入框。

b)祖节点

祖先轴选择当前节点的所有祖先元素(祖父母,父母等),如以下屏幕所示。

在下面的表达式中,我们正在找到当前节点(“ ENTERPRISE TESTING”节点)的祖先元素。

Xpath=//*[text()='Enterprise Testing']//ancestor::div

通过使用“祖先”轴匹配的13个“ div”节点。 如果您想关注任何特定元素,则可以使用下面的XPath,在其中您可以根据需要更改数字1、2:

Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

c)子节点

选择当前节点(Java)的所有子元素,如下屏幕所示。

Xpath=//*[@id='java_technologies']//child::li

通过使用“子”轴可以匹配71个“ li”节点。 如果要关注任何特定元素,则可以使用以下xpath:

Xpath=//*[@id='java_technologies']/child::li[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

d)前节点

如下屏幕所示,选择当前节点之前的所有节点。

在下面的表达式中,它标识“ LOGIN”按钮之前的所有输入元素,即Userid和密码输入元素。

Xpath=//*[@type='submit']//preceding::input

通过使用“上一个”轴可以匹配2个“输入”节点。 如果您想关注任何特定元素,则可以使用以下XPath:

Xpath=//*[@type='submit']//preceding::input[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

e)继兄弟姐妹节点

选择上下文节点的以下同级。 兄弟姐妹与当前节点处于同一级别,如以下屏幕所示。 它将在当前节点之后找到元素。

xpath=//*[@type='submit']//following-sibling::input

一个输入节点通过使用“跟随兄弟”轴进行匹配。

f)父节点

选择当前节点的父节点,如下图所示:

Xpath=//*[@id='rt-feature']//parent::div

通过使用”父节点”轴匹配到65个”div”节点。如果你想关注任意一个特定的元素那么你可以使用下面的XPath:

Xpath=//*[@id='rt-feature']//parent::div[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

g)节点自身(self)

选择当前节点或者’self’意味着预示了节点本身,如下所示。

通过’self’轴匹配到一个节点。它总是只找到一个节点,因为它代表了元素本身。

Xpath =//*[@type='password']//self::input

h)后裔节点

选择当前节点的后代,如下屏幕所示。

在下面的表达式中,它标识当前元素(“主体环绕”框架元素)的所有元素后代,这意味着向下位于节点(子节点,孙子节点等)下。

Xpath=//*[@id='rt-feature']//descendant::a

通过使用“后代”轴可以匹配12个“link”节点。 如果您想关注任何特定元素,则可以使用以下XPath:

Xpath=//*[@id='rt-feature']//descendant::a[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

总结:

需要XPath才能在网页上查找元素,以便对该特定元素执行操作。

XPath有两种类型:绝对XPath

相对XPath

XPath轴是用于查找动态元素的方法,否则通常的XPath方法无法找到这些元素的。

XPath表达式根据XML文档中的ID,Name,Classname等属性选择节点或节点列表。

本作品采用《CC 协议》,转载必须注明作者和本文链接

python selenium语法_selenium之xpath语法总结相关推荐

  1. Python 爬虫利器三之 Xpath 语法与 lxml 库的用法

    原文链接https://cuiqingcai.com/2621.html 前言 前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxm ...

  2. python爬虫(8)--Xpath语法与lxml库

    1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...

  3. Python之网络爬虫(Xpath语法、Scrapy框架的认识)

    文章目录 一.Xpath语法 二.Scrapy框架的认识 一.Xpath语法 xpath是一门在XML文档中查找信息的语言 1. 节点(Node) ​ 元素.属性.文本.命名空间.文档(根)节点 2. ...

  4. python中xpath_Python爬虫之Xpath语法

    XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 含有超过 100 个内建的函数.这些函数用于字符串值.数值.日期和时间比较. ...

  5. 〖Python网络爬虫实战⑫〗- XPATH语法介绍

    订阅:新手可以订阅我的其他专栏.免费阶段订阅量1000+ python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏 ...

  6. python selenium 下拉列表_Selenium+Python之下拉菜单的定位

    https://www.cnblogs.com/desperado0807/p/4839502.html 1.通过selenium.webdriver.support.ui的Select进行定位 下拉 ...

  7. python+selenium老中年人的使用与精进(持续施工中)

    前提要求:具备python基础便可以,老年人也无妨~ 这里针对的是selenium常见.常用的API操作,更多应用于web项目中. 关于selenium:SeleniumSelenium automa ...

  8. Python+Selenium基本语法

    对Selenium自动化已有了解,最近开始做h5端的自动化,所以总结了下Python+Selenium自动化基本语法 一.启动浏览器 1.普通方式启动 #coding=utf-8 import tim ...

  9. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

    The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...

最新文章

  1. Linux实用命令集
  2. python之np.var()函数解析
  3. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型
  4. 23天的单车旅行,从广州到四川,篇首语
  5. 粒子文字特效css,CSS3 粒子效果
  6. 腾讯与微软合作,准备应用Silverlight技术
  7. (1)安装----anaconda3下配置pyspark【单机】
  8. 为什么要用非关系型数据库nosql
  9. 计算机二级在线练,计算机二级操作练习题.doc
  10. 华为路由器BGP简单配置
  11. layer弹出层自适应高度,垂直水平居中
  12. windows 系统开启的端口调研
  13. Uva 437 巴比伦塔  UVA10003
  14. keil 生成三角波dac0832_怎么样利用南方CASS三角网法和方格网法进行土方量计算...
  15. python清除所有变量_python清理变量
  16. python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化
  17. 开发者特供丨72小时解锁华为黑科技,错过这次又等一年!
  18. 分区空间分配:window10怎样把C盘空间分一点给D盘?
  19. Python使用Plotly绘图工具,绘制散点图、线形图
  20. Java文件解析:Excel解析

热门文章

  1. AI代码实时生成工具teleportHQ
  2. 基于hls格式的光条检测纯c++代码——重心法
  3. i5 1135g7和i7 10870h 参数对比哪个好
  4. AirDisk产品Q3C体验
  5. 华为致新员工的一封信
  6. SpringBoot2.0源码解析一
  7. BestMPRBaseVtk-001-第一个Qt插件、建立子项目工程、建立插件子项目、建立测试项目
  8. android 讯飞语音引擎3.0默认粤语播报
  9. 实物图鉴TMS320F2812PGFA代理销售现货价格
  10. 66319D安捷伦Agilent直流电源