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();
我正在尝试查找并单击“确定”按钮。
但是 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();