xpath介绍

xpath介绍xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。1、公式://标签名称[@属性='属性的值']//*[@id="kw"]相对路径/h

大家好,欢迎来到IT知识分享网。xpath介绍"

xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。

1、公式://标签名称[@属性=’属性的值’]

//*[@id=”kw”] —相对路径

/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input –绝对路径

表达式 说明
/ 绝对定位,从根节点选取
// 相对定位,从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置,稳定性高,更简洁
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性,@class=’xxx’或@id=’xxx’或@name=’xxx’,属性放在中括号中[]
* 通配符。匹配所有 //*
@* 通配符。匹配所有属性 //*[@*=’WORD’]

二、xpath定位方式扩展

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

#依据id属性通过xpath表达式定位输入框
driver.find_element("xpath","//input[@id='kw']")

#依据class属性通过xpath表达式定位输入框
driver.find_element("xpath","//input[@class='s_ipt']")

#依据name属性通过xpath表达式定位输入框
driver.find_element("xpath","//input[@name='wd']")

#通过xpath进行组合定位百度超文本链接
driver.find_element("xpath","//a[@target='_blank'][@href='http://news.baidu.com']")
driver.find_element("xpath","//a[@target='_blank' and @href='http://news.baidu.com']")

#依据text文本通过xpath定位百度超文本链接
driver.find_element("xpath","//a[text()='地图']")

#通过contians()定位已知的部分属性值
driver.find_element("xpath","//a[contains(text(),'闻')]")

#通过索引去获取,括号的作用:提高运算优先级
driver.find_element("xpath","(//input)[1]")

# 通过父亲去找儿子 //div/span/input  /---表示目录的层级
driver.find_element("xpath","//span[@id='s_kw_wrap']/input[@id='kw']")

#通过祖先去找后代
driver.find_element("xpath","//form[@id='form']//input[@id='kw']")

#通过儿子去找父亲
driver.find_element("xpath","//input[@id='kw']/..")

#其他方法都不行的时候,这个时候就用到轴运算,最终绝招
#找哥哥姐姐
driver.find_element("xpath","//input[@id='kw']/preceding-sibling::span")
#找弟弟妹妹
driver.find_element("xpath","//input[@id='kw']/following-sibling::span")
# 找祖先
driver.find_element("xpath","//input[@id='kw']/ancestor::span")

三、元素定位的优缺点(上篇文章未讲到,此处补充下)

1、id和name:

        1、优点:易于定位元素,大多数时其属性值是唯一的,web页面的同一个页面当中,id是唯一的

        2、缺点:很多元素没有id和name属性

2、class_name和tag_name:

        1、优点:几乎所有的元素都有class_name和tag_name

        2、缺点:class和tag的值往往不是唯一,很难精准的找到一个元素

3、link_text和partial_link_text:

        1、特点:只能用于<a>标签

        2、区别:

                        1、link_text:用于一些<a>标签名字比较短的

                        2、partial_link_text:用于一些<a>标签名字很长,我们可以选取一部分特殊的词去定位

4、xpath和css_selector:

        1、特点:xpath和css_selector几乎可以用于所有的页面元素定位,都可以直接生成。但是有的时候直接生成的也不是100%管用,有些情况还是需要手工去写xpath和css_selector

        2、可以采用任意属性来定位元素,只需要在属性的两边加一对中括号即可

 

Xpath轴定位方式

 

xpath
特点:
1、万能定位方法
2、支持各种属性组合定位
3、支持层级关系定位

分类
1、绝对路径定位
2、相对路径定位
    优点:不用考虑位置,不用考虑层级关系,相对绝对定位来说稳定性要强一些,可以通过ctrl+f检查元素是否正确
    缺点:依赖页面各种属性(属性组合起来要唯一)

xpath定位方式
一、通过元素本身的属性来定位
1、标签名+属性的值
语法:
    1、一个条件://input[@id="su"]
    2、多个条件://input[@id="su" and @type="submit"]
    3、定位到多个元素通过索引取值,索引值从1开始://input[@type="hidden"][1]
    4、元素属性+文本组合定位:
    //a[text()="更多" and @name="tj_briicon"]
2、标签名+文本定位
语法:
    1、//span[text()="孟晚舟获释:感谢祖国和人民的支持"]

3、标签名+contains()函数匹配部分属性值或者文本内容定位
    1、定位文本内容
    //span[contains(text(),"孟晚舟获释回国 外交部回应")]
    2、定位属性值:
    t//span[contains(@class,"title-content-title")]
    3、定位文本内容+属性值组合定位
    //span[contains(@class,"title-content-title" ) and text()="孟晚舟获释:感谢祖国和人民的支持"]
    //a[contains(text(),"更多") and @name="tj_briicon"]
    4、定位子节点组合定位
    //div[@id="s_fm"]//input[@id="kw"]
二、通过元素的关系进行定位(轴定位)
1、层级定位通过某个区域的层级关系找到元素
    /:只定位直接子节点://span[@id="s_btn_wr"]/input
    //:定位该节点下的所有节点://div[@id="s_fm"]//input
2、轴名称1:ancestor:祖先节点,包括父节点
    //input[@id="kw"]/ancestor::span/i[1]
    //input[@id="kw"]/ancestor::span//i[@title="清空"]
3、轴名称2:parent:父节点
    //h3[text()="python自动化42期"]/parent::div[@class="header-info"]/p[text()="42期"]
    //parent::div[@class="header-info"]/p[text()="42期"]
4、轴名称3:following:当前节点【之后】的所有节点
    查找当前节点下直接子节点
    //div[@class="content-info"]/following::div
    查找当前节点下所有节点
    //div[@class="content-info"]//following::div
5、轴名称4:preceding:当前节点【之前】的所有节点
    //div[text()=" 课程学习 "]/preceding::div
6、轴名称5:following-sibling:当前节点【之后】的所有兄弟节点
    //div[text()=" 课程学习 "]/following-sibling::div
    //div[text()=" 课程学习 "]/following-sibling::div[text()=" 学情分析 "]
    //div[text()=" 课程学习 "]/following-sibling::div[3]
7、轴名称6:preceding-sibling:当前节点【之前】的所有兄弟节点
    //div[text()=" 成绩管理 "]/preceding-sibling::div[text()=" 课程学习 "]
    //div[text()=" 成绩管理 "]/preceding-sibling::div[1]

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31200.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信