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算法学习之计数排序实例
Dec 18 Python
python计算书页码的统计数字问题实例
Sep 26 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Python 3.x 新特性及10大变化
Jun 12 Python
python 写的一个爬虫程序源码
Feb 28 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
Python代码缩进和测试模块示例详解
May 07 Python
python创造虚拟环境方法总结
Mar 04 Python
Python下简易的单例模式详解
Apr 08 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
django-rest-framework解析请求参数过程详解
Jul 18 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注入点构造代码
2008/06/14 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
取得父标签
2006/11/14 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
python计算文本文件行数的方法
2015/07/06 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
Linux Interview Questions For software testers
2013/05/17 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
syb养殖创业计划书
2014/01/09 职场文书
2014年绿化工作总结
2014/12/09 职场文书
初中家长评语和期望
2014/12/26 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