2017-08-20 1 views
1

Je veux envoyer une clé à un formulaire de connexion. le problème est qu'une erreur dit:Selenium send_keys dit: L'élément n'est pas actuellement manipulable et ne peut pas être manipulé

Element is not currently interactable and may not be manipulated 

Voici mon code:

url = 'http://tx3.travian.ir' 
hero_url = 'http://tx3.travian.ir/spieler.php?uid=19865' 
driver = webdriver.PhantomJS(r'phantomjs/bin/phantomjs') 
try: 
    driver.set_page_load_timeout(15) 
    driver.get(url) 
except: 
    Debug.PrintException() 
wait = WebDriverWait(driver, 10) 
username = wait.until(EC.visibility_of_element_located((By.NAME, 'name'))) 
password = wait.until(EC.visibility_of_element_located((By.NAME, 'password'))) 
username.send_keys('user') 
password.send_keys('pass') 
login_btn = driver.find_element_by_id('s1') 
login_btn.click() 
driver.get(hero_url) 
driver.close() 

Qu'est-ce qui ne va pas?

Répondre

0

Vous avez défini WebDriverWait mais vous ne l'utiliser

from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions 

wait = WebDriverWait(driver, 10) 
username = wait.until(expected_conditions.visibility_of_element_located((By.NAME, 'name'))) 
+0

même erreur, le code mis à jour –

+0

@ehsanshirzadi Où puisez-vous l'erreur? – Guy

0

Essayez click à la case d'entrée et puis entrez le texte. Parfois, thread.sleep(ms) en Java aide également.

0

J'ai utilisé votre propre code et fait 5 ajustements comme suit:

  1. Réglez le window_size-(1400,1000)
  2. Pour username champ au lieu de (By.NAME, 'name') Je l'ai utilisé (By.XPATH, "//input[@name='name']")
  3. Pour password champ au lieu de (By.NAME, 'password') J'ai utilisé (By.XPATH, "//input[@name='password']")
  4. Pour login_btn bouton au lieu de find_element_by_id('s1') J'ai utilisé find_element_by_xpath("//button[@id='s1']")
  5. Enfin, j'ai ajouté une instruction print pour confirmer la fin du script.
  6. Voici le bloc de code de travail:

    from selenium import webdriver 
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC 
    from selenium.webdriver.common.by import By 
    
    
    url = 'http://tx3.travian.ir' 
    hero_url = 'http://tx3.travian.ir/spieler.php?uid=19865' 
    driver = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe') 
    try: 
        driver.set_page_load_timeout(15) 
        driver.set_window_size(1400,1000) 
        driver.get(url) 
    except: 
    #  Debug.PrintException() 
        pass 
    wait = WebDriverWait(driver, 10) 
    username = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@name='name']"))) 
    password = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@name='password']"))) 
    username.send_keys('user') 
    password.send_keys('pass') 
    login_btn = driver.find_element_by_xpath("//button[@id='s1']") 
    login_btn.click() 
    driver.get(hero_url) 
    driver.close() 
    print("Driver Closed") 
    
  7. Ce bloc de code imprime le suivant sur la console:

    Driver Closed 
    
+0

Les noms ont une haute priorité sur xpath – iamsankalp89