2014-09-01 4 views
0

학교 URL에 연결하고 셀렌으로 프로세스를 자동화하려고합니다. 원래는 splinter를 사용해 보았지만 비슷한 문제가 발생했습니다. 사용자 이름과 암호 필드와 상호 작용할 수없는 것 같습니다. 나는 그것이 상호 작용할 필요가있는 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> 

폼 :

아이디 :

,210
<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이라는 것을 깨달았을 때 나는 그것을 탐색하려고 시도했지만 '프레임을 찾을 수 없습니다 : Content'라고 말합니다. 내가 놓친 다른 iframe이 있습니까? 아니면 확실한 무엇인가? 여기가 처음으로 링크 된 코드로 무언가를 엉망으로 만들면 유감스럽게 생각합니다.

도움 주셔서 감사합니다.

답변

1

driver.switch_to.frame() 걸립니다 프레임의 id 또는 프레임 ID = contentFrame와 이름 = contentname. (작동하지 않는 이유는 다른 문제로 인한 것일 수 있습니다.)

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 나 이름이 무엇이든간에 내가 사용하는 것과 상관없이 여전히 연결할 수 없습니다. 탐색 바에 다른 iframe이 있음을 확인했습니다. 하지만 그 첫 번째 권리에 연결할 필요가 없어야합니까? 그들은 html에서 분리되어 있습니다. 의견 있으십니까? – KJS

+0

@KJS : 위의 코드를 테스트했습니다. 어떤 환경을 사용하고 있습니까? Python 2.7.5, Selenium 2.42.1, Firefox 24.6.0 ESR이 있습니다. Chrome으로 시도해보십시오. 작동하는 경우 코드가 아닌 Firefox 문제 여야합니다. –

+0

글쎄, 다른 URL을 사용하여 연결하고있다. 나는 그것도 코드라고 생각하지 않았지만 이상하게도 아마 웹 사이트 일 것입니다.현재 웹 사이트 : https://my.oregonstate.edu/webapps/login/?action=relogin 을 사용하고 있는데 입력란에는 입력 할 수 있지만 제출 버튼은 선택할 수 없습니다. find_element_by_class_name ('제출 버튼 -1')을 사용하고 있는데 '지정된 선택 제출 버튼 -1이 잘못되었거나 web 요소가 발생하지 않습니다.'라는 오류가 발생합니다. 이견있는 사람? – KJS