
Pythonleniumxpath——⽗⼦、兄弟、相邻节点定位⽅式详
解
1.由⽗节点定位⼦节点
最简单的肯定就是由⽗节点定位⼦节点了,我们有很多⽅法可以定位,下⾯上个例⼦:对以下代码:
想要根据B节点定位⽆id的⼦节点,代码⽰例如下:
#-*-coding:utf-8-*-
fromleniumimportwebdriverdriver梦若浮生 =x()
('D:')
#1.串联寻找
_element_by_id('B').find_element_by_tag_name('div').text
#⽗⼦关系寻找
_element_by_xpath("//div[@id='B']/div").text
#ector⽗⼦关系寻找
_element_by_css_lector('div#B>div').text#ectornth-child
_element_by_css_lector('div#Bdiv:nth-child(1)').text#ectornth-of-type
_element_by_css_lector('div#Bdiv:nth-of-type(1)').text
#轴child
_element_by_xpath("//div[@id='B']/child::div").()
结果:
parenttochild
parenttochild
parenttochild
parenttochild
parenttochildparenttochild
第1到第3都是我们熟悉的⽅法,便不再多⾔。第4种⽅法⽤到了css选择器:
nth-child(n)
,该选择器返回第n个节点,该节点为div标签;第5
种⽅法⽤到了另⼀个css选择器:
nth-of-type(n)
,该选择器返回第n个div标签,注意与上⼀个选择器的区别;第6种⽅法⽤到了
xpath轴
child,这个是xpath默认的轴,可以忽略不写,其实质是跟⽅法2⼀样的。
当然,css中还有⼀些选择器是可以选择⽗⼦关系的如
last-child
、
nth-last-child等,感兴趣可以⾃⾏百度,有机会博主会讲讲csslector。
2.由⼦节点定位⽗节点
由⼦节点想要定位到⽗节点就有点难度了,对以世界上使用人口最多的语言是 下代码:
我们想要由C节点定位其两层⽗节点的div,⽰例代码如下:
#-*-coding:utf-8-*-
fromleniumimportwebdr鼠标不能动 iverdriver=x()
('D:')
#:`.`代表当前节点;'..'代表⽗节点
_element_by_xpath("//div[@id='C']/../..").text
#轴parent
_element_by_xpath("圣诞节祝福语 //div[@id='C']/parent::*/parent::div").()
结果:
childtoparentchildtoparent
这⾥我们有两种办法,第1种是
..
的形式,就像我们知道的,
.
表⽰当前节点,
..
表⽰⽗节点;第2种办法跟上⾯⼀样,是xpath轴中的⼀
个:
parent,取当前节点的⽗节点。这⾥也是csslector的⼀个痛点,因为css的设计不允许有能够获取⽗节点的办法(⾄少⽬前没有)
3.由弟弟节点定位哥哥节点
这是第3、第4种情况,我们这⾥要定位的是兄弟节点了。如以下源码:
怎么通过D节点定位其哥哥节点呢?看代码⽰例:
#-*-coding:utf-8-*-
fromleniumimportwebdriverdriver=x()
('D:')
#,通过⽗节点获取其哥哥节点
_element_by_xpath("//div[@id='D']/../div[1]").text
#轴preceding-sibling
_element_by_xpath("//div[@id='D']/preceding-sibling::div[1]").()
结果
br责任的故事 other1brother1
这⾥博主也列举了两种⽅法,⼀种是通过该节点的⽗节点来获得哥哥节点,另外⼀种⽐较优雅,是通过
xpath轴:preceding-sibling
,其能够获
取当前节点的所有同级哥哥节点,注意括号⾥的标号,
1
代表着离当前节点最近的⼀个哥哥节点,数字越⼤表⽰离当前节点越远,当代表着离当前节点最近的⼀个哥哥节点,数字越⼤表⽰离当前节点越远
然,
xpath轴:preceding
也可以,但是使⽤起来⽐较复杂,它获取到的是该节点之前的所有⾮祖先节点(这⾥不太好解释,改天专门写篇博⽂讲解下所有的轴)
4.由哥哥节点定位弟弟节点
源码与
3⼀致,要想通过D节点定位其弟弟节点,看代码⽰例:
#-*-coding:utf-8-*-
fromleniumimportwebdriverdriver=x()
('D:')
#,通过⽗节点获取其弟弟节点
_element_by_xpath("//div[@id='D']/../div[3]").text
#轴following-sibling
_element_by_xpath("//div[@id='D']/following-sibling::div[1]").text
#轴following
_element_by_xpath("//div[@id='D']/following::*").text#ector+
_element_by_css_lector('div#D+div').text#ector~
_element_by_css_lector('div#D~div').()
结果:
brother2
brother2
brother2
brother2brother2
博主分享了五种⽅法定位其弟弟节点,上⾯三种是⽤xpath,第⼀种很好理解,第⼆种⽤到了
xpath轴:following-sibl1岁儿童食谱大全 ing
,跟
preceding-sibling
类
似,它的作⽤是获取当前节点的所有同级弟弟节点,同样,
1
代表离当前节点最近的⼀个弟弟节点,数字越⼤表⽰离当前节点越远;第代表离当前节点最近的⼀个弟弟节点,数字越⼤表⽰离当前节点越远
三种⽤到了
xpath轴:following
,获取到该节点之后所有节点,除了祖先节点(跟
preceding
⽅向相反,但因为往下顺序容易读,不容易出错,
所以也是可以⽤来获取弟弟节点的,但也不建议这么使⽤);第四、第五种,我们⽤到了csslector,
+
和
~
的区别是:
+
表⽰紧跟在
当前节点之后的div节点,
~表⽰当前节点之后的div节点,如果⽤find_elements,则可获取到⼀组div节点。

本文发布于:2023-04-12 07:43:36,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/168125661743959.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:兄弟节.doc
本文 PDF 下载地址:兄弟节.pdf
| 留言与评论(共有 0 条评论) |