找回密码
 立即注册

QQ登录

只需一步,快速开始

selenium XPath定位的实现示例

2024-11-5 04:05| 发布者: 44f6fa4f5| 查看: 264| 评论: 0

摘要: 目录一、XPATH概念二、常用规则与方法1.f12例子:2.节点获取文本3.属性匹配4. 属性获取5.iframe标签处理三、同级节点元素定位四、关键字定位五、定位父级元素一、XPATH概念 XPath是一种用于在 XML 文档中定位和选择节
目录

一、XPATH概念

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

二、常用规则与方法

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

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

1.f12例子:

[code]<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> [/code]

2.节点获取文本

获取first item文本

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

3.属性匹配

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

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

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

[code]第一项[/code]

4. 属性获取

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

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

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

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

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

5.iframe标签处理

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

语法:

[code]switch_to.frame(“frame_id”)[/code]

例子:

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

如何定位到iframe呢:

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

三、同级节点元素定位

【同级元素】:

  • 向下探求 following-sibling::
  • 向上探求 preceding::

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

四、关键字定位

根据文本找位置

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

五、定位父级元素

【父级元素】

[code]/parent::[/code]

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

完备代码:

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

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


来源:https://www.jb51.net/python/328975yv9.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新评论

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 16:55 , Processed in 0.031697 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部