Python Selenium - 元素目前无法交互,可能无法操作。

12

我正在尝试使用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'


只是出于好奇,你为什么要移动到那个元素? - Vivek Singh
我以为这是网站上的某种陷阱...移动以启用元素。 - Evg
6个回答

12

问题在于还有两个其他的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="Пароль"')

谢谢,这个可行,但我不明白为什么?两个选择器都指向同一个元素... - Evg
你的回答帮助我解决了一个非常类似的问题(注册表单和登录头部都有“密码”字段)。 话虽如此,我通过使用xpath解决了它,像这样: //form[@name="signup.form"]//input[@name = "password"] - HEADLESS_0NE

2

在导致错误的元素之前使用等待函数。

Webdriver 正试图与未完全加载的元素进行交互。


1

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

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


1
我也遇到了这个问题,但我的情况略有不同。在导航到页面之前,我需要指定窗口的大小:
driver.Manage().Window.Size = new Size(width, height);

这是因为默认的窗口大小渲染页面的宽度隐藏了元素,导致了“元素当前不可交互且可能无法操作”的错误。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接