2016-08-15 152 views
0

我已经尝试通过id和xpath查找提交按钮,但它们中没有一个在页面源代码中工作并检查过,id是相同的。我不知道为什么会发生这种情况虽然我给了正确的ID或XPath

网址:https://moodle.niituniversity.in/moodle/login/index.php
无法用python selenium登录错误:NoSuchElementException错误

from pyvirtualdisplay import Display 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
display = Display(visible=0, size=(1024, 768)) 
display.start() 
driver = webdriver.Firefox() 
#driver.set_preference("browser.startup.homepage_override.mstone", "ignore") 
driver.get("https://moodle.niituniversity.in/moodle/login/index.php") 
username = driver.find_element_by_name("username") 
username.clear() 
username.send_keys("User123") 
username.send_keys(Keys.RETURN) 
password = driver.find_element_by_name("password") 
password.clear() 
password.send_keys("pass123") 
password.send_keys(Keys.RETURN) 
password = driver.find_element_by_xpath(".//*[@id='loginbtn']").click() 
driver.get("https://moodle.niituniversity.in/moodle") 
assert "user" in driver.page_source 
driver.close() 
display.stop() 

.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":".//*[@id='loginbtn']"}

+0

你有没有找框架或iframe?确保此按钮不在任何框架或iframe中? –

+0

是的这是不是在任何iframe – anderson

+0

而定位器呢?此外,请确保只有一个元素由提供的Id'loginbtn' –

回答

0

也许是可能的,这是时机的问题,您应该实现WebDriverWait要等到本按钮,页面如下: -

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "loginbtn"))) 
element.click() 

全码:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver.get("https://moodle.niituniversity.in/moodle/login/index.php") 
username = driver.find_element_by_name("username") 
username.clear() 
username.send_keys("User123") 

password = driver.find_element_by_name("password") 
password.clear() 
password.send_keys("pass123") 

button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "loginbtn"))) 
button.click() 
+0

为什么会发生这种情况? – anderson

+0

这种情况主要发生在你的网页加载速度缓慢,并且驱动程序执行速度很快时,这就是为什么硒无法获取元素。 –

+0

仍然无法工作 – anderson