Python Seleniu send_keys表示:元素当前不可交互,可能无法操作

Python Seleniu send_keys表示:元素当前不可交互,可能无法操作,python,selenium,selenium-webdriver,phantomjs,Python,Selenium,Selenium Webdriver,Phantomjs,我想将密钥发送到登录表单。问题是错误显示: 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: d

我想将密钥发送到登录表单。问题是错误显示:

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

怎么了?

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

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

尝试在输入框中单击
,然后输入文本


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

尝试
单击输入框中的
,然后输入文本


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

我使用了您自己的代码,并做了如下5项调整:

  • 窗口大小设置为
    (14001000)
  • 对于
    username
    字段而不是
    (By.NAME,'NAME')
    我使用了
    (By.XPATH,“//input[@NAME='NAME'])
  • 对于
    密码
    字段而不是
    (By.NAME,'password')
    我使用了
    (By.XPATH,“//input[@NAME='password'])
  • 对于
    login\u btn
    按钮而不是
    find\u element\u by\u id('s1')
  • 最后,我添加了一个
    print
    语句来确认脚本的结束
  • 以下是工作代码块:

    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")
    
  • 此代码块在我的控制台上打印以下内容:

    Driver Closed
    

  • 我使用了您自己的代码,并做了如下5项调整:

  • 窗口大小设置为
    (14001000)
  • 对于
    username
    字段而不是
    (By.NAME,'NAME')
    我使用了
    (By.XPATH,“//input[@NAME='NAME'])
  • 对于
    密码
    字段而不是
    (By.NAME,'password')
    我使用了
    (By.XPATH,“//input[@NAME='password'])
  • 对于
    login\u btn
    按钮而不是
    find\u element\u by\u id('s1')
  • 最后,我添加了一个
    print
    语句来确认脚本的结束
  • 以下是工作代码块:

    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")
    
  • 此代码块在我的控制台上打印以下内容:

    Driver Closed
    

  • 名称的优先级高于xpathName的优先级高于xpath的优先级