selenium XPath定位的实现示例

 更新时间:2024年10月18日 09:15:52   作者:itxck  
XPath是一种在XML文档中定位和选择节点的语言,通过路径表达式遍历XML树,支持节点选取、字符串匹配、数值计算、逻辑运算等功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、XPATH概念

XPath是一种用于在 XML 文档中定位和选择节点的语言。它是一种在 XML 文档中导航和查询数据的标准方式,通常用于从 XML 文档中提取特定信息或执行数据操作。XPath 使用路径表达式来遍历 XML 树,并且支持多种功能,如节点选取、字符串匹配、数值计算、逻辑运算等,可以帮助用户准确定位到文档中所需的节点或内容。XPath 的语法类似于文件系统路径,通过使用斜杠(/)、双斜杠(//)、方括号([])等符号来描述节点之间的层次关系和属性条件,从而实现对 XML 结构的灵活查询和筛选。XPath 在 XML 数据处理、Web 抓取、XSLT 转换等领域广泛应用,为处理和操作 XML 数据提供了强大的工具和方法。

二、常用规则与方法

我们现用表格列举一下几个常用规则:

方法概念
/从当前节点选取直接子节点
/ /从当前节点选取子孙节点
.选取当前节点
选取当前节点的父节点

1.f12例子:

<div>
    <ul>
         <li class="item-0">
         	<a href="https://ask.hellobi.com/link1.html" rel="external nofollow" >第一项</a>
         </li>
         <li class="item-1">
         	<a href="https://ask.hellobi.com/link2.html" rel="external nofollow" >第二项</a>
         </li>
         <li class="item-inactive">
         	<a href="https://ask.hellobi.com/link3.html" rel="external nofollow" >第三项</a>
         </li>
         <li class="item-1">
         	<a href="https://ask.hellobi.com/link4.html" rel="external nofollow" >第四项</a>
         </li>
     </ul>
 </div>

2.节点获取文本

获取first item文本

  • 通过连续的 / 或 // 可以查找子节点或子孙节点
  • 我们选取了第一个li 节点,中括号中传入数字1即可,注意这里和代码中不同,序号是以 1 开头的,不是 0 开头的。
  • 如果我们要选取最后一个 li 节点,中括号中传入 last() 即可,返回的便是最后一个 li 节点
  • 最后使用/text()或者在括号外面.text获取节点内部文本
dr.find_element(By.XPATH,'//div/ul/li[1]/a/text()')
dr.find_element(By.XPATH,'//div/ul/li[1]/a').text

3.属性匹配

在选取的时候我们还可以用 @ 符号进行属性过滤,比如在这里如果我们要选取 class 为 item-0 的 li 节点,可以这样实现:

dr.find_element(By.XPATH,'//li/a[@class="item-0"]')

在这里我们通过加入 [@class=“item-0”] 就限制了节点的 class 属性为 item-0,文本中符合条件的 li 节点有一个,所以返回结果应该返回匹配到的元素,结果如下:

第一项

4. 属性获取

我们知道了用 text() 可以获取节点内部文本,那么节点属性该怎样获取呢?其实还是用 @ 符号就可以,例如我们想获取所有 li 节点下所有 a 节点的 href 属性,代码如下:

dr.find_element(By.XPATH,'//li/a/@href')

在这里我们通过 @href 即可获取节点的 href 属性

我们还能使用selenium里dr.find_elements方法,用for循环取便历所有的"//li/a",用.get_attribute(‘href’),将所有的href属性全部获取,代码如下:

a=dr.find_elements(By.XPATH,'//li/a')
for href in a:
    print(href.get_attribute('href'))

5.iframe标签处理

当有frame标签时需要使用他的id来进行切换,要不然不能取到frame标签下的内容

语法:

switch_to.frame(“frame_id”)

例子:

<body>
<iframe src = "a.html" id = "frame_id" name = "myframe">
</iframe>
</body>

如何定位到iframe呢:

  from selenium import webdriver
  
  driver = webdriver.Chrome()
  #用frame的index来定位,第一位时0
  driver.switch_to.frame(0)

三、同级节点元素定位

【同级元素】:

  • 向下寻找 following-sibling::
  • 向上寻找 preceding::

在这里插入图片描述

通过li[2]QQ登录使用following-sibling::找微博登录:

dr.find_element(By.XPATH,'//div[@class='_3x8w3YCi']/ul/li[2]/following-sibling::li[1]')

在这里插入图片描述

  • 通过li[2]QQ登录使用preceding-sibling::找微信登录:
dr.find_element(By.XPATH,'//div[@class='_3x8w3YCi']/ul/li[2]/preceding-sibling::li[1]')

在这里插入图片描述

四、关键字定位

根据文本找位置

dr.find_element(By.XPATH,'//li/a[text()="第一项"]')

五、定位父级元素

【父级元素】

/parent::

如下面的xpath,定位ul下的li包含"处理"的文本,然后再定位该li的父级元素

完整代码:

dr.find_element(By.XPATH,'ul/li/parpent::*')

到此这篇关于selenium XPath定位的实现示例的文章就介绍到这了,更多相关selenium XPath定位内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • python实现图像降噪

    python实现图像降噪

    这篇文章主要为大家详细介绍了python实现图像降噪,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 关于python返回值return用法详解

    关于python返回值return用法详解

    这篇文章主要介绍了python中的return关键字,包括其含义、作用、默认返回值、不同整数值的含义、返回值的类型、函数作为参数传递以及在类方法中的特殊情况,需要的朋友可以参考下
    2024-12-12
  • 浅谈python中str字符串和unicode对象字符串的拼接问题

    浅谈python中str字符串和unicode对象字符串的拼接问题

    今天小编就为大家分享一篇浅谈python中str字符串和unicode对象字符串的拼接问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python中作用域的深入讲解

    Python中作用域的深入讲解

    这篇文章主要给大家介绍了关于Python中作用域的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • python gensim使用word2vec词向量处理中文语料的方法

    python gensim使用word2vec词向量处理中文语料的方法

    这篇文章主要介绍了python gensim使用word2vec词向量处理中文语料的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python爬虫爬取美剧网站的实现代码

    Python爬虫爬取美剧网站的实现代码

    一直在学习Python爬虫,所以今天就心血来潮来写了个爬虫,抓取该网站上所有美剧链接,并保存在文本文档中,想要哪部剧就直接打开复制链接到迅雷就可以下载啦
    2016-09-09
  • Python使用itcaht库实现微信自动收发消息功能

    Python使用itcaht库实现微信自动收发消息功能

    这篇文章主要介绍了Python使用itcaht库实现微信自动收发消息功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用用Pyspark和GraphX实现解析复杂网络数据

    使用用Pyspark和GraphX实现解析复杂网络数据

    GraphX是Spark提供的图计算API,它提供了一套强大的工具,这篇文章将详细为大家介绍如何在Python / pyspark环境中使用graphx进行图计算,感兴趣的可以了解下
    2024-01-01
  • python 垃圾收集机制的实例详解

    python 垃圾收集机制的实例详解

    这篇文章主要介绍了 python 垃圾收集机制的实例详解的相关资料,希望通过本文能帮助大家理解这部分内容,需要的朋友可以参考下
    2017-08-08
  • Python实现按特定格式对文件进行读写的方法示例

    Python实现按特定格式对文件进行读写的方法示例

    这篇文章主要介绍了Python实现按特定格式对文件进行读写的方法,可实现文件按原有格式读取与写入的功能,涉及文件的读取、遍历、转换、写入等相关操作技巧,需要的朋友可以参考下
    2017-11-11

最新评论