web-dev-qa-db-fra.com

python Selenium - L'élément n'est pas interactif ni ne peut être manipulé

J'essaie de renseigner des champs de formulaire via Selenium en python:

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

mais cela échoue avec une exception:

L'élément n'est pas interactif et ne peut pas être manipulé

Pourquoi cela se produit-il et faut-il résoudre ce problème?

webdriver __version__ = '2.45.0'.

10
Evg

Le problème est qu’il existe deux autres éléments input avec placeholder="Логин" et placeholder="Пароль" qui sont invisibles. Faites vos sélecteurs CSS spécifiques au formulaire de connexion :

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

J'ai eu ce problème aussi, mais dans mon cas, la cause était légèrement différente. Je devais spécifier la taille de la fenêtre avant de naviguer vers la page:

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

Cela est dû au fait que la taille de la fenêtre par défaut rendait la page à une largeur où une requête de média avait caché l'élément, ce qui a provoqué le "L'élément n'est actuellement pas interactif et ne peut pas être manipulé" error.

1
James Green

Utilisez une fonction d'attente avant l'élément qui a généré l'erreur. 

Le WebDriver tente d'interagir avec un élément qui n'est pas complètement chargé.

1
Kolapo

Pour moi, le problème était dû au fait qu'un autre élément recouvrait la zone de saisie. Dans mon cas, il y avait une étiquette fantaisie à la place d'un espace réservé qui s'anime vers le haut au clic.

L'astuce consistait à cliquer d'abord sur l'étiquette pour déclencher l'animation, puis remplir le champ de saisie.

1
Jason J. Nathan

Parfois, il faut du temps pour charger la page. Vous pouvez ajouter une instruction wait. Essayez d’utiliser "Thread.sleep (3000)".

0
Shweta Valunj

Ici, les sélecteurs xpath fonctionnent.

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

ou même mais sélecteur 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
Andrey