高级定位方法之XPath定位

目录

XPath说明

xpath语法:相对路径xpath表达式


XPath说明

概念

(1)XML:可扩展的标记语言,是对HTML的扩展,基本语法与HTML一样,只是标记和标记的属性都可以自己根据业务来定义,开发人员经常用XML来做配置文件。
(2)XPath:XML Path,是XML路径语言,XPath表达式可以用于描述在XML文档里查找一个节点(理解为一个元素)或节点集(理解为多个元素)的路径表达式。
(3)说明:因为HTML可以看做一种特殊的XML文件,所以XPath这种技术也可以用于在HTML网页里查找页面元素。

XPath定位的语法

(1)语法一:driver.find_element_by_xpath("xpath表达式")
(2)语法二:导入By后,driver.find_element(By.XPATH,"xpath表达式")

# 输入留言内容:hello
driver.find_element(By.XPATH,"//textarea").send_keys("hello")

利用一些工具来生成xpath表达式

(1)Chrome浏览器:启动Chrome---打开目标网页---目标元素右击菜单里选择“检查”---在网页源代码目标行右击菜单里选择Copy下Copy Xpath
(2)Selenium IDE:录制目标元素的操作步骤---选中这个步骤---下方代码编辑区Target(目标)下拉列表里选择xpath字样的选项
(3)其他工具:Firefox的FirePath插件,Firefox的XPath Finder插件、Firefox的Try XPath插件、最新版本的Firefox……

xpath表达式分类

(1)绝对路径xpath表达式:从根节点开始描述,比如网页里根节点就是html标记,不建议使用!可维护性差。

/html/body/div[1]/div[1]/a/img
html/body/div[1]/div[1]/a/img

(2)相对路径xpath表达式:不从根节点开始描述,以//或.//开头,更建议使用!

//*[@id="ECS_MEMBERZONE"]/a[1]/img

元素和xpath表达式的关系:多对多关系

(1)一个元素可能有多种xpath表达式的写法。
(2)一个xpath表达式可能能查找到多个元素。

xpath语法:相对路径xpath表达式

(1)最简单的xpath表达式://后直接写目标元素的标记,就可以在整个网页里查找这种标记的元素,等价于tag name定位的效果。

//a            #查找到网页里所有的超级链接
//input        #查找所有的文本框、按钮、单选按钮、复选框
//textarea     #查找所有的文本域

(2)如果直接查找目标元素不准确,可以用/分隔,前面先找它的父元素,如果还不准确,还可以继续加上一级或上上级……

#高级搜索
//form/a
//div/form/a

(3)谓词:描述筛选条件,用 [  ] 来表示,写在标记名称后,功能类似于SQL里的where子句,各个级别的标记名称后都可以加谓词。
(4)[索引号]:筛选兄弟关系节点同标记的元素中第几个,索引号从1开始编号。

//tr[last()]/td/div/i
//div[3]/span/button/span
//i[2]
//tr[last()]/td/div/i[2]

(5)[@属性名称='属性值']:筛选属性值等于特定字符串的元素。

#点击餐饮商家
//div[@id='app']/section/section/section/aside/div/ul/li[2]/span
//ul[@class='el-menu-vertical-demo leftmenu el-menu']/li[2]/span
//ul[@role='menubar']/li[2]/span

#如果有value值或者herf等其他值,也可以使用
//input[@value='1']
//input[@name='user_email']
//input[@value='餐饮商家']  #模拟
//a[@href='user.php']/img

(6)last函数:无参,返回兄弟关系节点中同标记的节点中最后一个节点的索引号,索引号从1开始,所以最后一个的索引号就是总个数,一般用于索引号较大的情况。

[last()]

#选择最后一个tr
//tr[last()]/td/div/i

#选择倒数第四个
//ul[@role='menubar']/li[last()-3]/span

(7)text函数:无参,返回当前节点的开始标记和结束标记之间的完整文本等价于link text定位

 

//li[text()='公交管理']

(8)contains函数:有2个参数,用来判断第1个参数值是否包含第2个参数值,一般第1个参数值是text()或@属性名称,第2个参数是一个字符串。等价于partial link text定位

//li[contains(text(),'公交')]       #包含“公交”两个字

//img[contains(@src,'bnt_log')]     #img,src属性值里包含“bnt_log”,只输入部分,不是全部
//a[contains(@href,'advanced')]     #href属性值里包含“advanced”的超级链接

(9)符号:
    a. 父/子,必须逐级书写。
    b. //开头,代表在整个网页里查找某标记的元素,其实是//前面默认有根节点的标记,//不仅可以写在开头,也可以写在表达式中间,祖先//后代,也就是可以跳级查找。

//div/form/select
//div//select

    c. /..  通过子找到唯一的父

//option[text()='所有分类']/..              #通过选项找到下拉列表
//a[text()='高级搜索']/../input[2]          #通过高级搜索找到搜索按钮
//option[text()='所有分类']/../../input[2]  #通过选项找到下拉列表、再找到表单、最后找到搜索按钮

    d. *  通配符,可以匹配任何字符串,用*代表标记名写在/或//后表示任意标记名称,用*代表属性名称写在@后表示任意属性名称。

//*[text()='所有分类']
//*[@*='top']/* 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值