[Web自动化] Selenium元素定位

8.3 Selenium元素定位

在Selenium中,元素定位是自动化测试或爬虫过程中的一项基本且关键的任务。你需要找到并操作页面上的元素,比如输入框、按钮、链接等。Selenium提供了多种元素定位方法,每种方法都有其适用场景和优缺点。

8.3.1 基本元素定位方法

定位单个元素定位一组元素
find_element_by_id(“ID值”)ID唯一,所以不能定位多个
find_element_by_name(“name值”)find_elements_by_name(“name值”)
find_element_by_xpath(“xpath值”)find_elements_by_xpath(“xpath值”)
find_element_by_css_selector(“css路径”)find_elements_by_css_selector(“css路径”)
find_element_by_class_name(“Class值”)find_elements_by_class_name(“Class值”)
find_element_by_link_text(“链接的全部内容”)find_elements_by_link_text(“链接的全部内容”)
find_element_by_partial_link_text(“链接的部分内容”)find_elements_by_partial_link_text(“链接的部分内容”)
find_element_by_tag_name(“标签名称”)find_elements_by_tag_name(“标签名称”)
  1. 通过ID定位
    使用元素的ID属性进行定位是最直接且高效的方法,因为ID在HTML文档中应该是唯一的。
element=driver.find_element_by_id("element_id")

注意:从Selenium 4开始,推荐使用find_element方法结合By类来定位元素,例如:

fromselenium.webdriver.common.byimportBy element=driver.find_element(By.ID,"element_id")
  1. 通过Name定位
    如果元素的name属性是唯一的,你也可以通过name来定位元素。
element=driver.find_element_by_name("element_name")element=driver.find_element(By.NAME,"element_name")
  1. 通过XPath定位
    XPath是一种在XML文档中查找信息的语言,也可以用于HTML。XPath定位非常灵活,但可能相对复杂且性能较低。
element=driver.find_element_by_xpath("//tagname[@attribute='value']")element=driver.find_element(By.XPATH,"//tagname[@attribute='value']")
  1. 通过CSS Selector定位
    CSS选择器是另一种强大的定位方法,它利用CSS的语法来定位元素。CSS选择器通常比XPath更简洁、更易于阅读。
element=driver.find_element_by_css_selector("tagname[attribute='value']")element=driver.find_element(By.CSS_SELECTOR,"tagname[attribute='value']")
  1. 通过Link Text定位
    如果你需要定位一个链接,并且知道链接的完整文本,可以使用这种方法。
element=driver.find_element_by_link_text("完整链接文本")element=driver.find_element(By.LINK_TEXT,"完整链接文本")
  1. 通过Partial Link Text定位
    如果你只知道链接文本的一部分,可以使用Partial Link Text进行定位。
element=driver.find_element_by_partial_link_text("部分链接文本")element=driver.find_element(By.PARTIAL_LINK_TEXT,"部分链接文本")
  1. 通过Class Name定位
    通过元素的class值进行定位。
element=driver.find_element_by_class_name("class值")element=driver.find_element(By.CLASS,"class值")
  1. 通过Tag定位
    通过元素的标签名定位。
element=driver.find_element_by_tag_name("标签名")element=driver.find_element(By.TAG_NAME,"标签名")

8.3.2 优先级和选择策略

在选择元素定位方法时,应考虑其优先级和选择策略:
一般来说,ID和Name定位方法因为简单且高效,应优先考虑。
如果ID和Name不可用或不够唯一,可以考虑使用XPath或CSS Selector。
XPath虽然灵活,但可能因其复杂性而导致性能问题,因此如果可能的话,尽量使用CSS Selector。
优先顺序:ID、Name > CSS Selector > Xpath
实际使用:CSS Selector > Xpath > ID、Name

8.3.3 高级定位技巧

  1. 使用逻辑运算符组合定位条件
    Selenium本身不直接支持在单个定位器中使用逻辑运算符(如AND、OR)。但是,你可以通过编写更复杂的XPath或CSS Selector表达式来模拟这种效果。例如,你可以使用XPath的|(OR)运算符来组合多个条件。
  2. 定位动态元素和隐藏元素
    动态元素和隐藏元素是自动化测试中常见的挑战。
    对于动态元素,你可能需要使用显式等待来确保元素在尝试与之交互之前是可用的。
    对于隐藏元素,如果它们是通过CSS样式(如display: none)隐藏的,则可能无法直接与之交互。在这种情况下,你可能需要找到一种方法来使元素可见(例如,通过JavaScript更改其样式),或者重新考虑你的测试策略,以避免与这些元素直接交互。

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

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

相关文章

自动驾驶测试事故:模拟与现实的系统性鸿沟及测试范式革新

一、导言:血淋淋的警示碑 2025年特斯拉Model S在暴雨中误识别白色货柜车为天空导致的致命撞击,2026年Waymo车辆在旧金山浓雾中无视临时施工路标的集体违规——这些事故揭开了自动驾驶行业最严峻的挑战:测试环境与真实世界的认知断层。作为软…

飞函会议:企业私有化视频会议系统,保障数据安全

企业私有化视频会议系统选型指南:从技术架构到落地实践 前言 随着《数据安全法》和《个人信息保护法》的实施,越来越多的企业开始关注视频会议数据的存储和传输安全问题。本文将从技术角度分析私有化视频会议系统的核心架构,并探讨企业在选型…

【课程设计/毕业设计】基于大数据的月季电商销售预测分析系统基于Python的淘宝月季销售预测数据可视化系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

langGraph从入门到精通(七)——基于 LangGraph 的结构化数据AI 代理自动入库实战

