Python自动化之selenium语句——元素点击、输入、清空和八大元素定位方法

article/2025/8/27 5:12:26

目录

一、元素定位配置

1.导包

2.查找元素

二、元素交互操作

1.点击

2.输入

3.清空

三、元素定位方法

1.ID

2.NAME

3.CLASS_NAME

4.TAG_NAME

7.CSS_SELECTOR

8.XPATH


本节讲解元素定位相关知识

一、元素定位配置

1.导包

2.查找元素

1)查找单个元素,并输出打印

2)查找多个元素,并输出打印

在实际场景中,这条语句可以用来检验使用的定位给方法找到的元素是否是唯一的

3)另一个方法是在浏览器控制台,输入如:document.getElementById('kw'),回车进行查找,即可看见返回数据是几个

如果复制后出现报错,类似于:Warning: Don’t paste code into the DevTools Console that you don’t understand or haven’t reviewed yourself. This could allow attackers to steal your identity or take control of your computer. Please type ‘allow pasting’ below and hit Enter to allow pasting.

直接在控制台输入allow pasting然后回车,就能复制过来了。

二、元素交互操作

1.点击

2.输入

整体代码:访问百度网址,输入框输入“测试”,点击【百度一下】

运行结果如下:

3.清空

添加两行代码,如下,清空输入框内容后,再写入新的内容"test"

为了清晰的查看变化效果,添加了等待2秒

运行结果如下

三、元素定位方法

下面将介绍八大元素定位方法。其中最常用的是xpath定位方法。

1.ID

第二章的元素交互中,使用的就是按照ID查找元素

如:a2 = a1.find_element(By.ID,'kw')

实现查找输入框,并输入查询内容语句:

特点:

高效、准确、简单,但需要注意的是,在实际应用中要确保 id 的唯一性,因为有的项目在实际的开发中id不是唯一的,或者id是动态生成的。而且有的元素,没有id这个属性值。如果页面结构复杂或存在动态内容,可以结合其他定位策略(如 class name、xpath 或 css selector)以提高定位的灵活性和可靠性。

2.NAME

通过name值来查找元素,语句如下:

a1.find_element(By.NAME,'wd')

先验证按照name值查找,匹配的有几个,下图显示1个,那么就可以通过name值进行元素定位

 实现查找输入框,并输入查询内容语句:

特点:

简便有效,尤其适用于表单元素的自动化测试。然而,由于 name 可能不是唯一的,所以在使用时需要注意以下两点:

  • 确保你的 name 属性值确实是唯一的,或者你明确知道你想操作的是第一个匹配的元素。
  • 在存在多个相同 name 的情况下,考虑结合其他定位策略(例如 xpath 或 css selector),以提高定位的准确性和灵活性。

3.CLASS_NAME

1)通过class_name值来查找元素,语句如下:

a1.find_element(By.CLASS_NAME,'s_ipt')

2)特点:

  • class_name值不能有空格,有空格时报错,定位不到元素,见下图

  • class_name值有重复时,需要做切片操作
  • class值有的网站是随机的,此时就不能用class_name进行定位

3)切片步骤

1)找到元素,并按照class_name查找,同名的有几个

控制台显示,同名的是两个(默认情况下,控制台限制直接复制代码,输入allow pasting回车即可更改)

2)编写代码如下,代表点击【热门】按钮

3)执行代码,查看,功能可正常实现

4)记录一条今天遇到的问题

昨天执行代码,都是能正常执行的,今天打开Pycharm后执行(代码,配置等等并没有更改),发现未执行,控制台都没有输出,操作了使缓存失效,弹窗页面直接点击【重启】,重启后可以了

4.TAG_NAME

查找的是<>标签开头的名字,如下图的input,标签名基本上都不是唯一的

语句

a1.find_elements(By.TAG_NAME,'input')[7]

执行结果成功

