selenium之批量删除按钮操作

具体需求:
需要将某个列表项目中只保留一条数据,但是不确定有没有,所以需要先判断列表中有没有数据,
如果有数据查看是否大于1条,大于1条则删除到只有1条,只有一条则直接进行修改操作;
如果没有数据,则点击添加按钮,添加一条数据;

定位元素如下:

//[@id=“app”]/div[1]/div[2]/div/main/main/form/section[3]

//[@id=“app”]/div[1]/div[2]/div/main/main/form/section[3]/div[3]/div/div/div[1]/div[1]/div[5]/div[2]/table/tbody/tr[1]/td[8]/div/div/button[2]

[@id=“app”]/div[1]/div[2]/div/main/main/form/section[3]/div[3]/div/div/div[1]/div[1]/div[5]/div[2]/table/tbody/tr[2]/td[8]/div/div/button[2]

三个定位元素,第一个是section,后面两个是删除按钮,先统计删除按有几个,如果大于1个则删除所有且只保留第一个;如果只有一个按钮则不删除;使用selenium操作
以下是使用 Selenium 实现上述功能的 Python 代码示例:

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# 初始化 WebDriver(请根据你的实际情况选择浏览器驱动)
driver = webdriver.Chrome()# 访问目标页面
driver.get("你的目标页面URL")# 等待section元素加载
section_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, section_xpath)))# 获取所有删除按钮
delete_button_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]/div[3]/div/div/div[1]/div[1]/div[5]/div[2]/table/tbody/tr/td[8]/div/div/button[2]'
delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath)# 如果删除按钮数量大于1,删除所有且只保留第一个
if len(delete_buttons) > 1:for i in range(1, len(delete_buttons)):delete_buttons[i].click()
elif len(delete_buttons) == 1:print("只有一个删除按钮,不进行删除操作")

在这段代码中,我们首先初始化 WebDriver 并访问目标页面,然后等待包含删除按钮的 section 元素加载完毕。接着,我们通过 XPath 定位所有删除按钮并统计其数量。如果删除按钮数量大于 1,我们会删除所有按钮并保留第一个。如果只有一个删除按钮,我们则不进行任何删除操作。最后,关闭浏览器。
请确保你的 Selenium WebDriver 和浏览器驱动(如 ChromeDriver)已经正确安装,并替换代码中的 你的目标页面URL 为你实际的目标页面 URL。

实际代码运行后的报错:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: stale element not found in the current frame
遇到 StaleElementReferenceException 错误时,通常是因为页面的 DOM 发生了变化,导致之前找到的元素引用已经失效。可以通过重新查找元素来避免这个错误。以下是改进的代码示例:

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
from selenium.common.exceptions import StaleElementReferenceException# 初始化 WebDriver(请根据你的实际情况选择浏览器驱动)
driver = webdriver.Chrome()# 访问目标页面
driver.get("你的目标页面URL")# 等待section元素加载
section_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, section_xpath)))# 获取所有删除按钮的XPath
delete_button_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]/div[3]/div/div/div[1]/div[1]/div[5]/div[2]/table/tbody/tr/td[8]/div/div/button[2]'try:while True:delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath)# 如果删除按钮数量大于1,删除所有且只保留第一个if len(delete_buttons) > 1:for i in range(1, len(delete_buttons)):try:delete_buttons[i].click()except StaleElementReferenceException:# 元素引用过时,重新查找元素并重试delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath)delete_buttons[i].click()elif len(delete_buttons) == 1:print("只有一个删除按钮,不进行删除操作")breakelse:# 没有找到任何删除按钮,跳出循环breakexcept StaleElementReferenceException as e:print(f"遇到错误:{e}")# 关闭浏览器
driver.quit()

在这个代码示例中,我们使用了一个 while 循环来处理删除按钮的点击操作。每次点击后会重新查找删除按钮,确保引用是最新的。如果遇到 StaleElementReferenceException,则重新查找元素并重试点击操作。这样可以有效避免元素引用过时的问题。

再次报错内容: except StaleElementReferenceException: # 元素引用过时,重新查找元素并重试 delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath) delete_buttons[i].click()报错:IndexError: list index out of rang

