Python 元素不可交互 编辑:

Python 元素不可交互 编辑:,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我解决这个问题的方法是通过xpath执行查找元素,然后对所有元素使用try,catch,直到没有错误和中断 任何读到这个问题的人。我尝试了这里的每一个解决方案,但都没有成功。解决方案是正确的,错误或问题是有多个元素使用相同的xpath。 通过选择第一个元素,我选择了一些不可交互的东西。 尝试单击或向输入元素发送密钥时出错 st = driver.find_element_by_xpath('//input[contains(@id, "st")]') # Element fo

我解决这个问题的方法是通过xpath执行
查找元素,然后对所有元素使用
try,catch
,直到没有错误和中断

任何读到这个问题的人。我尝试了这里的每一个解决方案,但都没有成功。解决方案是正确的,错误或问题是有多个元素使用相同的xpath。 通过选择第一个元素,我选择了一些不可交互的东西。 尝试
单击
输入
元素发送密钥时出错

st = driver.find_element_by_xpath('//input[contains(@id, "st")]')
# Element found
st.send_keys(str(amt))
# Error element not interactable
st.click()
# error element not interactable
要素:

<input id="st" type="text" value="" maxlength="7" tabindex="0">

我能够交互并将密钥发送到网页上与此相同行中的另一个元素

回溯:

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Volumes/coding/venv/lib/python3.8/site packages/selenium/webdriver/remote/webelement.py”,第80行,单击
self.\u执行(命令。单击\u元素)
文件“/Volumes/coding/venv/lib/python3.8/site packages/selenium/webdriver/remote/webelement.py”,第633行,在
返回self.\u parent.execute(命令,参数)
文件“/Volumes/coding/venv/lib/python3.8/site packages/selenium/webdriver/remote/webdriver.py”,执行中第321行
self.error\u handler.check\u响应(响应)
文件“/Volumes/coding/venv/lib/python3.8/site packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.ElementNotInteractiableException:消息:元素不可交互
(会话信息:chrome=90.0.4430.72)

你知道如何解决这个问题或者为什么我会遇到这个错误吗?

不知道元素没有交互的确切原因,但是你可以使用JavaScript向输入框添加文本。Selenium中有一个类,允许在浏览器中执行JavaScript代码。这样做:

script = "arguments[0].value="+str(amt)
driver.execute_script(script,st)
driver.execute_script("arguments[0].click()",st)
这将把输入框的值设置为给定的字符串

在C#中:


希望它能起作用。

你能尝试使用“id”与元素交互吗?@Buddybobii我现在尝试了,但得到了相同的错误。我们无法从这段代码中看出元素不能交互的原因。你能把HTML粘贴到你的网页上吗?你能把这段代码的全部内容都贴出来吗?有时,开发人员使用span之类的工具来限制输入区域,使整个输入变得不可理解。请提供整个部分,而不仅仅是线路。对于一个基本的更改,您可以尝试添加
time.sleep(5)
,以消除元素不能及时加载的可能性。谢谢。将html代码添加到您的问题中即使执行脚本也可能不总是有效。但在大多数情况下,如果Selenium未能做到这一点,它确实有效。我甚至用JavaScript点击了一个下拉选项链接,但没有点击下拉列表(在页面上查看下拉列表)。在90%的情况下,它可能会工作。这对我来说是可行的,但有时我不得不寻找其他的解决方法。那么你还可以使用其他的替代方法吗?@MuhammadSuleman谢谢,我还没能测试脚本。我会尽快更新。假设代码直接将属性
值设置为
amt
,是否正确?
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string script = "arguments[0].value="+amt.toString();
js.executeScript(script,st)
//to click
js.executScript("arguments[0].click()",st)