特点

  • 基本上都有重复名
  • 需要做切片处理,当重复名太多时,就不便用这个方法查找元素了

查找a标签的文本内容来定位

语句

a1.find_element(By.LINK_TEXT,'新闻')

执行结果,点击了【新闻】并打开新页面

特点:

  • 通过A标签的链接文本名查找
  • 有重复的文本名时,需要做切片处理

模糊文本定位

语句:

a1.find_element(By.PARTIAL_LINK_TEXT,'新')

运行结果,打开了新闻页

特点:

  • 其实就是LINK_TEXT的模糊搜索,存在多个时,做切片处理

7.CSS_SELECTOR

多功能定位(id、class、tag)

1)#id值      通过id进行定位

语句:

a1.find_element(By.CSS_SELECTOR,'#kw')

2).class    通过class定位

a1.find_element(By.CSS_SELECTOR,'.s_ipt')

运行结果

3)不加修饰符,通过标签头查找

a1.find_elements(By.CSS_SELECTOR,'input')[7]

4)通过任意类型定位     

a1.find_element(By.CSS_SELECTOR,"[autocomplete='off']")

支持的几种查找格式:

"[类型='精准值']"  ——>   a1.find_element(By.CSS_SELECTOR,"[autocomplete='off']")

"[类型*='模糊值']" ——> a1.find_element(By.CSS_SELECTOR,"[autocomplete*='of']")

"[类型^='开头值']" ——> a1.find_element(By.CSS_SELECTOR,"[autocomplete^='o']")

"[类型$='结尾值']" ——> a1.find_element(By.CSS_SELECTOR,"[autocomplete$='f']")

5)其他方式

选择需要定位的输入框,右键-复制-复制selector

这种方法简单易操作,但是个别元素定位值会比较长

然后CTRL+V,直接显示在value值内,默认粘贴的就是按照id进行定位的

8.XPATH

1)选择需要定位的输入框,右键-复制-复制xpath(属性+路径定位,属性如果是随机的,此种定位方式就定位不到了)

a1.find_element(By.XPATH,'//*[@id="s-top-left"]/a[1]')

2)选择需要定位的输入框,右键-复制-复制完整xpath(全路径定位,定位准确,但是有时定位值会比较长)

a1.find_element(By.XPATH,'/html/body/div[2]/div[1]/div[3]/a[1]')

3)手写xpath

前面是通过浏览器直接复制xpath路径,方法简单,但是会存在浏览器方式抓取不到元素的场景,元素属性动态变化,直接复制路径不稳定等问题,下面讲解手写xpath来进行元素定位的相关知识。

  • 基本语法
序号符号解释
1根节点
2//任意位置
3*任意元素
4@属性
5.当前节点
6..父级节点
7text文本值
8contains模糊查询
9starts-with匹配一个属性开始位置的关键字
举例

//*[@属性='属性值']

如://*[@class='mnav c-font-normal c-color-t']

//*[text()='文本值']

如://*[text()='新闻']

[contains(@属性/text(),值)]

如://*[contains(text(),'新闻')]表示任意位置任意元素,模糊查找文本值是'新闻'的元素

[starts-with(@属性/text(),值)]

如://*[starts-with(@id,success)]表示任意位置任意元素,查找id值以success开始的元素

//*[@type='password']/../../../div[2]表示任意位置任意元素查找type值是password的父级的父级的父级的下级div的第二个元素(适用于元素没有任何属性,不好直接定位,通过查找父级的方式来进行定位)
//*[@class='manv and @type='password'']表示同时使用多个条件查询
//*[name()='svg'] 对于svg属性的元素,无法通过xpath进行定位,所以要用此方式来查找定位
  • 浏览器中验证xpath

F12,Elenents页面输入CTRL+F,在最下方显示了xpath路径验证输入框,输入语句后回车,即可查看到同名路径的有几个

   svg元素的定位验证       

                         

                           

                           