出现 IndexError: list index out of range 错误的原因是,在重新查找元素后,delete_buttons 的长度可能发生了变化,导致 i 超出列表的范围。要解决这个问题,可以在重新查找元素后,确保 i 仍然在新列表的范围内。以下是改进的代码:

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
from selenium.common.exceptions import StaleElementReferenceException
# 初始化 WebDriver(请根据你的实际情况选择浏览器驱动)
driver = webdriver.Chrome()# 访问目标页面
driver.get("你的目标页面URL")# 等待section元素加载
section_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, section_xpath)))# 获取所有删除按钮的XPath
delete_button_xpath = '//*[@id="app"]/div[1]/div[2]/div/main/main/form/section[3]/div[3]/div/div/div[1]/div[1]/div[5]/div[2]/table/tbody/tr/td[8]/div/div/button[2]'try:while True:delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath)# 如果删除按钮数量大于1,删除所有且只保留第一个if len(delete_buttons) > 1:for i in range(1, len(delete_buttons)):try:delete_buttons[i].click()except StaleElementReferenceException:# 元素引用过时,重新查找元素并确保索引有效delete_buttons = driver.find_elements(By.XPATH, delete_button_xpath)if i < len(delete_buttons):delete_buttons[i].click()else:# 如果重新查找后索引无效,跳出循环breakelif len(delete_buttons) == 1:print("只有一个删除按钮,不进行删除操作")breakelse:# 没有找到任何删除按钮,跳出循环breakexcept StaleElementReferenceException as e:print(f"遇到错误:{e}")# 关闭浏览器
driver.quit()

在这个改进版本中,如果捕获到 StaleElementReferenceException,会重新查找元素并检查 i 是否仍在新列表的范围内。如果 i 超出新列表的范围,则跳出循环,避免 IndexError。

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

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

相关文章

FTP 550 No such file or directory-

FTP is a simple method to upload files to the server. Although, it is rather easy to transfer files, FTP users often get stuck with errors. One such FTP error is “550 No such file or directory“. Broadly speaking, this error means that the file or folde…

2732. 找到矩阵中的好子集

题目 给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid。 从原矩阵中选出若干行构成一个行的非空子集&#xff0c;如果子集中任何一列的和至多为子集大小的一半&#xff0c;那么我们称这个子集是好子集。 更正式的&#xff0c;如果选出来的行子集大小&#xff08;即行的…

CNN-O-ELMNet: 优化的轻量化通用模型,用于肺部疾病分类和严重性评估| 文献速递-先进深度学习疾病诊断

Title 题目 CNN-O-ELMNet: Optimized Lightweight andGeneralized Model for Lung DiseaseClassification and Severity Assessment CNN-O-ELMNet: 优化的轻量化通用模型&#xff0c;用于肺部疾病分类和严重性评估 01 文献速递介绍 肺部疾病是全球主要的致残和死亡原因。根…

nextjs-创建layouts共用UI和独立pages页面

原文链接&#xff1a;https://nextjs.org/learn/dashboard-app/creating-layouts-and-pages 01-nextjs起步02-css样式03-处理字体和图片05-页面之间的导航跳转更多 到目前为止&#xff0c;您的应用程序只有一个主页。让我们学习如何使用布局和页面创建更多路由。 本章目标 …

【学习】科大睿智解读ITSS认证中咨询机构的作用

企业拥有ITSS认证这不仅将为企业开拓商机&#xff0c;提升竞争力&#xff0c;还能促使企业改进内部运维流程&#xff0c;提高服务质量&#xff0c;为客户提供更优质的IT运维支持。在ITSS认证中&#xff0c;咨询机构扮演着重要的角色&#xff0c;其主要作用包括以下几个方面&…

金融科技在智能投研领域的应用与前景

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;正逐步渗透到金融行业的各个细分领域&#xff0c;其中智能投研领域作为金融科技的重要应用之一&#xff0c;正展现出巨大的潜力和广阔的前景。智能投研利用大数据、人工智能&#xff08;AI&#xff09;等…

【C++】类和对象(五)隐式类型转换

文章目录 一、再谈构造函数构造函数体赋值初始化列表初始化列表的语法必须放在初始化列表的成员注意&#xff1a; explict关键字的使用单参数构造函数支持隐式类型的转换多参数构造函数支持隐式类型的转换缺省值 的 形式 总结一个题目 一、再谈构造函数 构造函数体赋值 在创建…

如何解决Java中的ClassCastException异常

如何解决Java中的ClassCastException异常&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java开发中&#xff0c;ClassCastException异常是一个常…

Java高级重点知识点-14-Set接口、HashSet底层原理讲解

