【修订中】Xpath学习

431 阅读3分钟

xpath的主要用法(selenium,python) 这是我参与更文挑战的第1天,活动详情查看:更文挑战

python爬虫或者自动化时xpath的应用 不管是在进行爬虫或者浏览器自动化时我们首先要进行元素的获取,而xpath则是一种非常高效的手段 首先来进行xpath的概念说明: xpath是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。简单的意思就是说xpath是从一段xml文档中根据节点属性来查找具体的元素。 而html和xml 都是标记语言,都是基于文本编辑和修改的。所以xpath也可用于在html语言中获取信息

xpath主要语法 一个正斜杠(/)和两个正斜杠(//)

在获取元素时一个斜杠'/'代表了从整个文档的根节点开始

比如/html/body/div/ul/li[1] 这个【1】相当于从数组中元素的下标

两个斜杠代表了从文档中匹配到的当前节点开始

比如"//div[@class = 'table-con']/ul/li[3]/input"而不用从根节点html开始

'@'表达式代表选取属性 比如href class id 等

实例: 下图是我在项目中的xpath获取 获取一个inPut输入框的节点进行操作 首先找到他的父节点 看是否唯一如果唯一直接使用相对路径//进行开始 在控制台进行xpath语法的验证

Start Stop Snipaste_2021-06-18_10-15-21.png

xpath几个常用的函数 contains (): //div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点 text():由于一个节点的文本值不属于属性,比如'baidu',所以,用text()函数来匹配节点://a[text()='baidu']。如果不完全匹配可以使用contains//a[contains(text(),'百度')] starts-with(): //div[starts-with(@id,'in')] ,表示选择以’in’开头的id属性的div节点 not()函数,表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。写法如下://input[@id],如果我们要匹配出input节点不含用id属性的,则为://input[not(@id)]

Xpath定位 Xpath分绝对路径和相对路径, 绝对路径:就是从html开始,一直往里拨,一直到目标元素 相对路径:从一个很好定位的元素开始,然后以这个元素作为基准位置,再通过路径法去找到目标元素

Xpath语法结构 //*[@id="kw"] //表示从路径开始下开始查找 *表示任意元素 []中括号表示筛选条件 @表示基于属性来查找 例如@id=“kw”表示基于id属性为kw的元素

确认Xpath路径是否正确 1.通过google开发者工具,element页面,使用cmd+f打开搜索栏,这一栏支持xpath语法 2.通过concle界面使用$('xpath') +回车也可以定位到该元素说明无误

$x('//input[@id="kw"]')

就会定位到 [input#kw.s_ipt] 复制代码 Xpath定位方法 1.a标签带text文本

截圖 2021-05-02 22.41.54.png

2.通过寻找属性查找 html 中<> 里面的数据都是属性,Xpath语法//*[@id="kw"] @后面的id就是id属性,也可以换成其他属性。

3.当寻找的元素为动态元素时候,通过父元素或者子元素的静态元素来反用路径确定目标元素 注意/..可以查找到相对元素的父元素

截圖 2021-05-02 22.58.52.png

文章分类