2010-04-01 2 views
2

Mechanize에서 양식을 제출하려고 시도하지만 일부 자바 스크립트에서 필요한 양식 값을 추가하는 방법을 모르겠습니다. Mechanize는 아직 Javascript를 지원하지 않으므로 수동으로 변수를 추가하려고합니다.Mechanize Javascript

양식 소스 : 양식

page.forms.first['__EVENTTARGET'] = '_ctl0:ContentPlaceHolder1:Link' 
page.forms.first['__EVENTARUGMENT'] = '123456' 

제출 :

<form name="aspnetForm" method="post" action="list.aspx" language="javascript" onkeypress="javascript:return WebForm_FireDefaultButton(event, '_ctl0_ContentPlaceHolder1_cmdSearch')" id="aspnetForm"> 

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/..." /> 

<script type="text/javascript"> 
<!-- 
var theForm = document.forms['aspnetForm']; 
if (!theForm) { 
    theForm = document.aspnetForm; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
// --> 
</script> 

<script language="javascript"> 
<!-- 
var _linkpostbackhit = 0; 
function _linkedClicked(id, key, str, a, b) { 
    if (!b || !_linkpostbackhit) { 
     if (!a) { 
      __doPostBack(key, id); 
      _linkpostbackhit = 1; 
     } else { 
      if (window.confirm(str)) { 
       __doPostBack(key, id); 
       _linkpostbackhit = 1; 
      } 
     } 
    } 
    return void(0); 
} 
// --> 
</script> 

... 

<a href="JavaScript:_linkedClicked('123456','_ctl0:ContentPlaceHolder1:Link', '',0,1);">123456</a> 

... 

</form> 

내가 두 변수를 추가하려고

page.forms.first.click_button(page.forms.first.buttons.first) 

이 결과는 (재) 반환보기 링크 중 하나를 클릭하지 않은 것처럼 현재 링크 목록

도움이 될 것입니다. 감사!

답변

2

이 문제가 발생하면 일반적으로 Firefox 및 Firebug을 사용하여 요청 방법을 확인합니다. "인터넷"탭을 사용하면 "list.aspx"및 모든 매개 변수에 대한 요청을 볼 수 있습니다.

2
page.forms.first['__EVENTARUGMENT'] = '123456' // -> should be '__EVENTARGUMENT' 
5

기계화-1.0.0 다음 ​​작품을 사용 :

agent = Mechanize.new 
page = agent.get('http://127.0.0.1/some.aspx') 

form = page.form("aspnetForm") 
form.add_field!('__EVENTARGUMENT', 'Page$2') 
form.add_field!('__EVENTTARGET', 'ctl00$ContentPlaceHolder1$gvwSomeList') 
page = agent.submit(form) # this gets page 2 
+0

DUDE를! 너는 내 엉덩이에 답했다. 나는 너에게 언제든지 맥주를 빚지고있다! 무리 감사. – jlstr

관련 문제