基于 LangGraph 的结构化数据AI 代理自动入库实战 1 导语 在企业级 AI 应用中,仅能“聊天”的 Agent 远远不够,如何将对话中的关键信息自动识别并精准持久化到业务数据库,是实现业务闭环的关键。本文将带你通过一个亲测有效的实战案例&#x…

AI性能测试工具的认知盲区与误判机制解析

一、症结案例:典型误判场景还原 graph LR A[AI报告“系统吞吐量达标”] --> B[线上爆发数据库死锁] C[工具显示响应时间正常] --> D[用户投诉支付卡顿] E[压力测试通过] --> F[秒杀场景库存超卖] 某金融系统使用AI测试工具执行万级并发测试,工…

使用C#代码从工作簿中删除工作表

精简 Excel 工作簿、删除多余或不再使用的工作表,是一种非常有效的整理方式。通过移除无关内容,可以减少冗余信息,使文件结构更加清晰,只保留最有价值的数据。删除不必要的工作表不仅有助于释放存储空间,还能让工作簿的…

esp32,使用esp-idf链接mqtt服务器,消息接收

本次连接使用的是mqtt的官方公共服务器,前提是要先链接wifi注意:1.mqtt服务器发给esp32的消息,中间没有/0,使用“%s”这种格式打印的数据会自动往后打印,直到遇见/0,解决方法是ESP_LOGI(TAG_MQTT,"topic->%.*s",mqtt…

‌古文明密码测试:用AI破译玛雅历法的漏洞‌

当测试思维遇见千年碑文 在帕伦克遗址斑驳的石碑前,AI算法正在执行一场跨越两千年的特殊测试任务。玛雅历法系统作为人类最早的复杂时间计算体系之一,其长计历(Long Count)模块曾因2012末日预言引发全球误读。本文将以软件测试工…

从理论到代码:Agentic AI实时响应优化的提示工程实现与调试技巧

Agentic AI实时响应优化:提示工程从理论到代码的实战指南 引言:为什么你的Agent响应总是“慢半拍”? 你有没有遇到过这样的场景: 用Agent做客服,用户问“我的订单什么时候到”,Agent磨磨蹭蹭10秒才回复&…

腾讯云的IP是原生IP吗?

腾讯云的公网IP(普通公网IP、EIP)均为运营商原生路由IP,具备真实路由属性,归属地清晰,可被正常路由与解析 。内网IP为私有网段(如10.0.0.0/8等),不属于原生公网IP范畴 。以下是核心要…

DeploySharp 全面支持 YOLO26 系列,助力开发者快速部署落地应用

DeploySharp是一个专为C#开发者设计的跨平台模型部署框架,全面支持YOLOv26系列模型,包括目标检测、实例分割、姿态估计和旋转框检测。该框架提供多引擎支持(OpenVINO/ONNX Runtime/TensorRT)、两种图像处理库选择(Im…

设备维修班的惊喜发现,CAXA三维球比扳手还好用

我们维修班日常工作中最盼望的,就是设备图纸能够清晰易懂,这样才能快速准确地判断故障、开展维修工作。以前使用二维图纸时,经常会因为视角限制看走眼,导致拆装过程中多拧坏好几个螺栓,不仅增加了维修成本,…

02.01.05.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 areaDetector的aravis安装配置)

本页目录 1、下载安装2、配置3、测试 基础知识:02.01.04.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 areaDetector安装配置) 下载安装 yum install -y ninja-build meson glib2-devel gtk-doc libxml2-devel gtk3-devel gstreamer1 …

CAXA用一年省下六万外包费

我们是一家只有三个人的小作坊,平时主要承接一些小型设计项目。接大单时最发愁的就是设计能力不足,以前没有合适的软件支持,复杂的设计项目只能外包出去,不仅成本高,而且沟通起来很麻烦,还难以保证最终效果…

工程机械制造国产 CAD技工经验数字化传承应用

作为一名拥有二十年经验的工程机械老技工,带徒弟一直是我工作的重要部分。我最怕的就是徒弟们看不懂二维图纸上的复杂结构,很多时候,图纸上的一条线条、一个标注,背后都蕴含着多年的实践经验,但徒弟们缺乏实际操作经验…

02.01.04.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 areaDetector安装配置)

本页目录 1、下载安装2、配置3、测试基础知识是:02.01.01.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 EPICS安装配置) 下载安装 注意:synApps需要下载安装到epics-base的目录下 cd /usr/local/software/epics-base wget https…

CAXA让大三学生爱上机械设计

谁懂啊!大三刚接触机械设计那会儿,看着一堆专业软件头都大了,生怕学不会拖后腿。实验室老师说的没错,软件门槛高真的会劝退新人。还好我们实验室配了CAXA CAD,双模式直接救大命!它的创新模式太友好了&#…

禅道8.2.1升级到12.5.3,浏览器提示“重定向次数过多”

从禅道8.2.1 Windows一键安装版升级,计划升级到12.5.3,一开始下载的是12.5.3一键安装版。解压后,把旧版的zentao数据库导出成.sql文件然后通过mysql命令行工具导入到了新版,启动后浏览器一直提示“重定向次数过多”。以为是版本跨…

高通CEO安蒙播客访谈:移动DNA也能做好数据中心

作者:周雅 2026年1月12日,HUMAIN出品的首档播客《End of Limits》第一期邀请到了一位特别嘉宾:高通公司总裁兼CEO安蒙(Cristiano Amon)。这场对话始于当下最炙手可热的AI,一路探向边缘计算、下一代设备革命…

部署qwen14B 实战

目录 启动脚本 #!/usr/bin/env bash set -eexport CUDA_VISIBLE_DEVICES=0python -m vllm.entrypoints.openai.api_server \--model /data/models/Qwen1.5-14B-Chat-AWQ \--quantization awq \--max-model-len 4096 \-…