2015-11-20 40 views
2

我想用我的登錄到我的draftkings帳戶,但我無法輸入我的電子郵件和密碼。Selenium發送密鑰登錄框不起作用

driver = webdriver.Firefox() 
driver.get("https://www.draftkings.com/") 
driver.find_element_by_xpath(".//*[@id='bs-example-navbar-collapse-1']/ul/li[3]/a").click() 

拋出一個錯誤

driver.find_element_by_xpath(".//*[@id='Username']").send_keys('username') 

什麼都不做

elem = driver.find_element_by_xpath(".//*[@id='Username']") 
driver.execute_script("arguments[0].setAttribute('value', 'username')",elem) 
+0

您是否考慮過使用'find_element_by_link_text()'來點擊登錄鏈接?在頁面上有'id = Username'的4個元素。你想要第三個。獲取所有這些,然後訪問該集合中的第3個元素。 – JeffC

回答

0

要低於我的工作 - 使用索引。

#Click Sign In Button 
driver.find_element_by_xpath(".//*[@id='bs-example-navbar-collapse-1']/ul/li[3]/a").click() 
#Type Username 
driver.find_element_by_xpath("(//*[@id='Username'])[3]").send_keys("Username") 
#Type Password 
driver.find_element_by_xpath("(//*[@id='Password'])[2]").send_keys("Password") 
#Click Submit button 
driver.find_element_by_xpath("(//div[@class='login_section']//a[@class='dk-btn dk-btn-success'])[2]").click() 
+1

而不是使用'time.sleep',你最好使用'WebDriverWait(...)'。 – falsetru

+0

@ falsetru謝謝,讓OP做到這一點 - 我只是回答*問題*並暗示要改變。 – SIslam

+0

提供使用最佳實踐的解決方案不是更好嗎?花60秒鐘,用'wait'替換'sleep()'。 – JeffC

2

不幸的是,該網頁有4個元素ID爲Username

您需要篩選出一個他們:XPath中

for x in driver.find_elements_by_css_selector("#Username"): 
    if x.is_displayed(): 
     x.send_keys('username') 
     break 
+1

是的,它是一種蠻力! – SIslam

+0

@SIslam,我無法找到適當的xpath/css選擇器,它不涉及硬編碼索引,它比答案中的簡單索引更簡單。 – falsetru

+0

在選擇dom的情況下沒有硬編碼的陷阱可能會帶來意想不到的結果。今天我在試驗時想通了。 – SIslam