selenium元素定位

   当我们可以打开浏览器后我们如果想要进行web测试我们自然要对网页的一些功能进行单独拿出来进行测试,但是我们要怎么才能拿到我们想要的元素,并且对其进行操作呢。

    我们就以百度主页的输入框为例,如果我们想要王输入框中输入一些内容我们就需要通过html定位到输入框的位置。

    通常我们最常用也是最方便的一种方式就是通过id进行元素定位,下面我们来进行实现一些案例,假设我们想要输入“测试”,我们可以通过下述用例方式:

通过ID定位:

 

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By#打开浏览器
driver = webdriver.Chrome()
# driver.implicitly_wait(2)
#进入百度主页
driver.get("https://www.baidu.com")
#通过id定位输入框位置
element = driver.find_element(By.ID,'kw')
#输入元素
element.send_keys("测试")
#Exception managing chrome: error decoding response body
time.sleep(2)
#关闭浏览器
driver.close()

     这里我们通过driver.find_element()这个方法来通过By.ID通过id这个属性来确定html的位置,当然我们还有其他的方法确定html的位置,查找到html的位置后会返回一个对象WebElement我们通常命名为element是WebElement的实例,这个类是Selenium用来表示html的核心对象,通过这个对象我们可以对网页上的元素进行各类操作。

       由于我们已经通过ID查找到了html的具体位置,通过send_keys()将想要的内容传入输入框。当然我们再输入“测试”后单击进行搜索,我们仍然可以通过id定位按钮的html位置然后进行click()之后就和我们正常用的搜索相同了。 

  但是需要特别注意的是虽然一般情况下ID是唯一的但是也会出现“意外”,也会有些代码不遵守这种默认的规则,此时我们就需要利用其他的方式完成我们的目标。

通过By.NAME定位:

    在百度输入框中我们也可以看到name这个属性,我们也可以通过name完成上述操作,输入“测试”。

 


import timefrom selenium import webdriver
from selenium.webdriver.common.by import By#打开浏览器
driver = webdriver.Chrome()
# driver.implicitly_wait(2)
#进入百度主页
driver.get("https://www.baidu.com")
#通过id定位输入框位置
# element = driver.find_element(By.ID,'kw')
#输入元素
element = driver.find_element(By.NAME,'wd')element.send_keys("测试")
#Exception managing chrome: error decoding response body
time.sleep(2)
#关闭浏览器
driver.close()

 由此可见我们通过name属性仍然完成了上述操作。

通过TAG_NAME定位:

  这种定位方式是通过标签进行定位,我们可以通过这种定位获取到对应标签下的所有信息并且我们可以将这些信息进行打印,假如我们要获取到div标签下的所有信息,例如:

  

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from sqlalchemy.sql.base import elements#打开浏览器
driver = webdriver.Chrome()
#进入百度主页
driver.get("https://www.baidu.com")elements = driver.find_element(By.TAG_NAME,'div')
for element in elements:print(element)#关闭浏览器
driver.close()

  理论上来说。通过这种方式,我们可以获取到div标签上的所有信息,但是如果我们运行这段代码我们会发现不会输出任何内容,这是因为我们访问某个网页时,如果数据还未加载此时我们就使用TAG_NAME定位,由于此时还没有数据,因此返回值可能是none。但是这种解决的方式也非常简单,没时间加载数据那我们就给它时间,我们此处可以使用time.sleep()设置等待的时间,但是我们要注意的是多长时间才算长呢?如果时间过长会造成资源的浪费,时间太短数据加载不完全,因此Selenium给我们提供了一种方式(等待元素),让我们能解决这个问题,driver.implicitly_wait()方法,这种方式可以设置全局的隐式等待时间,当查找元素时,如果元素未被找到,会不断地在指定时间进行查找,直到超时或元素被找到。

  等待元素的使用也非常简单,只需要在进入页面后加入这个方法就行,如果熟练使用了之后我们每一次进行web测试都会默认添加implicitly_wait()方法。

  如果是正常运行的话通过这种方式获取的结果应为:

通过By.CLASS_NAME定位:

  在这里统统class_NAME进行定位置时我们需要特别注意,class_name属性进行定位适用于类名唯一的元素。使用方法同上述方法基本相同。

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from sqlalchemy.sql.base import elements#打开浏览器
driver = webdriver.Chrome()
#进入百度主页
driver.get("https://www.baidu.com")
driver.implicitly_wait(2)
element = driver.find_element(By.CLASS_NAME,'s_ipt')
element.send_keys("测试")
time.sleep(2)
#关闭浏览器
driver.close()

  我们也可以通过这种方式,进行输入框的输入。 

