selenium元素定位方法之xpath

news2024/9/23 4:25:59

什么是xpath?

  • XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素
  • XPath使用路径表达式在XML文档中进行导航

普通语法

 

注意!

1.xpath中的值用引号引起来时,在代码中要注意区分,内单外双,内双外单。

2.xapth的class的值要填写全部,注意与find_element_by_class_name的区别。

3.xpath还支持逻辑运算符and/or,多用and来缩小范围,例如//*[@id='username' and @type='text']

4.要注意xpath中//input[1]代表第一个input标签,而不是用0,与python中的下标索引不同。

  • xpath轴语法

自动化测试中不常用,爬虫中常用,仅做了解。

学习网址:https://www.w3school.com.cn/xpath/xpath_axes.asp

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

selenium中使用xpath

为了练习,我自己想了个需求。

用selenium的xpath定位方式写一个脚本,获取微博热搜内容

步骤

1.打开微博官网https://weibo.com

2.找到热搜榜按钮位置,点击

3.找到热搜标题位置,获得文本

打开微博官网后我们找到热搜榜按钮,然后右键--检查,找到我们要点击的位置

 

发现这个标签里的属性比较多,所以首先尝试用属性法看能不能找到

通过role='link'找到4个,不唯一。

换title试试

咦,如此简单么,找到了


接下来找热搜标题的xpath路径

先手动复制热搜榜前五标题的xpath路径

方法:选中标题位置--右键检查

找到对应标签行后,再右键--复制--XPath

 

得到前五条热搜名称的xpath路径,并观察规律

然后尝试精简路径。用尽可能短的路径定位到唯一元素(因为我发现路径太长,会概率性出现定位不到元素)

根据找到的规律(变化最明显的点和最有识别度的标签名称)对路径进行简化,经过无数次的调试(我太菜了)

精简后热搜第一名的可用路径为

//main/div//div[2]//*[starts-with(@class,'HotTopic_tit_')]

ok,xpath的路径准备好之后,就可以写代码了

from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()#打开浏览器
url = 'https://weibo.com'
driver.get(url)#打开微博官网
sleep(5)
driver.find_element_by_xpath("//*[@title='热搜榜']").click()#找到热搜榜并点击
for i in range(2,7):
    sleep(1)
    print(f'此时此刻热搜第{i-1}名为:'+driver.find_element_by_xpath(
        f"//main/div//div[{i}]//*[starts-with(@class,'HotTopic_tit_')]").text)

结果如下

此时此刻热搜第1名为:张雪峰提议三胎家庭免学费
此时此刻热搜第2名为:浙江疫情
此时此刻热搜第3名为:读懂中央经济工作会议的深意
此时此刻热搜第4名为:医生建议看手机1小时后休息一下
此时此刻热搜第5名为:雪梨淘宝店铺被封

试了几次,成功率还是挺高的。

有点开心。

再整一下豆瓣的电影排行榜

from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
url = 'https:/douban.com'
driver.get(url)
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/ul/li[2]/a').click()
#这用的完整的绝对路径
sleep(5)
driver.find_element_by_xpath("//div/ul/li/a[text()='排行榜']").click()
#找规律精简后的路径
for i in range(1,11):
    sleep(2)
    print(f'豆瓣排行榜第{i}名:'+driver.find_element_by_xpath(f'//table[{i}]//a[@class=""]').text)

结果如下:

豆瓣排行榜第1名:最后的决斗 / 最后决斗(港)
豆瓣排行榜第2名:毒液2 / 毒魔:血战大屠杀(港) / 猛毒2:血蜘蛛(台)
豆瓣排行榜第3名:倒数时刻 / 滴答,滴答……轰隆隆 / 梦想期限(港)
豆瓣排行榜第4名:芬奇 / 芬奇的旅程 / 生化
豆瓣排行榜第5名:不速来客 / 眼见为虚 / Knock Knock
豆瓣排行榜第6名:斯宾塞 / 斯潘塞 / 黛妃(台)
豆瓣排行榜第7名:Soho区惊魂夜 / 苏豪的最后一夜(港) / 迷离夜苏活(台)
豆瓣排行榜第8名:圣母 / 圣欲(港/台) / 圣母玛利亚
豆瓣排行榜第9名:红色通缉令 / 红色大贱谍
豆瓣排行榜第10名:古驰家族 / GUCCI名门望族(港) / Gucci:豪门谋杀案(台)

ps:这部分刚学的,所以代码中的xpath路径虽然能满足需求,但应该还有很多更优的写法,大家私下可以教教我。

总结:

  • webUI的自动化元素定位是分析网页的一个过程
  • 绝对路径不稳定,基本不用,前边随便一个爷爷变了,孙子就找不到了。
  • 学习时先在浏览器的F12调试界面多试,确定好后再复制到代码里
  • 路径法和属性法要结合使用,找到定位元素最准确且精简路径
  • 属性值和网址这些东西,能复制尽量不要手敲
  • 刚开始学不要过度使用‘复制Xptah’,还是要先会写,再复制。
  • 根据基础用法实在定位不到元素,还有轴定位(要能想起来)。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

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

相关文章

Pandas教程07:DataFrame数据中apply参数自定义运算的用法

DataFrame.apply()方法主要用于调用每个Series的函数。此函数可以是一个Python的函数,或者是lambda函数。此函数可以接收一个函数作为输入,并应用于DataFrame的每一列。 以下是一些DataFrame.apply()的示例用法: # Author : 小红牛 # 微信公…

