2015-03-30 16 views
9

Sto cercando di compilare i campi del modulo tramite il selenio in python:pitone selenio - Elemento non è attualmente interactable e non può essere manipolato

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

ma questo non riesce ad eccezione:

elemento non è attualmente intercambiabile e non può essere manipolato

Perché questo accade e gow per risolvere questo?

webdriver __version__ = '2.45.0'.

+0

Solo per curiosità, perché ti stai spostando su quell'elemento? –

+0

Ho pensato che fosse una sorta di trappola sul sito .. spostati per abilitare l'elemento – user1624522

risposta

9

Il problema è che ci sono altri due elementi input con placeholder="Логин" e placeholder="Пароль" che sono invisibili. Fai la tua selettori CSS specifica al form di login:

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

grazie, funziona, ma non capisco perché? entrambi i selettori puntano allo stesso elemento .. – user1624522

+0

@ user1624522 sicuro, ha aggiornato la risposta. – alecxe

+0

La tua risposta mi ha aiutato a capire un problema molto simile che stavo avendo (presenza di campo "password" in entrambi i moduli di iscrizione e di accesso). Detto questo, l'ho risolto usando xpath in questo modo: '//form[@name="signup.form"]//input[@name =" password "]' –

0

Qui selettori XPath di lavoro.

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

o uguale ma css selettore

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

Per me, il problema era perché un altro elemento fu sovrapponendo casella di input. Nel mio caso, c'era un'etichetta di fantasia al posto di un segnaposto che si animava verso l'alto al clic.

Il trucco era quello di cliccare sull'etichetta prima di attivare l'animazione e poi compilare il campo di input

1

Ho avuto questo problema pure, ma nel mio caso la causa era leggermente diverso. Avevo bisogno di specificare la dimensione della finestra prima di accedere alla pagina:

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

Questo perché la dimensione della finestra di default è stato il rendering della pagina alla larghezza in cui una media query aveva nascosto l'elemento, che ha causato la " L'elemento non è attualmente intercambiabile e non può essere manipolato "Errore.

0

A volte ci vuole tempo per caricare la pagina. È possibile aggiungere una dichiarazione di attesa. Prova a utilizzare "Thread.sleep (3000)"

Problemi correlati