通过By.LINK_TEXT定位:

   这种定位仅支持<a>标签并且文本内容必须完全一致,包括大小写和空格,即使其他标签包含相同的文本,也不会进行匹配,例如:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time# 初始化浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)  # 设置隐式等待时间try:# 步骤 1: 打开百度首页driver.get("https://www.baidu.com")print("成功打开百度首页")# 步骤 2: 使用 By.LINK_TEXT 定位"新闻"链接news_link = driver.find_element(By.LINK_TEXT, "新闻")# 验证链接文本和 href 属性                                    用于获取html的属性值print(f"找到链接: 文本='{news_link.text}', href='{news_link.get_attribute('href')}'")# 步骤 3: 点击"新闻"链接news_link.click()print("点击'新闻'链接")# 步骤 4: 等待并验证页面标题WebDriverWait(driver, 10).until(EC.title_contains("百度新闻"))current_title = driver.title()print(f"当前页面标题: {current_title}")print("验证结果: 页面成功跳转到百度新闻")# 步骤 5: 截图保存(可选)driver.save_screenshot("baidu_news.png")print("截图已保存为: baidu_news.png")except Exception as e:print(f"测试失败: {e}")# 出错时截图driver.save_screenshot("error.png")
finally:# 等待 3 秒以便查看结果time.sleep(3)# 关闭浏览器driver.quit()print("测试完成,浏览器已关闭")

  通过这种方式我们就可以通过文本内容获取到<a>标签中的一些属性如超链接等。 

 

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

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

相关文章

2025第十五届上海生物发酵展:江苏健达干燥盛装赴会

2025 年 8 月 7 - 9 日&#xff0c;上海新国际博览中心将迎来一场生物发酵行业的盛会 —— 第 15 届上海国际生物发酵产品与技术装备展览会&#xff08;BIOCHINA 2025&#xff09;。作为国内干燥设备领域的领军企业&#xff0c;江苏健达干燥工程有限公司受邀盛装参展&#xff0…

【效率工具】单机游戏修改方案:轻量管理器+全能平台组合

大家好&#xff01;今天我要给大家介绍两款超级实用的软件&#xff0c;专门为喜欢玩单机游戏的小伙伴们准备。 一、风灵月影管理器 不想满网翻修改器&#xff1f;这个 27M 的小工具直接帮你一键搞定&#xff0c;这款软件是由B站UP鸦无量 开发。 收录上千款游戏补丁&#xff0c;…

七天学会SpringCloud分布式微服务——01——基础概念

重点是复习体系&#xff0c;从今天6.24开始&#xff0c;确保转化为自己的东西心平气和&#xff0c;脚踏实地学习的是尚硅谷微服务 1、从单体架构到集群架构再到分布式架构 单体架构 就是 所有的功能&#xff08;服务&#xff09;模块 都部署在同一台服务器&#xff08;一台服…

三分钟学会利用deepseek将复杂信息转换成可视化图表

数据可视化是传达复杂信息的重要手段。通过将数据转化为直观的图表、图形和交互式界面,我们可以更高效地理解信息、发现趋势并做出决策。对于普通人来说,要将数据可视化可谓千难万难。但在AI工具飞速发展的今天,这个过程将会变得非常简单。今天分享的内容就是如何使用生成式…

PDF处理控件Spire.PDF系列教程:Python中快速提取PDF文本、表格、图像及文档信息

在 Python 中读取 PDF 文档是实现文档自动化、内容分析和数据提取的基础操作之一。无论你处理的是合同、报告、发票&#xff0c;还是科研论文&#xff0c;能够通过代码访问 PDF 内容&#xff0c;不仅能节省时间&#xff0c;还能带来更高效的处理流程。 要在 Python 中准确提取…

微软人工智能证书AI-102 | 如何快速通过?

微软 AI-102 考试&#xff0c;全称 “Designing and Implementing a Microsoft Azure AI Solution”&#xff0c;是微软推出的用于验证考生在 Azure 平台上设计和实施 AI 解决方案核心能力的认证考试。以下是具体介绍&#xff1a; 考试描述&#xff1a; 考试主要衡量考生实施计…

github使用指南

1、生成SSH密钥对 ssh-keygen -t ed25519 -C "你的github邮箱"然后根据提示保存路径&#xff0c;设置密码 2、将公钥添加到github cat ~/.ssh/id_ed25519.pub复制输出内容。 在gihub中点击New SSH Key&#xff0c;添加密钥 3、配置git使用SSH地址 git remote se…

AD22以上的基础操作

