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多线程编程(六):可重入锁RLock
Apr 05 Python
python简单实现计算过期时间的方法
Jun 09 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
Python之父谈Python的未来形式
Jul 01 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
在python中安装basemap的教程
Sep 20 Python
python实时检测键盘输入函数的示例
Jul 17 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
基于Python 函数和方法的区别说明
Mar 24 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批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
护理专业推荐信
2013/11/07 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书