http://www.hkcw.cn/article/qdDtTWMRlG.shtml

相关文章

C++并集查找

前言 C图论 C算法与数据结构 本博文代码打包下载 基本概念 并查集&#xff08;Union-Find&#xff09;是一种用于处理动态连通性&#xff08;直接或间接相连&#xff09;的数据结构&#xff0c;主要支持两种操作&#xff1a;union 和 find。通过这两个基本操作&#xff0c;可…

DeepSeek - 尝试一下GitHub Models中的DeepSeek

1.简单介绍 当前DeepSeek使用的人很多&#xff0c;各大AI平台中也快速引入了DeekSeek&#xff0c;比如Azure AI Foundary(以前名字是Azure AI Studio)中的Model Catalog, HuggingFace, GitHub Models等。同时也出现了一些支持DeepSeek的.NET类库。微软的Semantic Kernel也支持…

2025年人文发展与教育心理学国际会议(ICHDEP 2025)

2025年人文发展与教育心理学国际会议&#xff08;ICHDEP 2025&#xff09; 2025 International Conference on Humanistic Development and Educational Psychology 一、大会信息 会议简称&#xff1a;ICHDEP 2025 大会地点&#xff1a;中国广州 审稿通知&#xff1a;投稿后2…

实测,大模型谁更懂数据可视化?

大家好&#xff0c;我是 Ai 学习的老章 看论文时&#xff0c;经常看到漂亮的图表&#xff0c;很多不知道是用什么工具绘制的&#xff0c;或者很想复刻类似图表。 实测&#xff0c;大模型 LaTeX 公式识别&#xff0c;出乎预料 前文&#xff0c;我用 Kimi、Qwen-3-235B-A22B、…

MySQL高可用方案:Keepalived+双主库架构深度解析与实战指南

MySQL高可用方案:Keepalived+双主库架构深度解析与实战指南 一、方案概述 MySQL双主+Keepalived架构通过双节点互为主从模式结合VRRP协议,实现数据库服务的高可用与自动故障转移。该方案具备以下核心优势: 双活写入能力:两节点均可处理读写请求,通过双向复制保持数据强一…

【MySQL】联合查询(下)

目录 一. 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 二. 合并查询 union all union 三.插入查询结果 上期我们讲了内连接、外连接、自连接查询&#xff0c;今天我们继续讲其他联合查询&#xff0c;没看过的之前的可以先去看看上期博客&#xff1…

unity—特效闪光衣服的设置

模型设置两个材质球&#xff0c;一个基础色&#xff0c;一个闪光色 闪光层设置 基础色设置

lvs-keepalived高可用群集

目录 1.Keepalived 概述及安装 1.1 Keepalived 的热备方式 1.2 keepalived的安装与服务控制 &#xff08;1&#xff09;安装keep alived (2)控制 Keepalived 服务DNF 安装 keepalived 后,执行以下命令将keepalived 服务设置为开机启动。 2.使用 Keepalived 实现双机热备 …

多端 API 兼容性设计:如何统一 iOS / Android / Web 接口规范?

在移动互联网时代&#xff0c;一个后台服务往往需要同时支撑 iOS、Android 和 Web 三端业务。当某电商App在Android端出现支付接口返回结构不一致导致崩溃&#xff0c;而iOS端却正常运行时&#xff1b;当某个Web端新功能因接口版本问题延期上线时——多端API的兼容性问题已成为…

Linux的SHELL脚本中的常用命令

一、设置主机名称 1.文件的方式 注&#xff1a;修改完毕文件后在当前的shell中是不生效的&#xff0c;如果需要看到效果&#xff0c;关闭当前shell后重新开启新的shell 2.通过命令更改主机名 注&#xff1a;hostnamectl hostname后加上你要改的主机名&#xff0c;即改即生效&…

ultraiso制作U盘镜像 针对win2012及win2016等需要特殊处理