1.检测创建的原理图器件库 2.原理图页加大 Size&#xff1a;常规和自定义 推荐可视化栅格100mil 快捷键VG 3.原理图器件器件号排序 自动排序&#xff1a;快捷键TAA 先解锁 4.BOM(Bill of Material)物料表导出 description描述&#xff1a;类似精度。 导出各种类型bom表 5…

FastAPI技术深度解析与实战指南

导读&#xff1a;在Python Web开发领域经历了Django和Flask多年统治后&#xff0c;FastAPI的崛起正在重新定义API开发的技术标准。这篇深度技术解析将为开发者揭示FastAPI如何通过独特的架构设计解决传统框架的核心痛点。 传统Python Web框架在面对高并发场景时暴露出明显的性能…

Python 可迭代的对象、迭代器 和生成器(何时使用生成器表达式)

何时使用生成器表达式 在示例 10-16 中&#xff0c;为了实现 Vector 类&#xff0c;我用了几个生成器表达 式&#xff0c;eq、hash、abs、angle、angles、format、add 和 __mul__ 方法中各有一个生成器表达式。在这些方法中使用列表推 导也行&#xff0c;不过立即返回的列表要…

复习和预习(C++)答案解析

填空题答案及解释 在 for 循环实现累加时&#xff0c;通常在循环上方初始化累加器变量&#xff0c;如 int m ______。 答案&#xff1a;0 解释&#xff1a;累加器需从 0 开始&#xff0c;才能正确累积后续值的总和。 switch 语句根据表达式的值与各个______后的常量表达式进行…

uniapp处理后端返回的html字符串

前言&#xff1a;采用v-html方法处理 1.处理前 <html><head><meta http‐equiv"Content‐Type" content"text/html; charsetUTF-8"></head><body><form ↵<input type"submit" value"立刻提交"…

如何在 Ubuntu 上通过终端或在 VirtualBox 中安装 GCC

无论你是正在编译 C 程序,还是在 Linux 上从源代码构建软件,GNU 编译器集合(GCC)都是每位 Linux 开发者需要的工具之一,因为它能够编译 C、C++,甚至 Fortran、Ada 等其他语言。但如果你想知道如何在 Ubuntu 上安装 GCC 并设置它来编译代码,别担心——你来对地方了。 本…

Mac python3.12 执行pip/pip3异常externally-managed-environment

环境&#xff1a;Mac、Python3.12.x版本&#xff08;3.12.5&#xff09; 问题&#xff1a;执行pip install xyz 后出现异常&#xff1a; error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide,…

最后的生还者2:重制版 免安 中文离线运行版+整合包

最后的生还者2&#xff1a;重制版 1.4.10515.0636 免安 中文离线运行版整合包 最低配置: 需要 64 位处理器和操作系统 操作系统: Windows 10/11 64-bit (version 1909 or higher) 处理器: Intel Core i3-8100, AMD Ryzen 3 1300X 内存: 16 GB RAM 显卡: NVIDIA GeForce GTX 16…

【Arm】DS如何应用脚本文件实现调试

1、 文档目标 在现代嵌入式开发中&#xff0c;调试工具的选择和使用对开发效率和产品质量有着至关重要的影响。Arm Development Studio&#xff08;简称ArmDS&#xff09;作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为基于ARM架构的处理器设计&…

如何通过ETL进行数据抽取工作

数据抽取作为数据集成过程中的核心环节&#xff0c;抽取速度直接决定了整个数据生命周期的质量与效率。在数字化转型加速的当下&#xff0c;企业需要从结构化数据库、非结构化文档、实时流数据、外部API接口等异构数据源中提取有价值的信息&#xff0c;这一过程要面临数据格式多…

随机存储器有哪些,只读存储器又有哪些

一、随机存储器&#xff08;RAM&#xff0c;易失性&#xff0c;断电数据丢失&#xff09; 1. 静态RAM&#xff08;SRAM&#xff09; 特点&#xff1a;用触发器存储数据&#xff0c;无需刷新&#xff0c;速度极快&#xff08;纳秒级&#xff09;&#xff0c;但容量小、成本高。…

PIC单片机MPLAB编译报错的一些问题及解决方法

PIC18单片机MPLAB编译出错的一些问题的解决方法 Couldnt locate build tool. Check tool locations. Unknowm processor&#xff1a;18FXXXXX’ Halting build on first failure as requested. Error [1027] unable to locate stddef.h Error - could not find file c018i.o. …

JavaSE基础复习

1.数据类型&#xff1a; 1&#xff09;整数类型&#xff1a;byte、short、int、long 2&#xff09;浮点型&#xff1a;double、float 3&#xff09;字符型&#xff1a;char 4&#xff09;布尔类型&#xff1a;Boolean 5&#xff09;引用数据类型&#xff1a;Date、Array、…