python+selenium运行时,提示元素不可见
python+selenium运行多次新增项目脚本(出错的元素通过by_id的方式定位),当第三次新增时报Message: element not visible的错误,加入等待时间,等页面加载完成,仍旧报相同的错误,错误如下图:
分析原因:前两次新增都是成功的,说明定位元素的代码没有问题; 加入等待时间还是报错,排除了页面没有加载完成的原因
打开开发者模式(F12),在控制台用id进行定位,发现出现了两个元素:
其中索引为1的元素是正常的,鼠标放到上面,浏览器也可识别出来,但索引为0的元素有后缀.form-control,鼠标放到上面浏览器也不能识别,具体怎么出来的这个元素,目前还不太清楚需要进一步探究。
进一步试验发现第二次新增时,通过id进行定位发现该元素就出现了两次。也就是说通过id定位出两个相同元素,但是脚本中对元素的操作是单元素操作,所以程序无法识别出元素,就报上述错误。
解决方法:
方法一:
先定位出元素列表,判断元素的大小,更改索引值
def choose_account_type(self):
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchant_v2_config_ini.get_ini_value \
("add_merchant_v2.ini", "bank_accounts", "current_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
if len(el_account_type_current_account_list) > 1:
n = 1
else:
n = 0
self.driver.click1(el_account_type_current_account_list[n])
else:
css_account_type_current_account = self.add_merchant_v2_config_ini.get_ini_value \
("add_merchant_v2.ini", "bank_accounts", "saving_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
if len(el_account_type_current_account_list) > 1:
n = 1
else:
n = 0
self.driver.click1(el_account_type_current_account_list[n])
方法二:
在函数中增加一个参数,当n超过1时,先定位出一组元组,然后再对其中的元素进行操作。代码如下:
def choose_account_type(self, n=0):
if n < 1:
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"current_account")
self.driver.click(css_account_type_current_account)
else:
css_account_type_saving_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"saving_account")
self.driver.click(css_account_type_saving_account)
else:
time.sleep(0.5)
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"current_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
self.driver.click1(el_account_type_current_account_list[1])
else:
css_account_type_saving_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"saving_account")
el_account_type_saving_account_list = self.driver.getElenments(css_account_type_saving_account)
self.driver.click1(el_account_type_saving_account_list[1])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)