Mechanize не видит некоторые скрытые формы ввода?

Я хочу очистить эту веб-страницу с помощью Mechanize. Элемент формы выглядит так:

<form name="ctl00" method="post" action="PSearchResults.aspx?state=ME&amp;rp=" id="ctl00"> 
<div> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="verylongstring" /> </div> 
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKb7POZAwK4v7ffCOmari00yJft/iuZBMdOH/zh9TDI" /> 
</div> 
</form>

Я использую Mechanize для распечатки элементов управления, но он видит только два из них. Если я запускаю это:

    br.select_form(name='ctl00')
    br.form.set_all_readonly(False) # allow changing the .value of all controls
    for control in br.form.controls:
        if not control.name:
            print " - (type) =", (control.type)
            continue  
        print " - (name, type, value) =", (control.name, control.type, br[control.name])

все, что печатается, это:

- (name, type, value) = ('__VIEWSTATE', 'hidden', '/wEPDwUGNDQ5NTMwD2QWAgIBD2QWAgIHD2QWCgIBDw8WAh4E...more
- (name, type, value) = ('__EVENTVALIDATION', 'hidden', '/wEWAgKb7POZAwK4v7ffCOmari00yJft/iuZBMdOH/zh9TDI')

Почему Mechanize не «видит» поля __EVENTTARGET и __EVENTARGUMENT?


person AP257    schedule 26.07.2010    source источник


Ответы (2)


Сайт проверяет пользовательский агент и обслуживает другую страницу для механизации

указание этого в качестве агента пользователя работает нормально

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Вот ссылка, показывающая, как установить User-Agent с механизацией

person John La Rooy    schedule 27.07.2010
comment
Я не согласен. Наверняка они есть в исходниках? Существует функция JavaScript doPostBack, которая устанавливает значение этих полей, true, но они уже существовали: recognition.ncqa.org/PSearchResults.aspx?state=ME&rp= - person AP257; 27.07.2010
comment
@AP257, загрузите страницу с помощью wget, curl или urllib2, и вы увидите, что источник сильно отличается от того, что отображается как источник в вашем браузере. - person John La Rooy; 27.07.2010
comment
@ AP257, я пересмотрел свой ответ, это был вовсе не javascript, а тестирование пользовательского агента :( - person John La Rooy; 27.07.2010
comment
О, я вижу. Я бы никогда не разобрался с этим сам. Большое спасибо! - person AP257; 27.07.2010

В качестве продолжения у меня была такая же проблема с использованием механизма (python), и я попытался определить UserAgent для

br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11')]

в соответствии с рекомендациями сайта: http://stockrt.github.com/p/emulatory-a-browser-in-python-with-mechanize/

Однако это не сработало, поэтому я решил включить отсутствующие элементы формы, используя следующий код:

br.select_form(name='form')
br.form.set_all_readonly(False) # allow changing the .value of all controls
br.form.new_control('text','__EVENTARGUMENT',{'value':''})
br.form.new_control('text','__EVENTTARGET',{'value':''})
br.form.fixup()
br["__EVENTTARGET"] = 'lbSearch'
br["__EVENTARGUMENT"] = ''
person TheChrisONeil    schedule 09.07.2012