XPath定位操作返回节点列表

合集下载

py xpath用法

py xpath用法

py xpath用法XPath(XML Path Language)是一种用于在XML文档中定位节点的语言。

在Python中,我们可以使用lxml库来使用XPath来解析和定位XML文档中的节点。

首先,我们需要安装lxml库。

可以使用pip命令来安装lxml 库:pip install lxml.一旦安装了lxml库,我们就可以开始使用XPath来解析XML文档。

下面是一个简单的例子来说明如何使用XPath:python.from lxml import etree.# 假设我们有一个XML文档如下:# <bookstore>。

# <book category="COOKING">。

# <title lang="en">Everyday Italian</title>。

# <author>Giada De Laurentiis</author>。

# <year>2005</year>。

# <price>30.00</price>。

# </book>。

# <book category="CHILDREN">。

# <title lang="en">Harry Potter</title>。

# <author>J.K. Rowling</author>。

# <year>2005</year>。

# <price>29.99</price>。

# </book>。

# </bookstore>。

# 解析XML文档。

tree = etree.parse('books.xml')。

xpath定位大全

xpath定位大全

xpath定位⼤全写在之前,每次⾃⼰通过xpath定位的时候,在⽹上找的不是很全,所以想⾃⼰写⼀个相对⽐较全的,⽅便查阅;如果写的不好或者不⾜的,请指正,谢谢!xpath定位分为绝对路径和相对路径⼀:绝对路径绝对路径是指⽬录下的绝对位置,直接到达⽬标位置,通常是从盘符开始的路径,以百度⾸页为例,查询输⼊框的定位,xpath=/html/body/div/div/div/div/div/form/span/input或者xpath=/html/body/div[2]/div[2]/div[5]/div/div/form/span/input,根据该位置在HTML底下的层级关系,⼀层⼀层找下来,如果遇到div等重复较多,可以数该标签的顺序,以便提⾼定位的精度⼆:相对路径相对路径就是指由这个⽂件所在的路径引起的跟其它⽂件(或⽂件夹)的路径关系,如xpath=//div[@class='main-logo'],相⽐绝对路径,相对路径更容易定位到对应的位置且写法简单,也不⽤担⼼元素的位置变化⽽调整定位;相对路径定位⽅式有哪⼀些:A.直接定位标签//input #//标识定位到某⼀个标签,//*则代表所有标签,//input则定位所有input标签B.标签+属性匹配//input[@id='kw'] 或者//input[@type='text'] #由⼀个标签+某⼀个属性的组合 ,其中@代表匹配属性名称,相当于匹配所有的input标签并匹配属性id=kw的元素C.标签和多个属性//input[@id='kw' and @type='text'] #由⼀个标签+多个属性的组合,相当于匹配了所有的input标签并匹配属性id=kw且属性type=text的元素//input[@id='kw' or @type='text'] #由⼀个标签+多个属性的组合,相当于匹配了所有的input标签,并匹配属性id=kw或者属性type=text的元素D.⽗⼦定位//form[@id="form"]/input #相当于先定位到了⽗节点,再找到对应的⼦节点,常⽤语当前元素不易定位⽽⽗节点较易定位的情况E.contains//input[contains(@id,'w')] #相当于匹配了所有的input标签且id属性包含字符串"w"的元素 (模糊定位)//a[contains(text(),'新闻')] #相当于匹配了所有的input标签且⽂本包含"新闻" (模糊定位)F.start-with和ends-with//input[starts-with(@id,'k')] #相当于匹配了所有的input标签且属性id以字母k开头的元素 (模糊定位)//input[ends-with(@id,'w')] #相当于匹配了所有的input标签且属性id以字母w结尾的元素 (模糊定位)G.⽂本定位//a[text()='新闻'] #精准定位到本⽂属性,contains则是模糊定位H.关系定位⽅式(通过⼦节点找⽗节点、爷节点;兄弟节点或者堂兄弟等等)1.⼦节点找⽗节点//input[@id="kw"]/.. #相当于我们精确定位到了查询输⼊框,然后找他的⽗节点,往回⾛⼀层(根据层级关系)//input[@id="kw"]/parent::span2.兄弟节点//input[@id="kw"]/../span #相当于找到了⽗节点再往下找⼦节点(兄弟节点)//input[@id="kw"]/following-sibling::a #往下找兄弟节点,也可以写//input[@id="kw"]/following-sibling::a[1],定位到后⾯的第⼏个a标签//input[@id="kw"]/preceding-sibling::span #往上找兄弟节点,也可以写//input[@id="kw"]/preceding-sibling::span[1],定位到前⾯的第⼏个span标签同理可以找到相关的爷爷节点,堂兄弟节点等等。

xpath 方法

xpath 方法

xpath 方法(原创版2篇)目录(篇1)1.XPath 简介2.XPath 的应用场景3.XPath 的基本语法4.XPath 函数5.XPath 的优势与局限性正文(篇1)一、XPath 简介XPath 是一种在 XML 文档中进行节点和属性查找的语言,它可以用来提取和操作 XML 数据。

