python selenium xpath定位操作


Posted in Python onSeptember 01, 2020

xpath是一种在xm文档中定位的语言,详细简介,请自行参照百度百科,本文主要总结一下xpath的使用方法,个人看法,如有不足和错误,敬请指出。

注意:xpath的定位 同一级别的多个标签 索引从1开始 而不是0

1. 绝对定位:

此方法最为简单,具体格式为

xxx.find_element_by_xpath("绝对路径")

具体例子:

xxx.find_element_by_xpath("/html/body/div[x]/form/input") x 代表第x个 div标签,注意,索引从1开始而不是0

此方法缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用。

2.相对路径:

相对路径,以‘//'开头,具体格式为

xxx.find_element_by_xpath("//标签")

具体例子:

xxx.find_element_by_xpath("//input[x]") 定位第x个input标签,[x]可以省略,默认为第一个

相对路径的长度和开始位置并不受限制,也可以采取以下方法

xxx.find_element_by_xpath("//div[x]/form[x]/input[x]"), [x]依然是可以省略的

python selenium xpath定位操作

("//*[@id='J_login_form']/dl/dt/input[@id='J_password']"

3.标签属性定位:

3.1标签属性定位,相对比较简单,也要求属性能够定位到唯一一个元素,如果存在多个相同条件的标签,默认只是第一个,具体格式

xxx.find_element_by_xpath("//标签[@属性==‘属性值']")

属性判断条件:最常见为id,name,class等等,目前属性的类别没有特殊限制,只要能够唯一标识一个元素都是可以的

具体例子

xxx.find_element_by_xpath("//a[@href='/industryMall/hall/industryIndex.ht']") xxx.find_element_by_xpath("//input[@value='确定']") xxx.find_element_by_xpath("//div[@class = 'submit']/input")

当某个属性不足以唯一区别某一个元素时,也可以采取多个条件组合的方式,具体例子

xxx..find_element_by_xpath("//input[@type='name' and @name='kw1']")

3.2 当标签属性很少,不足以唯一区别元素时,但是标签中间中间存在唯一的文本值,也可以定位,其具体格式

xxx.find_element_by_xpath("//标签[contains(text(),'文本值')]")

具体例子:

xxx.find_element_by_xpath("//iunpt[contains(text(),'型号:')]")

注意:尽量在html中复制此段文本,避免因为肉眼无法分辨的字符导致定位失败

3.3 其他的属性值如果太长,也可以采取模糊方法定位,直接上示例

python selenium xpath定位操作

xxx.find_element_by_xpath(“//a[contains(@href, ‘logout')]”)

3.4 XPath 关于网页中的动态属性的定位,例如,ASP.NET应用程序中动态生成id属性值,可以有以下四种方法:

a.starts-with例子: input[starts-with(@id,'ctrl')] 解析:匹配以ctrl开始的属性值

b.ends-with 例子:input[ends-with(@id,'_userName')] 解析:匹配以userName结尾的属性值

c.contains() 例子:Input[contains(@id,'userName')] 解析:匹配含有userName属性值

当然,如果上面的单一方法不能完成定位,也可以采取组合式定位 类似("//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3])

以上是普通的情况,存在可以定位的属性,当某个元素的各个属性及其组合都不足以定位时,我们可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位,先看看xpath中支持的方法:

1、child 选取当前节点的所有子元素

2、parent 选取当前节点的父节点

3、descendant选取当前节点的所有后代元素(子、孙等)

4、ancestor 选取当前节点的所有先辈(父、祖父等)

5、descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身

6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身

7、preceding-sibling选取当前节点之前的所有同级节点

8、following-sibling选取当前节点之后的所有同级节点

9、preceding选取文档中当前节点的开始标签之前的所有节点

10、following选取文档中当前节点的结束标签之后的所有节点

11、self 选取当前节点

12、attribute 选取当前节点的所有属性

13、namespace选取当前节点的所有命名空间节点

python selenium xpath定位操作

上图实例,需要点击订单号为17051915200001的发货按钮,这时候不能直接定位到发货按钮,而是先要定位到订单号元素,再定位他的兄弟节点。

参照上图,我们首先定位到td标签中包含订单号的td元素,然后选择其之后的同级节点,following-sibling,我们要找的元素在后面的第8个td标签下,因此定位可以写名为下面的格式

Xxx.find_element_by_xpath("//td[contains(text(),'17051915200001')]/following-sibling::td[8]/a[@class='link']")

preceding-sibling 情况类似,但是所有元素的排列顺序是相反的(和following-sibling相反),如图:

python selenium xpath定位操作

其他方法的使用方式相同, 11-13目前没有使用过,也没有搜索到实际使用的案例,如果有人知道,希望不吝赐教。

补充知识:Python+selenium:用“and”连接属性定位元素

如下所示:

find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") //用and来连接属性定位元素

以上这篇python selenium xpath定位操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现CET查分的方法
Mar 10 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
django使用html模板减少代码代码解析
Dec 12 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
python如何保存文本文件
Jun 07 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python实现中英文全文搜索的示例
Dec 04 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 #Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 #Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 #Python
Python2及Python3如何实现兼容切换
Sep 01 #Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 #Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 #Python
Python如何截图保存的三种方法(小结)
Sep 01 #Python
You might like
学习使用PHP数组
2006/10/09 PHP
php公用函数列表[正则]
2007/02/22 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
护理自我鉴定范文
2013/10/06 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
安全施工标语
2014/06/07 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript