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

Selenium之八大定位

八大定位

今天我们来学一学,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)
link_text

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

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

超链接文本的部分匹配

# 可以看到,跳转到了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_elementfind_elements
返回值类型返回单个 WebElement 对象返回 WebElement 对象的列表
未找到元素时行为抛出 NoSuchElementException 异常返回空列表 []
使用场景确定唯一存在的元素查找多个相同特征的元素
方法后缀单数形式 (element)复数形式 (elements)

何时使用哪种方法?

使用 find_element 当:

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

使用 find_elements 当:

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

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


http://www.kler.cn/a/612560.html

相关文章:

  • browser-use 库网页自动化截图
  • SRT协议
  • 【AI News | 20250323】每日AI进展
  • 为 AI 应用打造安全屏障:基于 Dify 的完整实践
  • 分布式锁,redisson,redis
  • 渗透测试过-关于学习Token、JWT、Cookie等验证授权方式的总结
  • 数据结构栈和队列
  • 前端面经分享(25/03/26)
  • ICRA-2025 | 从人类视角到机器人视角的具身导航!连续环境中基于地面视角的视觉语言导航
  • JAVA关键词
  • Python二分查找【清晰易懂】
  • Java全栈面试宝典:内存模型与Spring设计模式深度解析
  • !!!谷歌停止开源安卓
  • 统计连续子数组的个数【哈希表+前缀和】【模板题】
  • MFC添加免费版大漠3.1233
  • selenium实现自动登录项目(5)
  • UDP视频传输中的丢包和播放花屏处理方法
  • 分布式系统面试总结:3、分布式锁(和本地锁的区别、特点、常见实现方案)
  • MacOS 安装open webui
  • Pinecone数据库介绍、Milvus数据库介绍