XPath 本质上是一种路径表达式,用于表示 XML 文档中的节点和属性。

通过 XPath,我们可以在 XML 文档中快速准确地定位到所需的节点和属性,从而简化了 XML 数据的处理和操作。

二、XPath 的应用场景XPath 广泛应用于以下场景:1.数据提取:从 XML 文档中提取特定的节点和属性。

2.数据过滤:根据特定条件筛选 XML 文档中的节点和属性。

3.数据排序:对 XML 文档中的节点和属性进行排序。

4.数据修改:修改 XML 文档中的节点和属性。

三、XPath 的基本语法XPath 的基本语法包括以下几个部分:1.轴:表示节点之间的关系,包括根节点(root)、父节点(parent)、子节点(child)、同级节点(sibling)等。

2.节点类型:表示节点的类型,包括元素(element)、属性(attribute)、文本(text)、评论(comment)等。

3.运算符:用于连接路径表达式,包括斜杠(/)、双点(..)、单点(.)等。

4.函数:用于进行复杂的数据操作,如求和、求积等。

以下是一个简单的 XPath 表达式示例:```//root/element[attribute=value]/child```四、XPath 函数XPath 提供了丰富的函数来处理和操作 XML 数据,包括:1.节点操作函数:如 count、length、first、last 等。

2.属性操作函数:如 get-attribute、setAttribute 等。

3.字符串操作函数:如 substring、substring-after、substring-before 等。

xpath——父子、兄弟、相邻节点定位方式详解

xpath——父子、兄弟、相邻节点定位方式详解

xpath——⽗⼦、兄弟、相邻节点定位⽅式详解转载最后发布于2019-06-15 20:47:17 阅读数 1215 收藏1. 由⽗节点定位⼦节点最简单的肯定就是由⽗节点定位⼦节点了,我们有很多⽅法可以定位,下⾯上个例⼦:对以下代码:1.<html>2.<body>3.<div id="A">4.<!--⽗节点定位⼦节点-->5.<div id="B">6.<div>parent to child</div>7.</div>8.</div>9.</body>10.</html>1想要根据 B节点定位⽆id的⼦节点,代码⽰例如下:1.# -*- coding: utf-8 -*-2.from selenium import webdriver3.4.driver = webdriver.Firefox()5.driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')6.7.# 1.串联寻找8.print driver.find_element_by_id('B').find_element_by_tag_name('div').text9.10.# 2.xpath⽗⼦关系寻找11.print driver.find_element_by_xpath("//div[@id='B']/div").text12.13.# 3.css selector⽗⼦关系寻找14.print driver.find_element_by_css_selector('div#B>div').text15.16.# 4.css selector nth-child17.print driver.find_element_by_css_selector('div#B div:nth-child(1)').text18.19.# 5.css selector nth-of-type20.print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text21.22.# 6.xpath轴 child23.print driver.find_element_by_xpath("//div[@id='B']/child::div").text24.25.driver.quit()1结果:1.parent to child2.parent to child3.parent to child4.parent to child5.parent to child6.parent to child1第1到第3都是我们熟悉的⽅法,便不再多⾔。

xpath语法简介

xpath语法简介

xpath语法简介有多种方式可以从网页中提取我们需要的信息,既可以通过正则表达式,也可以使用BeautifulSoup模块。

除此之外,xpath表达式也是一种常见用法。

xpath称之为xml路径语言,是一种基于xml的树状结构,来提取特定元素的语言。

在python中,最常见的是通过lxml模块来使用xpath, 基本用法如下>>> from lxml import etree>>> html = etree.parse("K00001.html", etree.HTMLParser()) >>> html.xpath('/html')在xml的树状结构中,根节点用/表示,所有的元素都可以作为子节点存在。

和linux文件树中相对和绝对定位类似,在xpath中,也有两种定位的写法1. 绝对定位,用/表示,选取路径树中直接相连的子节点2. 相对定位,用//表示,表示路径树中所有的子孙节点同时,一个点号表示当前节点,两个点号表示当前节点父节点的简写方式在xpath中也是适用的。

按照以上原则,就可以快速的写出最基础的路径表达式了,以下三种写法是等价的#从根节点开始,依次指定路径>>> html.xpath('/html/head/title')[<Element title at 0x7f3795bd1d48>]#利用//符号,得到属于html标签孙节点的title标签>>> html.xpath('/html//title')[<Element title at 0x7f3795bd1d48>]#直接用//符号,捕获title标签>>> html.xpath('//title')[<Element title at 0x7f3795bd1d48>]在基础路径的基础上,我们可以通过一些筛选手段进一步对子节点进行限制。

python定位xpath节点位置的方法

python定位xpath节点位置的方法