文章目录 Set接口 (HashSet 、LinkedHashSet)HashSet底层原理(重点理解) Set接口 (HashSet 、LinkedHashSet) 无序不重复 HashSet集合 HashSet 是根据对象的哈希值来确定元素在集合中的存储位置&#xff0c;因此具有良好的存取和查找性能。 public class HashSetDemo {publ…

新型防勒索病毒方案分享无需依靠病毒库

MCK具备可信系统&#xff0c;数据库保护&#xff0c;场景白名单&#xff0c;文件保护四大功能。如何运用在防勒索病毒中 在防勒索病毒的问题上&#xff0c;MCK主机的加固功能显得尤为重要。MCK的四大功能——可信系统、数据库保护、场景白名单以及文件保护&#xff0c;为我们在…

Excel 快速查询工具 2023.7.1 更新

Excel 快速查询工具作者表示这个软件是因为有时候需要在 Excel 和网站之间进行切换非常的麻烦&#xff0c;这款软件可以以半透明的方框位于桌面上。 特点 软件窗口半透明并至于顶部&#xff0c;无需来回切换界面。 实时查询&#xff0c;不用点击查询或者按回车之类的&#x…

IDEA 学习之 启动“卡死”

目录 1. 断点问题2. IDEA 版本问题 1. 断点问题 部分断点涉及应用启动&#xff0c;会导致启动“卡死” 2. IDEA 版本问题 部分 IDEA 版本存在启动问题&#xff0c;本人之前遇到过&#xff08;别人启动三分钟&#xff0c;我启动半个小时&#xff09;。更换别的版本&#xff…

文本和二进制混合存储

要想让文本和二进制混合存储&#xff0c;有两套方案&#xff1a; ①以文本为主&#xff0c;插入二进制数据 ②以二进制为主&#xff0c;区分文本和二进制数据段 第一套方案的例子&#xff1a; 时间戳[....]&#xff0c;这是一段64位二进制数据。 在这句话中&#xff0c;以二进制…

k8s强制删除一个 Pod

在Kubernetes&#xff08;K8s&#xff09;中强制删除一个Pod&#xff0c;通常是因为Pod处于错误状态或无法正常终止。以下是强制删除Pod的步骤和相关信息&#xff1a; ### 步骤一&#xff1a;获取Pod的名称 首先&#xff0c;你需要知道要删除的Pod的名称。可以使用kubectl get …

AI绘画工具的计算资源需求:深度解析与优化策略

引言 随着人工智能技术的飞速发展&#xff0c;AI绘画工具已经成为艺术创作和设计领域的新宠。这些工具利用深度学习算法&#xff0c;尤其是生成对抗网络&#xff08;GANs&#xff09;和变分自编码器&#xff08;VAEs&#xff09;&#xff0c;能够根据用户的指令或草图生成逼真…

Scala语言基础及进阶

Scala语言基础及进阶 1. 简介 Scala 是一种多范式的编程语言&#xff0c;融合了面向对象编程和函数式编程的特性。它运行在 JVM 上&#xff0c;并且与 Java 互操作性良好。Scala 由 Martin Odersky 于 2003 年设计并实现&#xff0c;目的是解决 Java 语言的一些局限性&#x…

docker技术的说明

根据学习网站整理&#xff1a;Docker 10分钟快速入门_哔哩哔哩_bilibili 小白也能看懂的容器科普说明_哔哩哔哩_bilibili 1.虚拟机&#xff0c;需要模拟硬件系统、运行整个操作系统&#xff0c;但体积臃肿&#xff0c;内存占用较高&#xff0c;程序的性能也会受到影响。 2.…

ubuntu离线安装docker导入镜像

docker安装包 准备工作 1.准备一个docker.service文件 内容如下&#xff1a; [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target[Service] Typenoti…

2024年全国VUE考试中心大全!

大家好&#xff0c;华为HCIA、HCIP、HCIE的笔试部分&#xff0c;都需要在VUE考试中心进行预约。但是很多同学都不知道当地VUE考试中心在哪里&#xff01; 为了解决大家的问题&#xff0c;这边整理了全国各大城市的VUE考试中心名称和详细地址。需要的小伙伴们可以来看看&#x…

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir Cookie技术Cookie简单示意图Cookie常用方法Cookie创建Cookie读取JSESSIONID读取指定Cookie Cookie修改Cookie生命周期Cookie的有效路径Cookie作业布置Cookie注意事项Cookie中文乱码问题 Session技术Session原理示意图Session常用方法Session底层机制Session生命周期Sessi…