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

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.xdnf.cn/news/20050.html

相关文章:

  • 华勤内推码
  • Alpha World赞助Hello Blockchain Thailand,AWT成为全球共识焦点
  • 联想开天X7:携手海光,开启信创PC高性能新时代
  • dvs dvfs avs avfs 低功耗技术的区别
  • uni-app与Vue3,实现3D圆柱形旋转画廊效果
  • 零基础学C++,自定义数据类型
  • 【冷知识】【Xshell 8密码解密】2025年8月19日
  • MySQL中的聚合函数与分组查询
  • SpringAI Alibaba Graph 流式对话
  • Nginx简介
  • SPI通讯协议
  • LightDock:高效蛋白质-DNA对接框架
  • 从数据孤岛到智能中枢:RAG与智能体协同架构如何重塑企业知识库
  • 代码随想录算法训练营第一天 | (二分查找类型)704.二分查找 35.探索插入位置 34.在排序数组中查找元素的第一个和最后一个位置
  • 涨粉14万,100个Coze智能体工作流模版案例:3分钟生成韩非子权谋爆款视频
  • 【C++】在 Windows 系统调用第三方程序(创建进程)
  • 专项智能练习(Photoshop软件基础)
  • mysql高级进阶(存储过程)
  • H3C UIS Cell 3020 G3服务器更换raid卡安装ONEStor记录
  • windows系统服务器测试部署springboot+vue+mysql项目
  • 企业网络安全建设三阶段实战指南
  • 商家自动运营(四)足浴店管理—东方仙盟
  • 一文掌握Redisson分布式锁
  • 【Rhino】【Python】将开放曲面转换为边界线和填充
  • [特殊字符] DA1-13 复习学习笔记
  • 极空间打造 “超级中枢”,从书签笔记到聊天分享,一键全搞定!
  • 非力扣100原题
  • FTL文件格式的原理与应用(AI)
  • AI歌手功能终于上线!Suno AI 带你保存歌曲的灵魂
  • 【教程】2025 IDEA 快速创建springboot(maven)项目