【问题标题】:python selenium - Element is not currently interactable and may not be manipulatedpython selenium - 元素当前不可交互,可能无法操作
【发布时间】:2015-03-30 12:44:26
【问题描述】:

我正在尝试通过 python 中的 selenium 填充表单字段:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()        
driver.get("http://www.miralinks.ru/")
driver.implicitly_wait(30)
login = driver.find_element_by_css_selector('input[placeholder="Логин"]')
hov = ActionChains(driver).move_to_element(login)
hov.perform()
login.clear()
login.send_keys("login")
pwd = driver.find_element_by_css_selector('input[placeholder="Пароль"]')
pwd.clear()
pwd.send_keys("pass")

但这失败了,但有例外:

元素当前不可交互且不可操作

为什么会发生这种情况并解决这个问题?

网络驱动程序__version__ = '2.45.0'.

【问题讨论】:

  • 只是出于好奇,你为什么要转向那个元素?
  • 我认为这是现场的某种陷阱.. 移动以启用元素

标签: python selenium selenium-webdriver


【解决方案1】:

在给出错误的元素之前使用等待函数。

webdriver 正在尝试与未完全加载的元素交互。

【讨论】:

    【解决方案2】:

    问题在于,还有另外两个 input 元素与 placeholder="Логин"placeholder="Пароль" 是不可见的。使您的 CSS 选择器特定于登录表单

    login = driver.find_element_by_css_selector('form#loginForm input[placeholder="Логин"]')
    pwd = driver.find_element_by_css_selector('form#loginForm input[placeholder="Пароль"')
    

    【讨论】:

    • 谢谢,这行得通,但我不明白为什么?两个选择器都指向同一个元素..
    • 您的回答帮助我找出了一个非常相似的问题(注册表单和登录标题中都存在“密码”字段)。话虽如此,我通过使用 xpath 解决了这个问题://form[@name="signup.form"]//input[@name = "password"]
    【解决方案3】:

    我也遇到过这个问题,但在我的情况下,原因略有不同。我需要在导航到页面之前指定窗口的大小:

    driver.Manage().Window.Size = new Size(width, height);
    

    这是因为默认窗口大小以媒体查询隐藏元素的宽度呈现页面,这导致 “元素当前不可交互且可能无法操作” 错误。

    【讨论】:

      【解决方案4】:

      对我来说,问题是因为另一个元素覆盖了输入框。在我的例子中,有一个花哨的标签代替了点击时向上动画的占位符。

      诀窍是先点击标签触发动画,然后填写输入字段

      【讨论】:

        【解决方案5】:

        xpath 选择器在这里工作。

        login = driver.find_element_by_xpath('//*[@id=\'loginForm\']/div/div[1]/input')
        pwd = driver.find_element_by_xpath('//*[@id=\'loginForm\']/div/div[2]/input')
        

        或相同但css选择器

        login = driver.find_element_by_css_selector('form#loginForm [name="data[User][login]"]')
        pwd = driver.find_element_by_css_selector('form#loginForm [name="data[User][password]"]')
        

        【讨论】:

          【解决方案6】:

          有时加载页面需要时间。您可以添加等待语句。 尝试使用“Thread.sleep(3000)”

          【讨论】:

            猜你喜欢
            • 2017-11-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-27
            • 1970-01-01
            相关资源
            最近更新 更多