python定位xpath节点位置的⽅法chrome 右键有copy xpath地址但是有些时候获取的可能不对可以⾃⼰⽤代码验证⼀下如果还是不⾏可以考虑从源码当中取出来趁热打铁,使⽤前⼀篇⽂章中 XPath 节点来定位HTML 页⾯。

HTML⽂件如下(您可以将其拷贝,保存成html⽂件,跟我笔者实验):<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Storm</title></head><body><h1 id="h1" name="hname" class="cname">这是⼀个h1标签</h1><form>⽂本域1:<input type="text" name="first_name"><br>⽂本域2:<input type="text" name="last_name"></form><form>密码字段:<input type="password" name="password"></form><form>单选按钮1:<input type="radio" name="radio1" value="nan">male<input type="radio" name="radio1" value="nv">female</form><form>宠物:<input type="checkbox" name="cw">猫<input type="checkbox" name="cw">狗<input type="checkbox" name="cw">兔⼦</form></body></html>1、节点上⾯的HTML⽂件,<html> 为根节点,他有个lang的属性,他有两个⼦节点<head>和<body>。

python xpath matches使用方法

python xpath matches使用方法

python xpath matches使用方法在Python中,可以使用lxml库来解析和操作XML文档,并使用XPath语法进行节点定位和匹配。

下面是使用Python中的lxml库的XPath的基本用法:```pythonfrom lxml import etree# 创建XML文档树xml = '<root><foo>hello</foo><bar>world</bar></root>'tree = etree.XML(xml)# 使用XPath选择节点result = tree.xpath('//foo') # 选择所有名称为"foo"的节点print(result) # 输出: [<Element foo at 0x7f4179f63cc8>]# 获取节点的文本内容text = result[0].textprint(text) # 输出: hello# 使用XPath选择多个节点result = tree.xpath('//foo | //bar') # 选择名称为"foo"的节点和名称为"bar"的节点print(result) # 输出: [<Element foo at 0x7f4179f63cc8>,<Element bar at 0x7f417b9e7b08>]# 使用属性进行节点选择result = tree.xpath('//foo[@attr="value"]') # 选择名称为"foo"且具有attr属性值为"value"的节点print(result) # 输出: []# 使用通配符选择节点result = tree.xpath('//*[@attr="value"]') # 选择具有attr属性值为"value"的任意节点print(result) # 输出: []# 获取节点的父节点parent = result[0].getparent()print(parent.tag) # 输出: root```这只是XPath在Python中的基本使用方法,可以根据具体的需求来进行更复杂和灵活的节点选择和操作。

pythonseleniumxpath定位操作

pythonseleniumxpath定位操作

pythonseleniumxpath定位操作xpath是⼀种在xm⽂档中定位的语⾔,详细简介,请⾃⾏参照百度百科,本⽂主要总结⼀下xpath的使⽤⽅法,个⼈看法,如有不⾜和错误,敬请指出。

注意:xpath的定位同⼀级别的多个标签索引从1开始⽽不是01. 绝对定位:此⽅法最为简单,具体格式为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 关于⽹页中的动态属性的定位,例如,应⽤程序中动态⽣成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的发货按钮,这时候不能直接定位到发货按钮,⽽是先要定位到订单号元素,再定位他的兄弟节点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<?xml version="1.0" encoding="gb2312"?>
<!--electric.xsl -->
<xsl:stylesheet version="1.0"
xmlns:xsl="/1999/XSL/Transform">
<xsl:template match="/">
<electric type="联想家电系列" count="3" info="1995age购买,现在(2008/3/31)正常使用" />
</family>
</electric_info>
在XSL文件中通过使用XPath来定位number元素,并通过循环依次输出number元素的name属性。处理该XML文档的electric.xml文件内容如下所示:
XPath
XPath用来查询指定的节点数据,在本实例使用XPath来简单查询指定节点列表。XML文件内容如下所示:
<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/xsl" href="electric.xsl"?>
<!--electric.xml -->
<electric_info>ber name="郭禄" sex="男" age="25" />
<member name="符荣" sex="女" age="25" love="乒乓球"/>
<electric type="黑白电视机" count="3" info="1982age购买,现在(2008/3/31)正常使用" />
</xsl:stylesheet>
在根模板中,在最外层中的xsl:for-each的select属性值“electric_info/family”来指定选择所有family元素下所有节点集合,通过里层的for-each的select属性值“member”来选择所有electric_info/family/下面的member元素,最后通过value-of的select属性值“@name”来显示member元素的name属性,运行效果如图9-2所示。
</family>
<family>
<member name="赵俊" sex="男" age="30" />
<member name="岳楠" sex="女" age="31" love="游泳,跑步"/>
<electric type="家庭影院" count="3" info="1980age购买,现在(2008/3/31)正常使用" />
图9-2显示指定列表元素
<xsl:for-each select="electric_info/family">
<xsl:for-each select="member">
<xsl:value-of select="@name" />
</xsl:for-each><br/>
</xsl:for-each>
</xsl:template>
相关文档
最新文档