Selenium实现元素定位

news/2024/9/21 16:34:00/文章来源:https://www.cnblogs.com/jongjongjong/p/18378799

Selenium提供了定位元素的方法find_element(),该方法被定义在WebDriver类中。


一、参数
1、两个参数,参数1根据不同定位方法确定,定位方法如下:

(1)通过id定位:使用参数By.ID定位元素的ID属性;
(2)通过元素名定位:使用参数By.NAME定位元素的NAME属性;
(3)通过标签名定位:使用参数BY.TAG_NAME定位元素的TAG_NAME属性;一般不使用该参数,使用该参数后方法会返回list,不能准确定位所找元素
(4)通过xpath定位:使用参数By.XPATH通过xpath表达式定位元素;
(5)通过css class定位:使用参数By.CLASS_NAME定位元素的class属性;
(6)通过css选择器定位:使用参数By.CSS_SELECTOR通过CSS选择器定位元素;
(7)通过链接文本定位:使用参数By.LINK_TEXT定位元素
(8)通过部分链接文本定位:使用参数By.PARTIAL_LINK_TEXT定位元素

2、参数2为上述对应属性的值

如何确定参数2:打开网页,选择任意元素,比如输入框,按钮,右键单击检查,就会有对应属性出现。以百度为例:


image


image


By.ID="kw"
By.NAME="wd"
By.TAG_NAME="input"
By.CLASS_NAME="s_ipt"
By.XPATH和By.CSS_SELECTOR可右键单击该元素,直接复制
By.LINK_TEXT和By.PARTIAL_LINK_TEXT为页面上任意链接文本,比如百度页面上的"新闻","首页"等,均可作为其值,两者区别在于,前者为链接的全部文本,后者为链接的部分文本


image


二、返回值

返回一个WebElement对象,这个对象代表页面上的一个元素


三、简单的代码示例

以下是一个简单的示例代码,展示如何使用find_element()方法通过各个属性定位元素

点击查看代码
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By#将各个元素定位方法封装成一个类
class TestCase:#初始化方法def __init__(self):#驱动程序打开浏览器self.driver=webdriver.Edge()#跳转对应网页self.driver.get("http://www.baidu.com")#网页最大化self.driver.maximize_window()#通过id定位元素def test_id(self):#网页中定位到输入框,输入关键词pythonself.driver.find_element(By.ID,"kw").send_keys("python")#定位到按钮并点击搜索self.driver.find_element(By.ID,"su").click()sleep(2)quit()#通过name定位元素def test_name(self):self.driver.find_element(By.NAME,"wd").send_keys("selenium")self.driver.find_element(By.ID,"su").click()sleep(2)quit()#通过xpath定位元素def test_xpath(self):self.driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("selenium")self.driver.find_element(By.XPATH,"//*[@id='su']").click()sleep(2)quit()#通过CSS_SELECTOR定位def test_css_selector(self):self.driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("selenium")self.driver.find_element(By.CSS_SELECTOR,"#su").click()sleep(2)quit()#通过CSS_NAME定位元素def test_class_name(self):self.driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium")self.driver.find_element(By.ID,"su").click()sleep(2)quit()#通过LINK_TEXT定位元素def test_link_text(self):#网页中找到"贴吧"文本的链接并点击self.driver.find_element(By.LINK_TEXT,"贴吧").click()sleep(2)quit()#通过PARTIAL_LINK_TEXT定位元素def test_partial_link_text(self):#网页中找到含有"AI"文本的链接并点击self.driver.find_element(By.PARTIAL_LINK_TEXT,"AI").click()sleep(2)quit()if __name__ == "__main__":testcase = TestCase()#testcase.test_id()#testcase.test_name()#testcase.test_xpath()#testcase.test_css_selector()#testcase.test_class_name()#testcase.test_link_text()testcase.test_partial_link_text()

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

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

相关文章

idea创建spring boot项目慢()

将server url改成https://start.aliyun.com 改了阿里镜像,后来看到说改这里也能块点 怎么说呢……快,又好像没快,如快() 就离谱

新质生产力六大核心细分赛道

新质生产力六大核心细分赛道

Graphics2D绘图方法总结

使用Java的Graphics2D类,绘制业务需要的图形模板,然后在具体流程中填充数据,并且将图形存储起来。一、简介 在开发中可能会遇到这样一类场景,业务复杂度不算太高,技术难度不算太深,但是做起来就很容易把人整破防,伤害很高侮辱性很强的:绘图。 绘图最怕有人挑刺:这里变…

【Linux】制作u盘启动盘

1、下载rufus工具 https://rufus.ie/zh/ 2、在设备中选中u盘和镜像3、点击开始4、等待制作完毕即可

用空间清理调理风水7放手8风水八卦9杂乱区域

7 放手 清理杂物的过程就是放手的过程。不仅仅是放下你的物品--那只是最终的结果。最重要的是学会放下恐惧,这种恐惧会让你在该把东西搬走的时候还久久拽着不放。 7.1 只是过客 生活是不断变化的。因此,当一件物品进入你的生活时,享受它,好好利用它,到了该放手的时候,就让…

聊一聊 C# 中让人惶恐的 Bitmap

一:背景 1. 讲故事 在.NET高级调试的旅程中,我常常会与 Bitmap 短兵相接,它最大的一个危害就是会让程序抛出匪夷所思的 OutOfMemoryException,也常常会让一些.NET开发者们陷入其中不能自拔,痛不欲生,基于此,这一篇我从dump分析的角度给大家深挖一下 Bitmap 背后的故事。…

计算机组成原理【3】:数据的表示和运算-下

概述浮点数的表示和运算浮点数的表示;IEEE 754标准;浮点数的加/减运算浮点数的表示与运算 浮点数的表示浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样在位数有限的情况下,既扩大了数的表示范围,又保持数的有效精度。 浮点数的表…

RabbitMQ 相关概念及简述

总结自:BV15k4y1k7EpRabbitMQ 是一款常用的消息队列(MQ)。 什么是消息队列 MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。 消息队列中间件是分布式系统中重要的组件,主要解决…

RabbitMQ 入门示例

参考:BV15k4y1k7EpRabbitMQ 相关概念及简述中简单介绍了 RabbitMQ 提供的 6 种工作模式。下面以简单模式为例,介绍 RabbitMQ 的使用。 新建工程 先新建 Maven 工程 RabbitMQ 作为父工程,在父工程下新建三个子模块:common:公共包 producer:生产者 consumer:消费者在三个模…

Kubernetes大规模集群

Kubernetes资源限制 Kubernetes 单个集群支持的最大节点数为 5,000。Kubernetes标准的配置:每个节点的 Pod 数量不超过 110 节点数不超过 5,000 Pod 总数不超过 150,000 容器总数不超过 300,000你可以通过添加或删除节点来扩展集群。集群扩缩的方式取决于集群的部署方式 以下集…