selenium之八大定位

news/2025/3/26 18:47:52/文章来源:https://www.cnblogs.com/maoning/p/18790502

八大定位

今天我们来学一学,selenium有名的八大定位方式;都有哪八个呢,下面我先列出来;之后再一个一个的实践

  • id,通过id定位元素
  • name,通过name定位
  • class_name,通过class类名定位
  • tag_name,通过标签名称
  • link_text,通过链接文本
  • partial_link_text,通过部分链接文本
  • xpath,通过xpth定位元素
  • css_selector,通过css选择器

以上就是著名的八大定位,下面就让我们一个一个的看,具体是怎么个一回事

ID

最快速、可靠的定位方式;当元素有唯一id时候

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By# broswer = webdriver.Chrome()
serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
# 访问网站
browser.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html')
# + id,通过id定位元素,可以看到是一个输入框 
element = browser.find_element(By.ID, 'lname')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input

name

element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input

class_name

适合通过class名定位,但是需要注意class不是唯一的,可能会有多个

# 先通过name定位输入框,输入东西后;点击百度首页按钮
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
element = browser.find_element(By.CLASS_NAME, 'toindex')
element.click()
time.sleep(5)

tag_name

通过HTML的标签名定位,一般需要结合其他条件

# 可以看到先通过定位左上角的id;后面再使用find_elements;找到a标签的列表集合
# 最后再循环遍历出来,每一个标签的href链接
# 注意:find_elements只有当找到的元素多个的时候,才可以使用;
# 可以直接后面加下标使用;前提是要知道所在位置
elements = browser.find_element(By.ID, 's-top-left').find_elements(By.TAG_NAME, 'a')
for element in elements:print(element.get_attribute('href'))
time.sleep(5)

用于定位超链接文本(完全匹配)

# 可以看到,点击了新闻的跳转
element = (browser.find_element(By.LINK_TEXT, '新闻').click())
time.sleep(5)

超链接文本的部分匹配

# 可以看到,跳转到了hao123页面
element = (browser.find_element(By.PARTIAL_LINK_TEXT, 'hao').click())
time.sleep(5)

xpath

最灵活的定位方式,适合复杂场景;xpath的内容,后面会单独讲一篇文章了;

element = browser.find_element(By.XPATH, '//*[@id="kw"]')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input

css_selector

通过css选择器来进行定位,常用的有以下几种

  • #kw;意思是使用了id选择器
  • .toindex;意思是class选择器
  • input[name="wd"];属性选择器;意思是选择name="wd"的input标签
# #kw;可以看到,也是定位到了输入框
# element = browser.find_element(By.CSS_SELECTOR, '#kw')
# element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')
# element = browser.find_element(By.CSS_SELECTOR, 'input[name="wd"]')element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input

好了,八大定位都实践完毕了;但是其中出现了一些新的知识点;比如xpath,它的内容都需要单独讲一下

还有下面这个有没有s的区别

find_element和find_elements的区别详解

在 Selenium 中,find_elementfind_elements 是两种主要的元素定位方法,它们有以下关键区别:

核心区别对比

特性 find_element find_elements
返回值类型 返回单个 WebElement 对象 返回 WebElement 对象的列表
未找到元素时行为 抛出 NoSuchElementException 异常 返回空列表 []
使用场景 确定唯一存在的元素 查找多个相同特征的元素
方法后缀 单数形式 (element) 复数形式 (elements)

何时使用哪种方法?

使用 find_element 当:

  • 你确定页面上只有一个匹配元素
  • 元素是唯一标识的(如通过ID)
  • 如果元素不存在应该立即报错

使用 find_elements 当:

  • 需要获取多个相似元素(如所有表格行、所有图片)
  • 需要检查元素是否存在而不引发异常
  • 处理动态内容时更安全

八大定位讲完了,下一篇就讲一下Element的常见属性和方法

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

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

相关文章

20244209韩仕炜《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名:韩仕炜 实验教师:王志强 学号:20244209 实验日期:2025年3月24日 必修/选修:专选课 1. 实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4.编写一…

E1. Canteen (Easy Version)E2 Canteen (Hard Version) 对于旋转操作的深入理解

