2017-08-20 35 views
1

我想將密鑰發送給登錄表單。問題是,一個錯誤說:Selenium send_keys表示:元素當前不可互動,可能不會被操縱

Element is not currently interactable and may not be manipulated 

這是我的代碼:

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

有什麼不對?

回答

0

您定義WebDriverWait但你永遠不使用它

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

同樣的錯誤,代碼更新 –

+0

@ehsanshirzadi你在哪兒錯誤? – Guy

0

嘗試click在輸入框,然後輸入文本。

有時候,java中的thread.sleep(ms)也有幫助。

0

我用自己的代碼,並提出5個如下調整:

  1. window_size(1400,1000)
  2. username場,而不是(By.NAME, 'name')我用(By.XPATH, "//input[@name='name']")
  3. 對於password場,而不是(By.NAME, 'password')我已經使用(By.XPATH, "//input[@name='password']")
  4. 對於login_btn按鈕而不是find_element_by_id('s1')我已經使用find_element_by_xpath("//button[@id='s1']")
  5. 最後,我添加了一個print聲明來確認腳本結束。
  6. 這裏是工作的代碼塊:

    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. 這個代碼塊打印我的控制檯上執行以下操作:

    Driver Closed 
    
+0

名稱優先於xpath – iamsankalp89

相關問題