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]依然是可以省略的

("//*[@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 其他的属性值如果太长,也可以采取模糊方法定位,直接上示例

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选取当前节点的所有命名空间节点

上图实例,需要点击订单号为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相反),如图:

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

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

如下所示:

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

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

原文链接:https://blog.csdn.net/huiseqiutian/article/details/73739707

python 页面script xpath_python selenium xpath定位操作相关推荐

  1. python—selenium —xpath定位方法详解

    前言 今天我们来聊聊selenium -- xpath定位方法,我们都知道selenium有八大定位策略分别是id.name.class name.tag name.link text.partial ...

  2. python页面切换_Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

  3. selenium xpath定位之会变动的元素

    最近做了一个易订货库存管理系统自动化脚本,还真是应证了那句:"敲码一小时,bug调一天" 遇到的问题: 定位网站中的某个元素时,定位的元素属性会随页面的的刷新动态加载重新生成,搞得 ...

  4. selenium怎么定位/操作图片中的验证码?

    最近在学习selenium自动化,便整理了下加深印象,如有侵权,告删! 用tesseract OCR引擎处理图片中的验证码,步骤: (1)对整个屏幕截屏,保存成png格式的图片: (2)在截取的图片中 ...

  5. VS code编写python脚本遇到的问题 ------xpath定位

    1.使用Chrome-F12(检查)你所想抓取控件的界面,如下面例子:百度界面-->百度一下 copy的控件为    //*[@id="su"] 2.进入vs code中使用 ...

  6. python selenium 元素定位和页面操作

    目录 一.浏览器操作 二.简单对象的定位 三.操作测试对象 四.鼠标事件 五.键盘事件 六.获取页面的title和url 七.设置等待时间 八.定位一组对象 九.层级定位 十.多表单切换 十一.多窗口 ...

  7. python selenium元素定位、alert操作、iframe切换、多窗口切换、键盘操作、鼠标操作、js操作、操作本地文件、css高级操作

    用了那么久的selenium,整理一篇自己经常用到的标签和方法 本文档持续更新优化,喜欢的小伙伴可以点赞收藏一下 文章目录 1. 通用元素定位方法,需要引入By. 2. 通用多个元素查找By 3. c ...

  8. python xpath定位打印元素_python基础教程:8种selenium元素定位的实现

    前言 selenium是一个非常厉害的爬虫利器,不,简直是神器了,它可以自动的控制浏览器,但是你得告诉浏览器,你想干嘛,爬哪里,这时候就要用到元素定位了,在HTML中都有着不同的标签和属性,selen ...

  9. python selenium xpath_python+selenium十四:xpath和contains模糊匹配

    xpath可以以标签定位,也可以@任意属性: 如:以input标签定位:driver.find_element_by_xpath("//input[@id='kw']") 如:@t ...

最新文章

  1. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
  2. Linux常用基本命令[cp]
  3. 人脸属性迁移学习笔记
  4. 网络推广——网络推广专员是如何进行图像优化的?
  5. 正则爬取京东商品信息并打包成.exe可执行程序。
  6. Session——servlet
  7. C++常用函数的使用方法小结
  8. bzoj1257 数学整理二分查询
  9. [转] 理解SVG transform坐标变换
  10. java protobuf 例子_用Maven实现一个protobuf的Java例子
  11. php对象底层结构,PHP 底层原理之类和对象
  12. 云服务器(Centos)部署SVN
  13. python中pow_如何在python中找到pow(a,b,c)的反向?
  14. spark-shell 基本用法
  15. python多进程调试_使用pyrasite进行python进程调试,改变运行中进程的代码
  16. asp.net mvc 伪静态路由配置
  17. 斐讯k2路由器刷华硕固件做桥接中继
  18. PowerDesigner 16.5下载安装包
  19. ORB-SLAM笔记———ORB-SLAM3概述
  20. loadrunner入门教程(24) --Load Generator

热门文章

  1. 永磁同步电机矢量控制(四)——速度环 PI 参数整定(四)
  2. 软件开发人员怎么升职加薪?技术高管建议你这么做
  3. 单职业网站上那找服务器,神途发布网:六月新服盘点
  4. 阿里云ubuntu下配置jdk环境变量总是失效
  5. 【硬着头皮啃C++ Primer】第1章 开始
  6. 爬虫 第三讲 数据解析
  7. C++/MFC工程[2]——自定义平面直角坐标系
  8. MATLAB | 一起来绘制有雪花飘落的圣诞树叭
  9. Stable Diffusion 多人绘画经验札记
  10. 计算机组成移位运算器实验,计算机组成实验报告二移位运算实验