python selenium - 元素目前不可交互,也可能无法操作

时间:2015-03-30 12:44:26

标签: python selenium selenium-webdriver

我正在尝试通过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")

但是失败但有例外:

  

元素目前无法互动,可能无法操纵

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

webdriver __version__ = '2.45.0'

6 个答案:

答案 0 :(得分:10)

问题是,还有另外两个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="Пароль"')

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

网络驱动程序正在尝试与未完全加载的元素进行交互。

答案 4 :(得分:0)

这里有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]"]')

答案 5 :(得分:0)

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