2014-09-01 133 views
0

我試圖連接到學校的網址並使用硒自動化過程。最初我嘗試使用分裂,但遇到類似的問題。我似乎無法與用戶名和密碼字段進行交互。我意識到一點點,因爲它是一個我需要與之交互的iframe。目前,我有:與網站表單互動

import time 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 

driver.get("https://my.oregonstate.edu/webapps/login/") 
driver.switch_to.frame('Content') #I tried contentFrame and content as well 

loginid = driver.find_elements_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_elements_by_id('password') 
passwd.send_keys("***") 
sub = driver.find_elements_by_id('login') 
sub.click() 
time.sleep(5) 
driver.close() 

這裏是我想與之交互的HTML:

網站:https://my.oregonstate.edu/webapps/portal/frameset.jsp

的IFRAME:

<iframe id="contentFrame" style="height: 593px;" name="content" title="Content" src="/webapps/portal/execute/tabs/tabAction?tab_tab_group_id=_1_1" frameborder="0"></iframe> 

的形式:

用戶名:
<input name="user_id" id="user_id" size="25" maxlength="50" type="text"> 

密碼:

<input size="25" name="password" id="password" autocomplete="off" type="password"> 

看來,硒能找到的元素隨便找,但我無法輸入任何信息到這些領域,我得到了錯誤「列表對象有沒有屬性」。當我意識到這是我嘗試導航到的iframe時,它說'無法定位幀:內容'。是否有另一個iframe我缺少?或者明顯的東西?這是我第一次在這裏很抱歉,如果我搞砸了代碼鏈接。

感謝您的幫助。

回答

1

driver.switch_to.frame()採用幀的idname,你的框架具有ID = contentFrame和名稱= content。 (他們沒有工作的原因可能是因爲不同的問題,請仔細閱讀)

首先,請嘗試使用其中一個,而不是Content(其大寫C)。

解決了上述問題後,代碼中會出現另一個錯誤。

loginid = driver.find_elements_by_id('user_id') 
loginid.send_keys("***") 

driver.find_elements_by_id找到所有匹配的元素,它是一個列表。所以你不能使用send_keys。請使用driver.find_element_by_id('user_id')

這是我測試的代碼工作。

from selenium import webdriver 

driver = webdriver.Firefox() 

driver.get("https://my.oregonstate.edu/webapps/login/") 
driver.switch_to.frame('content') # all lower case to match your actual frame name 

loginid = driver.find_element_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_element_by_id('password') 
passwd.send_keys("***") 

關於問題在您的評論如下

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("https://my.oregonstate.edu/webapps/login/?action=relogin") 

loginid = driver.find_element_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_element_by_id('password') 
passwd.send_keys("***") 

driver.find_element_by_css_selector('.submit.button-1').click() 
+0

你是對上發現的元素。然而,我的問題仍然存在於iframe中。無論我使用什麼,無論是id還是name,它仍然無法連接。我注意到有另一個導航欄的iframe。但我不應該連接到第一個權利?它們在html中是分開的。你有什麼建議嗎? – KJS 2014-09-02 18:14:58

+0

@KJS:我已經測試了上面的代碼。你在使用什麼環境?我有Python 2.7.5,Selenium 2.42.1,Firefox 24.6.0 ESR。請嘗試與Chrome,如果它的工作,那麼它應該是一個Firefox問題,而不是代碼。 – 2014-09-02 20:53:25

+0

嗯,我得到它使用不同的URL來連接。我不認爲這是代碼,但奇怪的是,也許是網站。我目前正在使用網站: https://my.oregonstate.edu/webapps/login/?action=relogin 它允許我輸入字段但不選擇提交按鈕。我正在使用find_element_by_class_name('submit button-1'),但我得到錯誤'給定的選擇器提交按鈕1無效或不會導致webelement。有什麼想法嗎? – KJS 2014-09-03 02:31:41