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

Selenium八大元素定位方式

文章目录

  • 1.前言
  • 2.根据id定位
  • 3.根据class_name定位
  • 4.根据tag_name定位
  • 5.根据name定位
  • 6.根据link_text定位
  • 7.根据partial_link_text定位
  • 8.根据css定位
  • 9.根据xpath定位

1.前言

在使用selenium实现自动化的时候,很长一部分时间都是在定位元素。因此定位元素位置在selenium中及其重要。本文主要讲解selenium的八大元素定位方式

2.根据id定位

在使用 Selenium 进行网页自动化测试时,根据元素的id属性进行定位是一种非常常见且高效的方式。
但不是所有的页面元素都有id属性,属于是可遇而不可求。接下来我们用id定位实现对百度一下里的输入框输入内容。
打开https://www.baidu.com/,然后按F12打开开发者模式。点击左上角的小箭头,然后点击想要定位元素的位置,会自动跳转到元素的源码部分。可以看到元素的一些属性。
在这里插入图片描述
百度的这个输入框就是有id属性的,因此我们可以使用id进行定位

一般来说前端元素的id是唯一的,所以使用id能够很好的对元素进行定位。以防万一,我们可以在console中使用document函数来查找一下 ,能看到结果就只有一个在这里插入图片描述

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 填写chromedriver的目录
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com/")

element = driver.find_element(By.ID,'kw')
element.send_keys('测试')
time.sleep(5)
driver.quit()

运行结果可以看到正确定位到了输入框并且输入了‘测试’
在这里插入图片描述

3.根据class_name定位

在 Selenium 中,根据元素的class_name(类名)进行定位也是常用的元素定位方式之一。
首先还是打开浏览器的开发者模式,查看要定位的元素有哪些属性
在这里插入图片描述
同样可以在浏览器的console中使用document判断通过这种方式查找元素是不是唯一的
在这里插入图片描述
可以看bilibili的输入框class_name是唯一的,我们就可以用class_name进行定位

也是成功定位到了bilibili的输入框
在这里插入图片描述
由于class这个属性是样式,所以可能页面中很多元素都使用了这个样式。因此使用class name查找元素的时候,可能会查找到多个元素。
例如:channel-link,这个class name能够定位到的元素就很多
在这里插入图片描述
那么我们如何获取呢,答案是使用driver.find_elements

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 填写chromedriver的目录
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.bilibili.com/")
elements  = driver.find_elements(By.CLASS_NAME,"channel-link")
time.sleep(5)
driver.quit()

通过调试我们可以看到结果有28条数据
在这里插入图片描述
对于driver.find_elements的结果,我们可以通过下标去取
下图所示:
在这里插入图片描述

当一个元素有多个类名时,类名之间用空格分隔,find_element或find_elements方法只能接收一个类名作为参数,不能直接使用包含多个类名的字符串进行定位。如果要根据多个类名定位元素,可以考虑使用 CSS 选择器或 XPath。

4.根据tag_name定位

在 Selenium 中,我们可以根据元素的标签名(tag_name)来定位网页元素。
还是以哔哩哔哩为例,可以看到input标签就只有一个,我们也可以用tag_name来定位到这个输入框
在这里插入图片描述

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.bilibili.com/")

driver.find_element(By.TAG_NAME,'input').send_keys('测试')
time.sleep(5)
driver.quit()

可以看到成功定位到了输入框并输入了‘测试’
在这里插入图片描述
使用标签名定位时,由于网页中相同标签名的元素可能有多个,所以 find_elements 方法返回的通常是一个元素列表。若要对特定元素进行操作,可能需要结合其他信息进一步筛选。

5.根据name定位

在 Selenium 里,依据元素的 name 属性来定位元素也是很常用的定位手段。
我们看到百度输入框的input标签中有name属性,那么我们就可以使用name进行定位。
在这里插入图片描述
代码示例:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com/")
driver.find_element(By.NAME,'wd').send_keys('测试')
time.sleep(5)
driver.quit()

可以看到也是成功定位到了
在这里插入图片描述

6.根据link_text定位

link_text定位是 Selenium 中专门用于定位超链接元素的方法,它通过超链接标签a里的完整可见文本内容来查找元素。
在百度页面,有一个新闻的a标签,且是唯一的,我们就可以用link_text来定位
在这里插入图片描述
示例:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com/")

driver.find_element(By.LINK_TEXT,'新闻').click()
time.sleep(5)
driver.quit()

可以看到定位到了新闻这个a标签,并进行了点击
在这里插入图片描述

7.根据partial_link_text定位

在 Selenium 中,partial_link_text定位方式用于根据超链接的部分文本内容来定位元素。当超链接的文本内容较长,或者你只知道其中一部分时,使用partial_link_text定位会非常方便,类似于模糊匹配。
示例:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com/")

driver.find_element(By.PARTIAL_LINK_TEXT,'新').click()
time.sleep(5)
driver.quit()

可以看到也能够成功定位到新闻并点击
在这里插入图片描述

8.根据css定位

在 Selenium 中,使用 CSS 选择器定位元素是一种强大且灵活的方式。CSS 选择器可以根据元素的标签名、类名、ID、属性等多种特征来定位元素。
对于网页上的元素,我们可以一键复制元素的css样式,我们可以进入浏览器的开发者模式,选择想要定位的元素的位置,右键选择copy点击copy selector

在这里插入图片描述

示例:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com/")

driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('测试')
time.sleep(5)
driver.quit()

可以看到成功定位到了元素
在这里插入图片描述

9.根据xpath定位

在 Selenium 中,XPath 是一种强大的元素定位方式,它可以通过元素的路径、属性、文本内容等多种条件来定位元素。
网页中的xpath也可以直接一键复制
在这里插入图片描述
示例:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get("https://www.bilibili.com")


driver.find_element(By.XPATH,'//*[@id="nav-searchform"]/div[1]/input').send_keys('xpath')
time.sleep(5)
driver.quit()

在这里插入图片描述


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

相关文章:

  • Docker 基本概念[SpringBoot之Docker实战系列] - 第536篇
  • 机试刷题_NC52 有效括号序列【python】
  • 基于 Python 的网络监控系统开发全解
  • 【我的 PWN 学习手札】IO_FILE 之 利用IO_validate_vtable劫持程序流
  • Linux(Centos 7.6)命令详解:uniq
  • 从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
  • 【QT】QLinearGradient 线性渐变类简单使用教程
  • 深入解析Java线程优先级的奥秘
  • 文件上传-Windows点号绕过
  • kafka-新增topic副本数
  • 【第八节】C++设计模式(结构型模式)-Decorator(装饰器)模式
  • 【Python爬虫(86)】元宇宙浪潮下,Python爬虫能否乘风破浪?
  • python单例模式魔法方法
  • 【Rust中级教程】2.10. API设计原则之受约束性(constrained) Pt.1:对类型进行修改、`#[non_exhaustive]`注解
  • DINOv2 + yolov8 + opencv 检测卡车的可拉拽雨覆是否完全覆盖
  • C++的多态
  • 【前端基础】Day 2 HTML
  • KIMI K1.5:大规模强化学习在大语言模型中的应用与工程实践
  • 子组件如何通过v-model实现数据的双向绑定
  • Holoens2开发报错记录02_通过主机获取彩色和深度数据流常见错误