selenium.common.exceptions.ElementNotInteractableException:消息:将文本发送到 contenteditable div 元素时元素不可交互
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable while sending text to contenteditable div element
我在使用 discord 上的 selenium 发送密钥时遇到问题。我正在尝试向用户发送消息。
我得到的错误是:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
HTML如下:
我正在尝试 send_keys
的由 xpath 突出显示的对象如下所示:
我的代码如下
inputMessage = wait.until(EC.visibility_of_element_located((By.XPATH,"//div[contains(text(),'Message @')]/..")))
#inputMessage = driver.find_element_by_xpath("//div[contains(text(),'Message @')]/..")
inputMessage.send_keys(msg,Keys.ENTER)
我尝试了多种方法来尝试解决该错误,但都没有成功。任何帮助,将不胜感激。谢谢你。
ElementNotInteractableException
错误告诉您不能在此 webElement 上使用 send_keys() 方法。考虑到考虑问题的信息不足,我真的不能告诉你什么是可行的,但这里有一些线索:
- 使用 ActionChains 尝试在字段中输入您想要的内容:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(self.driver)
actions.send_keys('your_data')
actions.perform()
- 在尝试发送密钥之前尝试
inputMessage.click()
否则,这也发生在我身上,问题是我试图将密钥发送到 div,而不是其中的元素。
希望对您有所帮助!
HTML contenteditable 属性
通过使用一些 JavaScript 事件处理程序,您只需在几乎所有 HTML 元素上设置 contenteditable
属性即可将您的网页转换为完整且快速的富文本编辑器它可编辑。例如,要创建一个 <div>
元素,用户可以编辑其内容:
<div contenteditable="true">
This text can be edited by the user.
</div>
当 HTML 元素将 contenteditable
设置为 true
时,document.execCommand()
method is made available. This lets you run commands 可操纵可编辑区域的内容。但是,contenteditable
在不同浏览器中的用法似乎有所不同。例如,当您按 Enter 或 Return 在可编辑元素内创建新的文本行时:
- Firefox 插入了
<br>
个元素
- IE/Opera 使用了
<p>
个元素
- Chrome/Safari 使用了
<div>
个元素
- Firefox 60 将单独的行包装在
<div>
个元素中,与 Chrome、现代 Opera、Edge 和 Safari 的行为相匹配。
这个用例
根据 HTML 似乎下一个 <div>
属性 aria-label="Message @Ticketing"
具有 属性 contenteditable="true"
.所以理想情况下,您应该能够在此元素上调用 send_keys()
。
解决方案
最后,要与您需要为 element_to_be_clickable()
引入 WebDriverWait 的元素进行交互,您可以使用以下任一方法 :
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='Message @Ticketing'][data-slate-editor='true'][role='textbox']"))).send_keys(msg)
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='Message @Ticketing' and @data-slate-editor='true'][@role='textbox']"))).send_keys(msg)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我在使用 discord 上的 selenium 发送密钥时遇到问题。我正在尝试向用户发送消息。
我得到的错误是:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
HTML如下:
我正在尝试 send_keys
的由 xpath 突出显示的对象如下所示:
我的代码如下
inputMessage = wait.until(EC.visibility_of_element_located((By.XPATH,"//div[contains(text(),'Message @')]/..")))
#inputMessage = driver.find_element_by_xpath("//div[contains(text(),'Message @')]/..")
inputMessage.send_keys(msg,Keys.ENTER)
我尝试了多种方法来尝试解决该错误,但都没有成功。任何帮助,将不胜感激。谢谢你。
ElementNotInteractableException
错误告诉您不能在此 webElement 上使用 send_keys() 方法。考虑到考虑问题的信息不足,我真的不能告诉你什么是可行的,但这里有一些线索:
- 使用 ActionChains 尝试在字段中输入您想要的内容:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(self.driver)
actions.send_keys('your_data')
actions.perform()
- 在尝试发送密钥之前尝试
inputMessage.click()
否则,这也发生在我身上,问题是我试图将密钥发送到 div,而不是其中的元素。
希望对您有所帮助!
HTML contenteditable 属性
通过使用一些 JavaScript 事件处理程序,您只需在几乎所有 HTML 元素上设置 contenteditable
属性即可将您的网页转换为完整且快速的富文本编辑器它可编辑。例如,要创建一个 <div>
元素,用户可以编辑其内容:
<div contenteditable="true">
This text can be edited by the user.
</div>
当 HTML 元素将 contenteditable
设置为 true
时,document.execCommand()
method is made available. This lets you run commands 可操纵可编辑区域的内容。但是,contenteditable
在不同浏览器中的用法似乎有所不同。例如,当您按 Enter 或 Return 在可编辑元素内创建新的文本行时:
- Firefox 插入了
<br>
个元素 - IE/Opera 使用了
<p>
个元素 - Chrome/Safari 使用了
<div>
个元素 - Firefox 60 将单独的行包装在
<div>
个元素中,与 Chrome、现代 Opera、Edge 和 Safari 的行为相匹配。
这个用例
根据 HTML 似乎下一个 <div>
属性 aria-label="Message @Ticketing"
具有 属性 contenteditable="true"
.所以理想情况下,您应该能够在此元素上调用 send_keys()
。
解决方案
最后,要与您需要为 element_to_be_clickable()
引入 WebDriverWait 的元素进行交互,您可以使用以下任一方法
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='Message @Ticketing'][data-slate-editor='true'][role='textbox']"))).send_keys(msg)
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='Message @Ticketing' and @data-slate-editor='true'][@role='textbox']"))).send_keys(msg)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC