【问题标题】:Selenium send_keys says: Element is not currently interactable and may not be manipulatedSelenium send_keys 说:元素当前不可交互,可能无法操作
【发布时间】:2017-08-20 07:28:37
【问题描述】:

我想将密钥发送到登录表单。问题是一个错误说:

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

怎么了?

【问题讨论】:

    标签: python selenium selenium-webdriver phantomjs


    【解决方案1】:

    您定义了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')))
    

    【讨论】:

      【解决方案2】:

      我使用了你自己的代码,做了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
        

      【讨论】:

      • 名称优先于 xpath
      【解决方案3】:

      在输入框尝试click,然后输入文本。

      有时,java 中的 thread.sleep(ms) 也有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多