find_element_by_xpath()使用的几种方法

XPath (XML Path Language),是一种在XML文档中搜素和定位元素的查询语言。
一、节点类型包括
元素,属性,文本,命名空间,指令处理,注释及文档

二、通过路径表达式从XML文档中选取节点或节点设置
有点像文件查看,/代表根目录,一级一级的查找,直到子节点:/html/body/div/p

表达式结果
/xxx选取根节点xxx
/xxx/yyy根据绝对路径选择元素
//xxx整个文档扫描,找到所有xxx元素
//xxx/yyy所有父元素为xxx的yyy元素
.选取当前节点的父元素节点
. .选取父元素地址(中间没空格,不带空格会显示3个".",我等下一定要测一哈这个网站。。。)
//xxx[@id]选取所有xxx元素中有id属性的元素
//xxx[@id=yyy]选取所有xxx元素id属性为yyy的元素

三、实例表述 find_element_by_xpath(“XPath”)
查找具体的元素,必须在前面按照上表的表达式输入,表示从当前节点寻找所有的后代元素
1.通过属性定位元素: find_element_by_xpath("//标签名[@属性=‘属性值’]")

属性实例
id属性find_element_by_xpath("//input[@id=‘kw’]")
class属性element_by_xpath("//input[@class=‘s_ipt’]")
name属性find_element_by_xpath("//input[@name=‘wd’]")
maxlength属性find_element_by_xpath("//input[@maxlength=‘255’]")

2.通过标签名定位元素
如指所有input标签元素:find_element_by_xpath("//input")
3.父子定位元素
查找有父亲元素的标签名为span,它的所有标签名叫input的子元素find_element_by_xpath("//span/input")
4. 兄弟节点的选择
相邻后面的兄弟节点的选择:following-sibling:: 两个冒号
//div/following-sibling::p 选择div里相邻的p节点
相邻前面的兄弟节点的选择:preceding-sibling:: 此方法在css_selector中没有
//div/preceding-sibling::p[2] 选择div里前面相邻的第二个节点,不加[2]选择的是前面的所有的p节点
5.根据元素内容定位元素(非常实用)
find_element_by_xpath("//p[contains(text(),‘京公网’)]")

<p id="jgwab">
<i class="c-icon-jgwablogo"></i>
京公网安备11000002000001号
</p>

contains的另一种用法//input[contains(@class,‘s’)]#说明class属性包含s的元素。
6.组合定位元素
find_element_by_xpath("//span/input[@class=‘s_ipt’]")#//父元素标签名/标签名的属性值:指的是span下的input标签下class属性为s_ipt的元素
多个属性组合定位(也挺常用的)
find_element_by_xpath("//input[@class=‘s_ipt’ and @name=‘wd’]")#指的是input标签下id属性为kw且name属性为wd的元素
find_element_by_xpath("//p[contains(text(),‘京公网’) and @id=‘jgwab’]") #指的是p标签下内容包含“京公网”且id属性为jgwab的元素

表达式结果
//*[count(xxx)=2]统计xxx元素个数=2的节点
//*[local-name()=‘xxx’]找到tag为xxx的元素
//*[starts-with(local-name(),‘x’)]找到所有tag以x开头的元素
//*[contains(local-name(),‘x’)]找到所有tag包含x的元素
//*[string-length(local-name())=3]找到所有tag长度为3的元素
//xxx丨//yyy多个路径查找

7.选择第几个节点
//div/p[2] 选择div下的第二个p节点 ;等价于css_selector里的div>p:nth-of-type(2) 符合p类型的第二个节点
//div/*[2] 选择div下第二个元素
//div/p[position()=2]
position()=2 指定第二个位置; 等价于上面的 //div/p[2]
position()>=2 位置大于等于2
position()<2 位置小于2
position()!=2 位置不等于2
//div/p[last()] 选择div下的倒数第一个p节点; last()倒数第一个
//div/p[last()-1] 选择div下的倒数第二个p节点;
//div/p[position()=last()] 倒数第一个
//div/p[position()=last()-1] 倒数第二个
//div/p[position()>=last()-2] 倒数第一个,第二个,第三个
8. 在webelement对象里面使用查找Xpath 查找时,也可以使用.指明当前节点
food = driver.find_element_by_id(‘food’)
eles = food.find_elements_by_xpath(".//p") .指明当前节点
eles = food.find_elements_by_xpath("…") 查找当前节点的父节点
9.比较懒惰的方法
使用搜狐浏览器的firebug工具,复制XPath路径,不过这种方式对层级要求高,到时候自己再修改下。
参考:
https://www.cnblogs.com/yufeihlf/p/5717291.html#test8
里面还有其他的关于元素查找的办法,总结得相当好。
https://www.cnblogs.com/programer-xinmu78/p/10881766.html
同样写xpath的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值