selenium定位:出现Message: element not interactable 元素不可交互的问题解决方案

元素不可交互原因有多种,不同的原因有不同的解决方案。

原因1:点击速度过快,页面没有加载出来就需要点击页面上的元素

设置等待时间即可。

import time
time.sleep(2)

 

原因2:需要定位的元素在页面中被隐藏了

比如:定位百度账号退出按钮,由于退出按钮被隐藏,只有当鼠标移动到用户账号时,才显示出退出按钮

 

 

 解决方法:添加鼠标悬浮定位功能

代码如下:

复制代码
# 鼠标悬停
def hover(self,by,value):
    element = self.findElement(by,value)
    ActionChains(self.driver).move_to_element(element).perform()

# 通过不同的方式查找界面元素
def findElement(self,by,value):
    if(by == "id"):
        element = self.driver.find_element_by_id(value)
        return element
    elif(by == "name"):
        element = self.driver.find_element_by_name(value)
        return element
    elif(by == "xpath"):
        element = self.driver.find_element_by_xpath(value)
        return element
    elif(by == "classname"):
        element = self.driver.find_element_by_class_name(value)
        return element
    elif(by == "css"):
        element = self.driver.find_element_by_css_selector(value)
        return element
    elif(by == "link_text"):
        element = self.driver.find_element_by_link_text(value)
        return element
    else:
        print("无对应方法,请检查")
        return None

 # 检查是否存在用户退出按钮,存在,登录成功,否则登录失败
self.driver.hover(by='xpath',value='//*[@id="s_username_top"]/span')
close = self.driver.findElement(by='xpath',value='//[@id="s_user_name_menu"]/div/a[4]')
print(close)
if close != None:
    self.assertEqual(1,1)
else:
    self.assertEqual(1,0)
    time.sleep(3)
复制代码

 

原因3:需要定位的元素的位置在变化

比如:某项目登录功能密码输入框的id、xpath在变

 

打开显示如下图

 

密码输入显示如下图

 

 代码首先先点击密码输入框,再执行输入操作

driver.find_element_by_id("cPwdMsg_0").click()
driver.find_element_by_id("passwd").send_keys("123456")

 

posted @   弦歌雅意  阅读(18076)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示