1.按照正常操作步骤制作U盘镜像 以管理员方式运行软碟通2.正常制作镜像 3.由于磁盘格式&#xff0c;大于4G的文件是写不进去的 手动拷贝资源文件&#xff0c;右键将镜像挂载到电脑上 4.转换U盘格式 convert H:/fs:NTFS 执行该命令 此次需要保证U盘不被占用 这个时候就能存储…

【AI News | 20250529】每日AI进展

AI Repos 1、WebAgent 阿里巴巴通义实验室近日发布了WebDancer&#xff0c;一款旨在实现自主信息搜索的原生智能体搜索推理模型。WebDancer采用ReAct框架&#xff0c;通过分阶段训练范式&#xff0c;包括浏览数据构建、轨迹采样、监督微调和强化学习&#xff0c;赋予智能体自主…

【Python】3.函数与列表

文章目录 一、函数1、函数是什么&#xff1f;2、语法格式3、函数参数4、函数返回值5、变量作用域6、函数执行过程7、链式调用8、嵌套调用9、函数递归10、参数默认值11、关键字参数小结 二、列表和元组1、列表是什么&#xff0c;元组是什么&#xff1f;2、创建列表3、访问下标4、…

Arduino LCD 1602液晶显示器2(I2C总线)

LCD 1602液晶显示器2&#xff08;I2C总线&#xff09; 上一小节中我们学习了LCD1602的标准连接&#xff0c;但因为线太多&#xff0c;在实际的工作中会占用太多的Arduino的针脚&#xff0c;所以不是很实用。为了解决这个问题&#xff0c;下面我们介绍一种总线控制IIC&#xff0…

⚽【足球数据全维度解析】从基础统计到高阶分析,数据如何重塑现代足球?

足球世界正在经历一场深刻的数据革命。本文将系统介绍足球数据统计的完整体系&#xff0c;并揭示数据如何改变这项运动的训练、比赛和决策方式。 &#x1f4ca; 一、核心数据统计维度 1. 比赛基础数据 射门数据&#xff1a;场均射门/射正&#xff08;哈兰德5.2次/场&#xff0…

【C++项目】:仿 muduo 库 One-Thread-One-Loop 式并发服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f525; 前言 一&#xff1a;&#x1f525; 项目储备知识 &#x1f98b; HTTP 服务器&#x1f98b; Reactor 模型&#x1f380; 单 Reactor 单线程&#xff1a;单I/O多路…

MaaS(模型即服务)是什么?

模型即服务&#xff08;Model as a Service&#xff0c;MaaS&#xff09;是近年来随着人工智能和云计算技术发展而兴起的一种服务模式。以下是对模型即服务的详细展开&#xff1a; 1.概念与定义 ​ ​模型即服务&#xff08;MaaS&#xff09;是一种将机器学习模型作为云服务…

AI编程报错 API流式传输失败解决方案

引言 如果大家在AI编程过程中遇到以下问题&#xff0c;可参考本文的解决方案。 大家好&#xff0c;我是逍遥小欢。昨天在我的老的win10电脑上&#xff0c;安装搭建AI编程vscode和roocode环境时&#xff0c;运行提示词遇到一个错误。 报错提示:API流式传输失败 Command failed…

龙虎榜——20250529

上证指数放量收阳线&#xff0c;个股涨多跌少&#xff0c;汽车主线方向凸显。 深证指数放量收阳线&#xff0c;可以围绕主线方向做。 2025年5月29日龙虎榜行业方向分析 1. 智能驾驶&#xff08;政策落地场景延伸&#xff09; 代表标的&#xff1a;云内动力、信邦智能。 …

R3GAN训练自己的数据集

简介 简介&#xff1a;这篇论文挑战了"GANs难以训练"的广泛观点&#xff0c;通过提出一个更稳定的损失函数和现代化的网络架构&#xff0c;构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计&#xff0c;GANs可以稳定训练并达到优异…