如何解决“元素不可交互”的异常?

Rol*_*one 4 python selenium webdriver python-3.x selenium-webdriver

我知道这已经被问过很多次了,但是如何解决“元素不可交互”的异常呢?

我是Selenium的新手,所以如果我做错了事,请原谅。

这是我的代码:

button = driver.find_element_by_class_name(u"infoDismiss")
type(button)
button.click()
driver.implicitly_wait(10)
Run Code Online (Sandbox Code Playgroud)

这是HTML:

<button class="dismiss infoDismiss">
    <string for="inplay_button_dismiss">Dismiss</string>
</button>
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

selenium.common.exceptions.ElementNotInteractableException: Message: 
Run Code Online (Sandbox Code Playgroud)

在说信息之后,实际上什么也没有。

我花了很多时间在网上搜索,没有找到任何能解决我问题的方法。我真的很感谢一个答案。

提前致谢。

编辑:更改为驱动程序的“ w”,以便于阅读

更新:我刚刚意识到我发现了错误按钮的HTML!实际的按钮HTML如下:

<button class="dismiss">
    <string for="exit">Dismiss</string>
</button>
Run Code Online (Sandbox Code Playgroud)

另外,我使用了答案和注释并编辑了代码,如下所示:

button = driver.find_element_by_css_selector("button.dismiss")
w.implicitly_wait(10)
ActionChains(w).move_to_element(button).click(button)
Run Code Online (Sandbox Code Playgroud)

现在我得到一个新的错误:

selenium.common.exceptions.WebDriverException: Message: Tried to run command without establishing a connection
Run Code Online (Sandbox Code Playgroud)

错误发生在第1行: button = driver.find_element_by_css_selector("button.dismiss")

注意:非常感谢您所提供的帮助,谢谢

Ada*_*lak 13

我刚刚遇到了类似的问题,并且能够通过等到按钮“可点击”来修复它。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome('./chromedriver', options=chrome_options)

browser.get(('YOURWEBSITEHERE.COM'))

button = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button.dismiss')))
button.click()
Run Code Online (Sandbox Code Playgroud)

  • @Douy789 我编辑了评论来回答你的问题 (2认同)
  • @zypro我不认为这是一个“解决方法”,这会等到按钮可交互(可点击),这是发布情况中的问题:) (2认同)

小智 10

错误“消息:元素不可交互”主要发生在您的元素不可点击或尚不可见时,您应该点击或选择它之前的另一个元素。然后您的元素将被显示,您可以修改它。

您可以通过调用这样的is_displayed()方法来检查您的元素是否可见:

print("Element is visible? " + str(element_name.is_displayed()))
Run Code Online (Sandbox Code Playgroud)


rob*_*rit 9

对于那些现在发现这一点并且上述答案不起作用的人来说,我遇到的问题是屏幕不够大。我在初始化 ChromeDriver 时添加了这个,它解决了这个问题:

options.add_argument("window-size=1200x600")
Run Code Online (Sandbox Code Playgroud)


小智 9

右键单击并复制完整的 xpath,如下例所示,它肯定会起作用

driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]").click()
Run Code Online (Sandbox Code Playgroud)


小智 8

老实说,我是通过从库导入它来做到的:

from selenium.webdriver.common.keys import Keys

search.send_keys(Keys.RETURN) 
Run Code Online (Sandbox Code Playgroud)

我花了很多时间在上面,最大化按钮,导入计时器“等待”,但不知怎的,除了这个之外没有任何效果

我仍然是一个业余爱好者,但我想在这里贡献我的解决方案:)


Eyu*_*lDK 5

可能是该元素当前不可点击,因为它不可见。造成这种情况的原因可能是另一个元素遮盖了它,或者它不在视线范围内,即它位于当前可查看区域之外。

尝试这个

from selenium.webdriver.common.action_chains import ActionChains

button = driver.find_element_by_class_name(u"infoDismiss")
driver.implicitly_wait(10)
ActionChains(driver).move_to_element(button).click(button).perform()
Run Code Online (Sandbox Code Playgroud)