Selenium 为 role='button' 的元素抛出 ElementNotInteractableException

Selenium throws ElementNotInteractableException for element with role='button'

我正在尝试查找并单击“确定”按钮。

但是 selenium 说按钮不可交互。我几乎尝试了所有方法 browser.FindElementByCssSelector("div[role='button'][data-id='EBS5u']").Click();

browser.FindElementByXPath("//*[@id=\"yDmH0d\"]/div[8]/div/div[2]/div[2]/div[3]/div[2]").Click();//xpath to this button

这两种方式都不行。有什么想法吗?

我不知道这在 C# 中是否有效,但是当我在 python 中使用 selenium 时遇到同样的错误时,这对我有帮助。

如果按钮不可交互,它可能会被屏幕上的另一个元素覆盖,即弹出一个 cookie。 如果您在页面加载之前尝试单击它,也可能会发生此错误。

要绕过弹出窗口,您可以使用“execute_script”函数,在 python

中看起来像这样
browser.execute_script("document.querySelector('ENTER CSS SELECTOR HERE').click()")

示例:

browser.execute_script("document.querySelector('#main > div > div.Root__top-container > div.Root__now-playing-bar > footer > div > div.mF7iSITxB6KQzvdXe4qJ > div > div.player-controls__buttons > div.player-controls__right > button.vwGw2RO2v__qDU_9c5PE').click()")

如果这不起作用,您可以让驱动程序等待并加载页面,直到元素正确加载。

browser.implicitly_wait(10)

这将使驱动程序等待直到准备就绪或在 10 秒后抛出错误。

div[role='button'][data-id='EBS5u'] CSS 选择器有 2 个按钮。
您需要使用唯一序列来定义它。
像这样的 XPath:

(//div[@role='button' and @data-id='EBS5u'])[last()]

所以你的命令可以是

browser.FindElementByXpath("(//div[@role='button' and @data-id='EBS5u'])[last()]").Click();