selenium元素定位方法之xpath

什么是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%无套路免费领取】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Intellij IDEA 的安装和使用以及配置

IDE有很多种,常见的Eclipse、MyEclipse、Intellij IDEA、JBuilder、NetBeans等。但是这些IDE中目前比较火的是Intellij IDEA(以下简称IDEA),被众多Java程序员视为最好用的Java集成开发环境,今天的主题就是IDEA为开发工…

【Qt基础之QPalette实例电子时钟】

# 简介 借助`QLCDNumber`实现电子时钟,可以随意拖拽到桌面任意位置,鼠标右键进行关闭,用于实践`QPalette`类、`QTimer`的使用以及`mousePressEvent`\`mouseMoveEvent`\`mouseDoubleClickEvent`事件处理函数的使用。可在此基础上扩展其他应用,参看Qt帮助手册。 # QPalette …

homeassistant 随笔

1.使用mushroom-strategy自动生成ui,隐藏中文ares,名字为区域的拼音,例如显示厨房则真实名字为chu_fang 隐藏图片中的工作室 代码为:

ACM程序设计课内实验(2) 排序问题

基础知识‘ sort函数 C中的sort函数是库中的一个函数&#xff0c;用于对容器中的元素进行排序。它的原型如下&#xff1a; template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);参数…

代码随想录算法训练营第四十八天【动态规划part09】 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 当前房屋偷与不偷取决于前一个房屋是否被偷了 动规五部曲 确定dp数组及其下标含义&#xff1a;考虑下标i&#xff08;包括i&#xff09…

用户注册这样玩,保你平安

前言 基本上每个系统系统都包含用户注册、发送验证码等基本操作。在前些年&#xff0c;我还记得我在逛 csdn、贴吧、网易新闻等网站的时候是可以不登陆也能浏览完网页内容的&#xff0c;但是近几年这些网站已经改成了不登陆不让用&#xff0c;浏览网页时不时提醒你要进行登录&…

finebi 新手入门案例

finebi 新手入门案例 连锁超市销售数据分析 步骤&#xff1a; 准备公共数据新建分析主题处理数据在数据中分析在图形中分析数据大屏 准备公共数据 点击公共数据 点击新建文件夹 修改文件夹名称 上传数据 鼠标悬停在文件夹上&#xff0c;右侧出现 鼠标悬停在文件夹上&#x…

ESP32-Web-Server编程- 通过 Highcharts 创建图表(Chart)实时显示设备信息

ESP32-Web-Server编程- 通过 Highcharts 创建图表&#xff08;Chart&#xff09;实时显示设备信息 概述 上节讲述了通过 Server-Sent Events&#xff08;以下简称 SSE&#xff09; 实现在网页实时更新 ESP32 Web 服务器的传感器数据&#xff0c;并通过表格显示传感器的数据。…

Python中的Slice函数:灵活而强大的序列切片技术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python中的Slice函数是一种强大且灵活的序列切片技术&#xff0c;用于从字符串、列表、元组等序列类型中提取子集。本文将深入研究Slice函数的功能和用法&#xff0c;提供详细的示例代码和解释&#xff0c;帮助读…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube&#xff0c;是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 声明式配置语法&#xff1a; kubectl create/apply/delete -f xx…

酷狗音乐app 评论signature

文章目录 声明目标加密参数定位翻页逻辑代码实现 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请私信我立即删除&#xff01; 目标 复制curl转python # -*- c…

下载MySQL JDBC驱动的方法

说明 java代码通过JDBC访问MySQL数据库&#xff0c;需要MySQL JDBC驱动。 例如&#xff0c;下面这段代码&#xff0c;因为找不到JDBC驱动&#xff0c;所以执行会报异常&#xff1a; package com.thb;public class JDBCDemo {public static void main(String[] args) throws …

特征变换1

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

Mybatisplus同时向两张表里插入数据[事务的一致性]

一、需求&#xff1a;把靶器官的数据&#xff0c;单独拿出来作为一个从表&#xff0c;以List的方式接收这段数据&#xff1b; 此时分析&#xff0c;是需要有两个实体的&#xff0c;一个是主表的实体&#xff0c;一个是从表的实体&#xff0c;并在主表实体新增一个List 字段来接…

Vue - Vue配置proxy代理,开发、测试、生产环境

1、新建三个环境的配置文件 在src同级目录也就是根目录下新建文件&#xff1a;.env.development&#xff08;开发环境&#xff09;、.env.test&#xff08;测试环境&#xff09;、.env.production文件&#xff08;生产环境&#xff09; 2、三个环境的配置文件 开发环境 .env…

木鸟途家美团......订民宿选哪个?看完让你不纠结

近日&#xff0c;中国旅游研究院在报告中提到&#xff0c;截至2023年6月&#xff0c;我国在线旅行预订用户规模达4.54亿&#xff0c;占网民整体的42.1%。民宿预订平台作为重要的组成部分&#xff0c;正在被更多人了解使用。当前民宿行业第一梯队木鸟、途家、美团三家&#xff0…

3dsMax插件Datasmith Exporter安装使用方法

3dsMax插件Datasmith Exporter安装使用方法 某些文件格式无法用Datasmith直接导入虚幻引擎&#xff0c;这些数据必须先被转换为Datasmith能够识别的文件格式。Datasmith Exporter插件就可以帮助您的软件导出可以被Datasmith导入虚幻引擎的.udatasmith格式文件。 在开始使用虚幻…

windows远程桌面登录,提示:“出现身份验证错误,要求的函数不受支持”

问题&#xff1a; windows登录远程桌面&#xff0c;提示&#xff1a;“出现身份验证错误&#xff0c;要求的函数不受支持”&#xff0c;如下图&#xff1a; 问题原因&#xff1a; windows系统更新&#xff0c;微软系统补丁的更新将 CredSSP 身份验证协议的默认设置进行了调…

PS是什么?PS的在线使用教程

Photoshop简介 AdobePhotoshop&#xff0c;简称“PS“Photoshop主要处理由像素组成的数字图像。Photoshop拥有强大的图像处理工具和绘图工具&#xff0c;可以有效地编辑图片。在最新版本的Photoshop中&#xff0c;甚至可以完成3D和视频的后期工作。 Photoshop是目前最强大的图…

上海线下活动 | LLM 时代的 AI 编译器实践与创新

今年 3 月份&#xff0c; 2023 Meet TVM 系列首次线下活动从上海出发&#xff0c;跨越多个城市&#xff0c;致力于为各地关注 AI 编译器的工程师提供一个学习、交流的平台。 12 月 16 日 2023 Meet TVM 年终聚会将重返上海&#xff0c;这一次我们不仅邀请了 4 位资深的 AI 编…