当前位置: 首页 > news >正文

10 分钟掌握 Selenium 8 大元素定位法:从踩坑到精通

“为什么我的脚本上午还能跑,下午就 NoSuchElement?”——90% 的问题,都出在定位方式选错或写错。本文用一套 Demo 页 + 8 段可复制的代码,带你一次把 Selenium 定位讲透。


目录

一、准备 30 秒:Demo 页面 & 环境

二、8 大定位方式全景图

三、代码实战:1 个页面 8 种写法

1. ID 定位——首选“身份证”

2. Name 定位——表单第二顺位

3. Class Name 定位——只能写一个完整 class

4. Tag Name 定位——唯一时才用

5 & 6. Link 系列——超链接专属

7. XPath 定位——万能

8. CSS Selector 定位——最简洁的链式写法

四、避坑锦囊(面试高频)

五、一页小抄(收藏图)

六、写在最后

一、准备 30 秒:Demo 页面 & 环境

pip install selenium==4.*
# ChromeDriver 须与浏览器大版本一致

二、8 大定位方式全景图

方式语法示例适用场景&坑
IDBy.ID, "userA"最快最稳,但动态 ID 泛滥时失效
NameBy.NAME, "passwordA"表单常用,可能同名
Class NameBy.CLASS_NAME, "telA"只能填一个完整 class
Tag NameBy.TAG_NAME, "input"页面唯一标签才安全
Link TextBy.LINK_TEXT, "百度"超链接全文本匹配
Partial Link TextBy.PARTIAL_LINK_TEXT, "网站"模糊匹配,注意重复
XPathBy.XPATH, "//input[@name='userA']"万能但冗长,优先相对路径
CSS SelectorBy.CSS_SELECTOR, "#userA"简洁、高速,支持层级

三、代码实战:1 个页面 8 种写法

1. ID 定位——首选“身份证”

driver.find_element(By.ID, "userA").send_keys("admin")

2. Name 定位——表单第二顺位

driver.find_element(By.NAME, "passwordA").send_keys("123456")

3. Class Name 定位——只能写一个完整 class

driver.find_element(By.CLASS_NAME, "telA").send_keys("18600000000")

多 class 场景(如 class="a b")请用 CSS。

4. Tag Name 定位——唯一时才用

driver.find_element(By.TAG_NAME, "input").send_keys("唯一 input 才安全")

5 & 6. Link 系列——超链接专属

driver.find_element(By.LINK_TEXT, "百度").click()
driver.find_element(By.PARTIAL_LINK_TEXT, "网站").click()

7. XPath 定位——万能

  • 属性定位

driver.find_element(By.XPATH, "//input[@name='userA']").send_keys("admin")
  • 层级 + 属性

driver.find_element(By.XPATH, "//p[@id='pa']/input").send_keys("123")
  • 文本定位

driver.find_element(By.XPATH, "//*[text()='百度']").click()
  • Contains 模糊

driver.find_element(By.XPATH, "//*[contains(@placeholder,'用户名')]").send_keys("admin")

8. CSS Selector 定位——最简洁的链式写法

  • ID / Class / 属性

driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("13800000000")
driver.find_element(By.CSS_SELECTOR, "[name='passwordA']").send_keys("123456")
  • 层级选择器

driver.find_element(By.CSS_SELECTOR, "form>input").send_keys("父子")
driver.find_element(By.CSS_SELECTOR, "form input").send_keys("子孙")

四、避坑锦囊(面试高频)

现场表现修复方案
动态 IDNoSuchElement改用 data-testid 或 CSS 稳态属性
多 class 用 CLASS_NAMEInvalidSelectorException改用 CSS_SELECTOR,空格用.连接
XPath 绝对路径页面一改就崩始终用相对路径 + 属性
忘记等待元素未加载加 WebDriverWait(driver, 10).until(EC.visibility_of_element_located(...))

五、一页小抄(收藏图)

ID  → By.ID
Name → By.NAME
Class → By.CLASS_NAME(单 class)
Link → By.LINK_TEXT / PARTIAL_LINK_TEXT
XPath → //标签[@属性='值']
CSS → #id .class [attr='value'] 父子>

六、写在最后

  • 优先顺序:ID > CSS > XPath > 其它

  • 一条元素定位语句不超过 80 字符,超过就换 CSS/XPath 策略

  • 把常用定位封装成 Page Object,拒绝“裸奔”脚本

http://www.dtcms.com/a/364350.html

相关文章:

  • Python分布式任务队列:万级节点集群的弹性调度实践
  • 深入剖析Spring Boot中Spring MVC的请求处理流程
  • 电脑接入企业中的网线,为啥网卡上面显示AD域名
  • 智能电视小米电视浏览器兼容性踩坑电视黑屏或者电视白屏,Vue项目从Axios到Fetch的避坑指南
  • 【Pytest】解决Pytest中Teardown钩子的TypeError:实例方法与类方法的调用差异
  • 腾讯Hunyuan-MT-7B翻译模型完全指南:2025年开源AI翻译的新标杆
  • 线性代数第一讲—向量组
  • 强化学习中的模仿学习是什么?
  • HR不会告诉你的秘密:学术简历中,这个内容会被秒标“高光“
  • 亚马逊云代理商:配置安全组规则步骤
  • 日志分析与安全数据上传脚本
  • 迅为RK3568开发板体验OpenHarmony—烧写镜像-安装驱动
  • 技术框架之脚手架实现
  • Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案
  • HTML `<datalist>`:原生下拉搜索框,无需 JS 也能实现联想功能
  • kvm 虚拟机如何安装 qemu-guest-agent
  • C++ 面试高频考点 力扣 162. 寻找峰值 二分查找 题解 每日一题
  • C# Activator.GetObject 原理与示例:理解.NET Remoting远程调用
  • 前端学习 10-2 :验证中的SV
  • 时序数据库选型指南:为何Apache IoTDB成为工业物联网首选
  • 东土智建 | 让塔吊更聪明的“四大绝技”工地安全效率双升级
  • 亚马逊流量突围:如何用智能化关键词运营找到更多高转化机会?
  • InnoDB存储引擎-事务
  • 企业网络安全建设三阶段实战指南
  • 海康摄像头开发---JSON数据与图片分离
  • VPS云服务器高可用架构部署方案-企业级实施指南
  • “互联网 +”时代商业生态变革:以开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序为例
  • 深度学习入门:从神经网络基础到 BP 算法全解析
  • 2004-2023年各省生活垃圾无害化处理率数据(无缺失)
  • (11)用于无GPS导航的制图师SLAM(二)