selenium元素定位总结 - xpath定位高级用法

文章目录

  • 1.8种元素定位方法
  • 2.xpath定位的高级用法
    • 1. 绝对路径
    • 2.相对路径
    • 3. 索引定位
    • 4.使用XPATH的属性值定位元素
    • 5.使用XPATH的属性名称定位元素
    • 6.使用任意值来匹配属性及元素
    • 7.使用模糊的属性值匹配
      • starts-with()
      • ends-with()
      • contains()
      • text()
      • last()
    • 8.过虑某个元素
      • name()
    • 9.常用函数
      • parent 选取当前节点的父节点
      • ancestor 选取当前节点的所有先辈(父、祖父等)
      • descendant选取当前节点的所有后代元素(子、孙等)
      • descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身
      • preceding 选取文档中当前节点的开始标签之前的所有节点
      • preceding-sibling选取当前节点之前的所有同级节点
      • following 选取文档中当前节点的结束标签之后的所有节点(包括自己及自己的后代元素
      • following-sibling选取当前节点之后的所有同级节点
  • 3.xpath定位实例

1.8种元素定位方法

  • find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素

  • find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素

  • find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素

  • find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素

  • find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素

  • find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素

  • find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素

  • find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素

2.xpath定位的高级用法

表达式描述
/从根节点选取,也就是当前节点的最顶层(默认情况下当前节点是 html 最顶层,若从某元素开始,当前节点为此元素)
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
. .选取当前节点的父节点
@选取属性

1. 绝对路径

以 “/” 开头, 让xpath 从文档的根节点开始解析

driver.find_element_by_xpath(“html/body/div/form/input”)

2.相对路径

以"//" 开头, 让xpath 从文档的任何元素节点开始解析(也就是说每个节点都作为起点找一下

driver.find_element_by_xpath(“//body/div/form/input”)

3. 索引定位

driver.find_element_by_xpath(“//input[1]”)

4.使用XPATH的属性值定位元素

driver.find_element_by_xpath(“//input[@id=‘username’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’][@name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ and @name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ or @name=‘sub1’]”)

5.使用XPATH的属性名称定位元素

查找所有input标签中含有type属性的元素
driver.find_element_by_xpath(“//input[@type]”)
查找所有a标签中含有onclick属性的元素
driver.find_element_by_xpath(“//a[@onclick]”)

6.使用任意值来匹配属性及元素

匹配所有input元素中含有属性的值为readonly的元素
driver.find_element_by_xpath(“//input[@*=‘readonly’]”))

7.使用模糊的属性值匹配

starts-with()

匹配一个属性开始位置的关键字,是模糊定位的一种。

匹配id以submit开头的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[starts-with(@id,‘submit’)]”)

ends-with()

匹配一个属性结束位置的关键字,是模糊定位的一种。

匹配id以submit结尾的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[ends-with(@id,‘submit’)]”)

contains()

匹配一个属性值中包含的字符串,也是模糊定位的一种。

匹配id中含有submit的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[contains(@id,‘submit’)]”)

匹配name属性中包含na关键字的页面元素
driver.find_element_by_xpath(“//input[contains(@name,‘na’)]”)

text()

根据文本信息匹配元素位置。

表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“//div[@class=‘class3’][contains(text(),‘div2’)]/…/text()”)

last()

函数位置定位。

表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“/div/form/input[last()]”)

8.过虑某个元素

name()

获取标签名称。

表示过虑掉在 div id='query_reulst_box' 的下的 style 标签和 meta 标签
driver.find_element_by_xpath("//div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text())

9.常用函数

parent 选取当前节点的父节点

//*[@id=“content_views”]/p[51]/span[1]/parent::p

ancestor 选取当前节点的所有先辈(父、祖父等)

//*[@id=“content_views”]/p[51]/span[1]/ancestor-or-self::div

descendant选取当前节点的所有后代元素(子、孙等)

//*[@id=“content_views”]/descendant::span

descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身

//*[@id=“content_views”]/p[51]/descendant-or-self::p

preceding 选取文档中当前节点的开始标签之前的所有节点

//*[@id=“content_views”]/p[51]/preceding::p

preceding-sibling选取当前节点之前的所有同级节点

//*[@id=“content_views”]/p[51]/span[2]/preceding-sibling::span

following 选取文档中当前节点的结束标签之后的所有节点(包括自己及自己的后代元素

//*[@id=“content_views”]/p[51]/following::p

following-sibling选取当前节点之后的所有同级节点

//*[@id=“content_views”]/p[51]/span[2]/following-sibling::span

3.xpath定位实例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上课啦</title>
</head>
<body>
<p id="abc">浔阳江头夜送客,枫叶荻花秋瑟瑟1</p>
<p id="abd">浔阳江头夜送客,枫叶荻花秋瑟瑟2</p>
<input name="a1">
<div><select><option>主人下马客在船,举酒欲饮无管弦</option><option>醉不成欢惨将别,别时茫茫江浸月</option><option>忽闻水上琵琶声,主人忘归客不发</option></select>
</div>
<a href="http://www.baidu.com">访问百度</a>
<span>君既为府吏,守节情不移</span>
<span class="a2">鸡鸣入机织,夜夜不得息</span>
<div><table><tr><td>头上玳瑁光,腰若流纨素</td></tr><tr><td>出师未捷身先死,长使英雄泪满襟</td></tr></table>
</div>
</body>
</html>
# -*- coding: utf-8 -*-
# @project : day5
# @author: lw
# @file: study.py
# @ide: PyCharm
# @time: 2021/8/1 19:30
import timefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManagerservice = ChromeService(executable_path=ChromeDriverManager().install())driver = webdriver.Chrome(service=service)
fileHtml1 = "file:///Users/liwei/Downloads/%E8%85%BE%E8%AE%AF%E8%AF%BE%E5%A0%8237-38%E6%9C%9F2020-7-8/day2/test.html"
driver.get(fileHtml1)element_absolute = driver.find_elements("xpath", "//body/p")
print("Xpath 绝对径定位: ")
for element in element_absolute:print(element.text)print("================================================")
print("Xpath 相对路径定位: ")
element_xiangdui = driver.find_elements("xpath", "//body/p")
for element in element_xiangdui:print(element.text)print("================================================")
print("Xpath 索引定位: ")
element_index = driver.find_elements("xpath","//*[@id][2]")
for element in element_index:print(element.text)print("================================================")
print("XPATH的属性名称元素: ")
element_attribute = driver.find_elements("xpath", "//*[@id]")
for element in element_attribute:print(element.text)print("================================================")
print("XPATH的属性值定位元素: ")
element_attributeValue = driver.find_elements("xpath", "//*[@id='abc']")
for element in element_attributeValue:print(element.text)print("================================================")
print("使用任意值来匹配属性及元素: ")
element_any = driver.find_elements("xpath", "//*[@*='a2']")
for element in element_any:print(element.text)print("================================================")
print("使用模糊的属性值匹配: ")
element_starts = driver.find_elements("xpath", "//*[starts-with(@id,'a')]")
# end是新语法不是所有浏览器都支持
# element_ends = driver.find_elements("xpath", "//*[ends-with(@id,'d')]")
element_contains = driver.find_elements("xpath", "//*[contains(@id,'a')]")for element in element_starts:print("starts-with(@id,'a')" + element.text)# for element in element_ends:
#     print("ends-with(@id,'d')" + element.text)for element in element_contains:print("contains(@id,'a')" + element.text)print("================================================")
print("根据文本信息匹配元素位置: ")
element_text = driver.find_element("xpath", "//*[text()='访问百度']")
print(element_text.text)print("================================================")
print("last()元素位置: ")
element_last = driver.find_element("xpath", "//*[@id][last()]")
print(element_last.text)print("================================================")
print("name函数: ")
element_name = driver.find_elements("xpath","//*[not (name()='p' or name()='div')]//*[name()='select']")
for element in element_name:print(element.text)print("================================================")
print("常见位置函数: ")
element_parent = driver.find_element("xpath", "//*[@id]/parent::body")
print("parent"+element_parent.tag_name)
element_ancestor = driver.find_element("xpath", "//td/ancestor::tbody")
print("ancestor"+element_ancestor.tag_name)
element_descendant = driver.find_element("xpath", "//div[1]/descendant::option")
print("element_descendant" + element_descendant.text)'''
//div[1]/descendant::option[3]/preceding::option
//div[1]/descendant::option[3]/preceding-sibling::option
//div[1]/descendant::option[1]/following::option
//div[1]/descendant::option[1]/following-sibling::option'''driver.quit()

Xpath 绝对径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 相对路径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 索引定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性名称元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性值定位元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
================================================
使用任意值来匹配属性及元素:
鸡鸣入机织,夜夜不得息
================================================
使用模糊的属性值匹配:
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
根据文本信息匹配元素位置:
访问百度
================================================
last()元素位置:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
name函数:
主人下马客在船,举酒欲饮无管弦
醉不成欢惨将别,别时茫茫江浸月
忽闻水上琵琶声,主人忘归客不发
================================================
常见位置函数:
parentbody
ancestortbody
element_descendant主人下马客在船,举酒欲饮无管弦

Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2023遥感应用组一等奖】“变”捷施肥-基于遥感的精准施肥检测决策实施一体化系统

作品介绍 1 应用背景 冬小麦是我国主要的粮食作物之一,粮食安全有利于社会稳定发展。氮是作物生长的重要元素之一,影响作物籽粒形成与品质优劣,是作物产量最重要的限制因素。氮肥对粮食增产的贡献率达到30%~50%,是保证作物高产、稳产的关键。实现作物氮素营养的精准监测…

Plant, Cell Environment:DNA pull down技术助力揭示AP2/ERF类转录因子提高芍药耐高温能力的分子机制

芍药是一种传统的中药材&#xff0c;并且具有极高的欣赏价值&#xff0c;其生长发育经常受到高温胁迫的影响。褪黑素是一种内源性微分子吲哚胺化合物&#xff0c;在各种生物体中具有多种生理功能&#xff0c;大量研究表明调节与褪黑素生物合成相关的基因来提高植物对高温的耐受…

CMake官方教程中文翻译 Step 11: Adding Export Configuration

鉴于自己破烂的英语&#xff0c;所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。 英语好的同学建议直接去看cmake官方文档&#xff08;英文&#xff09;学习&#xff1a;地址 点这里 或复制&#xff1a;https://cmake.org/cmake/help/latest/guide/tutorial/index.html …

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例&#xff1a;比特币的可扩展性挑战8.1.3 拓展案例 1&#xff1a;以太坊的可扩展性改进8.1.4 拓展案例 2&#xff1a;侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例&#xff1a;比特币交易的安全性8.…

linux查询文件夹及文件数目

1.查询文件夹下的文件夹数目 expr $(find ./uploud_from_machine/formal_dom/18 -maxdepth 1 -type d | wc -l) - 1 2.查询文件夹下的文件数目 要统计目录中的所有项&#xff08;文件和子目录&#xff09;&#xff0c;但不包括目录本身&#xff0c;可以使用以下命令&#xf…

DVI接口如何连接HDMI接口显示器?DVI转HDMI转换器DHA

DVI转HDMI转换器DHA简介 DVI转HDMI转换器DHA能够将DVI信号和R/L音频信号输入转换成HDMI信号输出,独特的功能使其顺畅地整合到家庭影院中&#xff0c;并且播放出高品质的图像。主要用于数据监控中心、大型会议展示中心、学校及各个公司 DVI转HDMI转换器DHA特点 01.支持分辨率4K…

网络协议 TCP协议

网络协议 TCP协议 文章目录 网络协议 TCP协议1. TCP协议段格式2. 可靠传输保障机制2.1 确认应答2.2 超时重传 3. 连接保障机制3.1 三次握手&#xff08;建立连接&#xff09;3.2 四次挥手&#xff08;断开连接&#xff09;3.3 TCP状态转换过程 4. 传输效率保障机制4.1 滑动窗口…

MySQL原理(二)存储引擎(1)概述

一、存储引擎介绍 1、概念&#xff1a; &#xff08;1&#xff09;MySQL中的数据用各种不下同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎…

中国社科院与英国斯特灵大学——认证与不认证都颁发什么证书

随着在职研究生改革的不断深入&#xff0c;越来越多的在职人士报考在职研究生&#xff0c;在职博士&#xff0c;提升自己的学历和能力。中外合作办学博士是在职博士报考方式之一&#xff0c;是由国内的院校和国外院校合作开办的在职博士教育形式&#xff0c;分可认证和不可认证…

【全csdn最前沿LVGL9】按钮的使用(lv_button)、标签的使用(lv_label)

文章目录 前言一、按钮概述二、按钮的使用2.1 创建一个按钮2.2 按钮的样式 三、标签概述四、标签的使用4.1 创建一个标签4.2 样式4.3 设置文本4.4 长文本模式4.5 文本选择4.6 文本对齐4.7 非常长的文本4.8 字体设置字体支持的Unicode字符字体列表特殊的字体 总结 前言 欢迎来到…

Unity使用反向遮罩实现镂空shader

实现步骤&#xff1a; 1&#xff0c;创建两个材质球&#xff0c;遮罩层的属性如下&#xff1a; 被遮罩层的属性如下&#xff1a; 2&#xff0c;使用两张image&#xff0c;遮罩层在父节点&#xff0c;被遮罩层在子节点&#xff0c;然后分别添加材质球与镂空图片 实现效果如下&a…

k8s存储之PV、PVC

在k8s集群中&#xff0c;资源存储会散落到各个工作节点上&#xff0c;这样对用资源调用很不方便&#xff0c;那么k8s是如何实现存储资源共享的呢&#xff0c;本文浅尝辄止的探讨一下&#xff0c;k8s是通过pv、pvc实现的。 一、PV、PVC的概念 1、持久卷(PV&#xff09; pv是Pe…

2024-01-07-AI 大模型全栈工程师 - AI 产品部署和交付

摘要 2024-01-07 周日 杭州 阴 本节内容: 如何选择 GPU 和云服务器&#xff0c;追求最高性价比如何部署自己的 fine-tune 的模型&#xff0c;向业务提供高可用服务如何控制内容安全&#xff0c;做好算法备案&#xff0c;确保合规 课程内容 1. 硬件选型 a. Nvidia 几乎是模…

W801学习笔记十:HLK-W801制作学习机/NES游戏机(总结)

本章总结一下整个开发过程中遇到的问题&#xff1a; 1、引脚的抗干扰问题&#xff1a; 屏幕显示的时候&#xff0c;概率出现花屏。无论怎么修改代码都不能解决&#xff0c;一个偶然的机会&#xff0c;发现当手触摸屏幕的WR和CS引脚时&#xff0c;屏幕会正常。查阅资料&#x…

C# 递归执行顺序

为了方便进一步理解递归&#xff0c;写了一个数字输出 class Program {static void Main(string[] args){int number 5;RecursiveDecrease(number);}static void RecursiveDecrease(int n){if (n > 0){Console.WriteLine("Before recursive call do : " n);Rec…

IAR编译和调试CMS32L051

0 Preface/Foreword 0.1 参考文档 中微半导体BAT系列单片机学习笔记_V1.1.pdf 1 配置方法 1.1 编译工具链添加 CMS对于IAR工具&#xff0c;有一个插件文件&#xff0c;用于安装对应的CMS系列芯片。 工具名称&#xff1a;iar_plug20210926.7z 按照完成之后&#xff0c;可…

[Python小工具]Python批量生成数据到MySQL

[Python小工具]Python批量生成数据到MySQL base.py #!/usr/bin/python # -*- coding:utf-8 -*- import time import random from datetime import datetime, timedelta from faker import Faker import stringfake Faker(zh_CN)class Base_conn:# 数据库连接配置初始化def _…

如果我要访问一个网址,那么在网络中会有哪些过程

访问一个网址是我们日常网络使用中非常常见的操作&#xff0c;背后涉及到一系列精密而复杂的步骤。这个过程包括DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、服务器响应、浏览器渲染等环节。在这篇文章中&#xff0c;我们将深入探讨这些步骤&#xff0c;并解释它们在…

redis配置信息整理

redis部署分为几种方式&#xff1a;单机、哨兵&#xff08;主从&#xff09;、集群。对应这几种部署方式redis的配置信息也有不同&#xff0c;总结如下&#xff1a; 单机模式&#xff1a; spring:redis:database: 0timeout: 8000password: 123456host: 192.168.56.101port: 6…

强大的虚拟机Parallels Desktop 19 mac中文激活

Parallels Desktop是一款功能全面、易于使用的虚拟机软件&#xff0c;它为用户提供了在Mac电脑上同时运行多个操作系统的便利。 软件下载&#xff1a;Parallels Desktop 19 mac中文激活版下载 Parallels Desktop 19 mac具有快速启动和关闭虚拟机的能力&#xff0c;让用户能够迅…