『心善渊』Selenium3.0基础 — 7、XPath轴定位详解
2021/6/28 23:20:32
本文主要是介绍『心善渊』Selenium3.0基础 — 7、XPath轴定位详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1、XPath轴定位介绍
- 2、位置路径表达式概念
- 3、步的路径表达式范例
- 4、练习
使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位。例如:先找到一个相对好定位的元素,在根据与它的相对位置来定位其他元素,可以解决一些元素难以定位的问题。
1、XPath轴定位介绍
轴可理解为相对于当前节点的节点集。
轴名称 | 结果 |
---|---|
ancestor |
选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self |
选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute |
选取当前节点的所有属性。 |
child |
选取当前节点的所有子元素。 |
descendant |
选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self |
选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following |
选取文档中当前节点的结束标签之后的所有节点。 |
namespace |
选取当前节点的所有命名空间节点。 |
parent |
选取当前节点的父节点。 |
preceding |
选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling |
选取当前节点之前的所有同级节点。 |
self |
选取当前节点。 |
2、位置路径表达式概念
位置路径可以是绝对的,也可以是相对的。
绝对路径起始于正斜杠(/
),而相对路径不会这样。
在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:
(1)绝对位置路径:
/step/step/...
(2)相对位置路径:
//step/step/...
每个步均根据当前节点集之中的节点来进行计算。
(3)步(step)包括:
- 轴(
axis
):定义所选节点与当前节点之间的树关系(如上表)。 - 节点测试(
node-test
):识别某个轴内部的节点(相当于标签节点或者标签节点集)。 - 零个或者更多谓语(
predicate
):索引。
(4)步的语法:
轴名称::节点测试[索引]
3、步的路径表达式范例
例子 | 结果 |
---|---|
child::book |
选取所有属于当前节点的子元素的 book 节点。 |
attribute::lang |
选取当前节点的 lang 属性。 |
child::* |
选取当前节点的所有子元素。 |
attribute::* |
选取当前节点的所有属性。 |
child::text() |
选取当前节点的所有文本子节点。 |
child::node() |
选取当前节点的所有子节点。 |
descendant::book |
选取当前节点的所有 book 后代。 |
ancestor::book |
选择当前节点的所有 book 先辈。 |
ancestor-or-self::book |
选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点) |
child::*/child::price |
选取当前节点的所有 price 孙节点。 |
4、练习
页面代码片段:
<!DOCTYPE html> <html lang="zh-cn"> <body> <div id="zc"> <legend>注册用户A</legend> <p id="p1"> <label for="userA">账号A</label> <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value=""> </p> <p> <label for="password">密码A</label> <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value=""> </p> <p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p> <input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value=""> </div> </body> </html>
代码脚本:
""" 1.学习目标: 必须掌握selenium中轴定位方法 2.语法 2.1 选择当前元素之后的同级元素 语法://A/following-sibling::B 说明:选择所有 A 元素之后同级的 B 元素。 2.2 选择当前元素之前的同级元素 语法://A/preceding-sibling::B 说明:选择所有 A 元素之前同级的 B 元素。 2.3 其他的轴定位关键字,可自己拓展练习。 3.需求 在页面中,定位指定元素。 """ # 1.导入selenium from selenium import webdriver from time import sleep import os # 2.打开浏览器 driver = webdriver.Chrome() # 3.打开注册A页面 url = "file:///" + os.path.abspath("./1.html") driver.get(url) # 4.定位页面指定元素 # 4.1 选择当前元素之后的同级元素 # 选择所有<legend>标签之后的同级的<p>元素 elements_1 = driver.find_elements_by_xpath("//legend/following-sibling::p") for element in elements_1: print(element.get_attribute("outerHTML")) # 4.2 选择当前元素之前的同级元素 # 选择所有<input>之前的同级的<p>元素 elements_2 = driver.find_elements_by_xpath("//input/preceding-sibling::p") for element in elements_2: print(element.get_attribute("outerHTML")) # 5.关闭浏览器 sleep(2) driver.quit() """ 输出结果: 打印两次如下内容 <p id="p1"> <label for="userA">账号A</label> <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value=""> </p> <p> <label for="password">密码A</label> <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value=""> </p> <p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p> """
这篇关于『心善渊』Selenium3.0基础 — 7、XPath轴定位详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?