E1. Canteen (Easy Version) 题解:二分查找 + 模拟 本文大量学习了jiangly的代码对其进行详细的解析并作图对其进行解释 题目链接 深入解析:前缀和最小值旋转的直观意义一、前缀和曲线的数学本质 我们定义前缀和数组为: pre[i+1] = pre[i] + a[i] - b[i]这一公式的物理意义是…

20244209 2024-2025-2 《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名:韩仕炜 实验教师:王志强 学号:20244209 实验日期:2025年3月24日 必修/选修:专选课 1. 实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4.编写一…

ASP.NET Core WebApi+React UI开发入门详解

在前段时间,有粉丝反馈能否写一篇基于ASP.NET Core Web Api+React UI进行Web开发的文章,经过查阅相关资料,发现Visual Studio 2022已经集成相关模板,可以在Visual Studio中直接创建项目项目,今天以一个小例子,简述ASP.NET Core Web Api+React UI开发系统的基本步骤,仅供…

一文速通Python并行计算:02 Python多线程编程-threading模块、线程的创建和查询与守护线程

本文介绍了Python threading模块的核心功能,包括线程创建与管理、线程状态监控以及守护线程的特殊应用,重点讲解了Thread类的实例化方法、获取当前线程信息、检测线程存活状态,以及如何实现后台线程。一文速通 Python 并行计算:02 Python 多线程编程-threading 模块、线程的…

编程神器Trae:当我用上后,才知道自己的创造力被低估了多少

"AI会让每个人都能成为工具创造者,打破你能力边界,有时候只需要一个想法。" AI粉嫩特攻队,2025年3月23日。 前几天参加了一场行业闭门研讨会,满满1个半小时的干货演讲让我收获颇丰。会后,我迫不及待地想将录音整理成文字,方便日后回顾。却被提示"文件过大…

20244212喻浩川《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名: 喻浩川 学号:20244212 实验教师:王志强 实验日期:2025年3月25日 必修/选修: 公选课 1.实验内容 (1)熟悉Python开发环境; (2)练习Python运行、调试技能; (3)编写程序,练习变量和类型、字符串、对象、缩进和注释等; (4)编写…

龙哥量化:deepseek写公式是需要思路的, 我整理的公式思路,请点赞收藏, 我持续更新ing

龙哥微信:Long622889代写技术指标_选股公式: 通达信,同花顺,东方财富,大智慧,文华,博易,飞狐代写量化策略: TB交易开拓者,文华8,金字塔AI写代码,很多朋友都试过了 deepseek,腾讯元宝,通义千问,豆包,chatgpt,通达信内嵌AI写公式,同花顺内嵌AI写公式,等等,写…

SciTech-EECS-Circuits-电路稳定性: 温度补偿 的几种方式对比: 响应时问、精度、动态范围、线性度、稳定度

电路稳定性: 温度稳定性 测试的几种方式:电吹风加热 冰箱(-5度) + 烤箱(50度/70度)改进 "文氏电桥振荡" 电路 的“热稳定性温度补偿” 网上找来找去,都是用FET(场效应管)做成"压控电阻"控制 "振荡器"的"增益",达到稳幅的目的。 但电…

SpringBoot3+Vue3实现查询功能

安装axios封装前后端对接数据工具npm i axios -S通过requst.js工具类发起请求import axios from "axios"; import {ElMessage} from "element-plus";const request = axios.create({baseURL:http://localhost:8080,//后端统一的请求地址timeout:30000 //后…

Apache Echarts 入门学习 -2025/3/24

介绍 一种数据可视化技术echats官方文档: https://echarts.apache.org/handbook/zh/get-started/ <!DOCTYPE html> <html> <head><meta charset="utf-8"><title>第一个 ECharts 实例</title><!-- 引入 echarts.js --><…

[数据资产/数据标准/行标] 电力数据交易分类分级管理规范(团体标准)

发布单位: 广东省网络空间安全协会附录A (资料性) 数据分类示例附录B (资料性) 数据分级示例附录C (规范性) 数据分级安全保护要求X 参考文献【团标】电力数据交易分类分级管理规范 - Weixin/数据工匠俱乐部本文作者:千千寰宇本文链接:https://www.cnblogs.com/johnnyzen关于…