Механизировать Javascript - PullRequest
       3

Механизировать Javascript

2 голосов
/ 01 апреля 2010

Я пытаюсь отправить форму с помощью Mechanize, однако я не уверен, как добавить необходимые ценности формы, которые делают некоторые Javascript Так как Mechanize еще не поддерживает Javascript, и поэтому я пытаюсь добавить переменные вручную.

Источник формы:

<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>

Я пытался добавить 2 переменные:

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

и отправьте форму:

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

В результате возвращается только (пере) показ текущего списка ссылок, как будто я не нажимал ни на одну из ссылок.

Любая помощь будет оценена. Спасибо!

Ответы [ 3 ]

5 голосов
/ 10 ноября 2010

С использованием mechanize-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
2 голосов
/ 01 апреля 2010
page.forms.first['__EVENTARUGMENT'] = '123456' // -> should be '__EVENTARGUMENT'
2 голосов
/ 01 апреля 2010

Когда я сталкиваюсь с этой проблемой, я обычно использую Firefox и Firebug , чтобы узнать, как делается запрос. Используя вкладку «Net», вы сможете увидеть запрос к «list.aspx» и все его параметры.

...