深度解析 Spring Security 自定义异常失效问题:源码剖析与解决方案

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

【docker系列】docker实战之部署SpringBoot项目

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

行行AI董事长李明顺:今天每个人都可以成为AI应用的创业者

“ AI创业的核心在于真正介入到应用层面,AI应该成为真正的应用支撑。 ” 整理 | 王娴 编辑 | 云舒 出品|极新 2023年11月28日,极新AIGC行业峰会在北京东升国际科学园顺利召开,行行AI董事长李明顺先生在会上做了题为《从大模型…

如何做好前端单元测试?字节5年测试老司机是这样说的!

近几年,前端发展越来越迅猛,各类框架层出不穷,前端实现的业务逻辑也越来越复杂,前端单元测试也越来越受重视,包括百度在内的一些大厂在面试中也会问到单元测试相关的题目。那么前端应该如何做好单元测试? 什…

写给步入三十的自己,2023年终总结!

前言 古语有云: “二十而立,三十而肆”,而我在二十岁这些年已经有一定的责任感和独立思考了,但是还未步入三十,所以为了之后有一定的胆识和能力,我在今年做了目前能做的准备。 今年已做事件 工作相关 1.拿到了PMP证书…

2023年大数据场景智能运维实践总结

作者:放纵 引言 在当今数字化世界中,如何充分挖掘和发挥数据价值已经成为了企业成功的关键因素,大数据也成为企业决策和运营的重要驱动力。在《当我们在谈论DataOps时,我们到底在谈论什么》一文中也提到,企业在面对到…

开关电源基础而又硬核的知识

1.什么是Power Supply? Power Supply是一种提供电力能源的设备,它可以将一种电力能源形式转换成另外一种电力能源形式,并能对其进行控制和调节。 根据转换的形式分类:AC/DC、DC/DC、DC/AC、AC/AC 根据转换的方法分类:线性电源、…

Docker篇之利用docker搭建ftp服务器可实现多用户上传

一、前言 场景:公司需要搭建FTP服务器,供内网之前可以互相传递数据,安全稳定,需要满足开通多个账号,每个用户上传的文件有自己对应的文件目录。 这里建议:用户目录Disk尽量大一点,避免因为空间不…

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故 目录 1. 背景 2. 滴滴官方消息 3. 问题分析及定位 4.网传的k8s及解析 5.k8s引发的思考:举一反三,怎么避免再次出现 6.近段时间其他平台崩溃回顾 1. 背景 11 月 27 晚约 10 点&#xf…

【Openstack Train安装】六、Keystone安装

OpenStack是一个云计算平台的项目,其中Keystone是一个身份认证服务组件,它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限,并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请…

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「内网穿透」

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

智安网络|发现未知风险,探索渗透测试的奥秘与技巧

在当今信息时代,网络安全已成为组织和个人面临的重大挑战。为了保护网络系统的安全,渗透测试成为一种重要的手段。 一、渗透测试的基本原理 渗透测试是通过模拟黑客攻击的方式,对目标系统进行安全评估。其基本原理是模拟真实攻击者的思维和行…

特征变换1

编译工具:PyCharm 有些编译工具不用写print可以直接将数据打印出来,pycharm需要写print才会打印出来。 概念 1.特征类型 特征的类型:“离散型”和“连续型” 机器学习算法对特征的类型是有要求的,不是任意类型的特征都可以随意…

数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)

目录 一.顺序表的概念 二.顺序表的实现 新增元素 默认尾部新增 指定位置添加元素 查找元素 查找是否存在 查找元素对应的位置 查找指定位置对应的元素 删除元素 获取顺序表长度 清空顺序表 一.顺序表的概念 在线性数据结构中,我们一般分为俩类&#xf…

【电源专题】DC/DC电源FB分压电阻设计注意事项

在DC/DC电源中我们不可避免的会遇到FB分压电阻的取值,PCB设计等问题。如下所示随意打开一份同步降压稳压器规格书TPS56320X,规格书中的简化电路原理图就已经存在VFB管脚上的两个分压电阻。 很多工程师朋友们会误认为分压电阻只是简单的将输出电压缩小到参考电压,通过此电压来…

网狐类源码游戏配置数据库数据(一键配置网狐数据库)

网狐类源码游戏配置数据库数据(一键配置网狐数据库) 一般拿到网狐的源码或组件,需要先附加或配置数据库,以下为全部需要更改数据的地方,这里以荣耀系列版本数据库为例: 1. 数据库设置 [RYPlatformDB].…

文档理解的新时代:LayOutLM模型的全方位解读

一、引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显。特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战。文档不仅包含文本信息,还包括布局、图…

STM32CubeIDE(CUBE-MX)----快速移植FreeRTOS实战

文章目录 前言一、Freertos可视化配置二、生成代码三、实验现象总结 前言 FreeRTOS(Real-Time Operating System)是一个开源的实时操作系统内核,专注于嵌入式系统。它提供了一套用于管理任务、调度器、内存管理等的实时操作系统功能&#xf…

OSG编程指南<十七>:OSG光照与材质

1、OSG光照 OSG 全面支持 OpenGL 的光照特性,包括材质属性(material property)、光照属性(light property)和光照模型(lighting model)。与 OpenGL 相似,OSG 中的光源也是不可见的&a…