我想使用Mechanize刮this web page。该表单元素看起来像这样:机械化没有看到一些隐藏的表单输入?
<form name="ctl00" method="post" action="PSearchResults.aspx?state=ME&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>
我使用机械化来打印控件,但它只能看到其中两个。如果我运行此:
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')
为什么不能机械化 '看见' __EVENTTARGET和__EVENTARGUMENT领域?
我不同意。他们确实在源头上吗?有一个JavaScript'doPostBack'函数设置这些字段的值,但是它们已经存在:http://recognition.ncqa.org/PSearchResults.aspx?state=ME&rp= – AP257 2010-07-27 10:56:09
@ AP257,用wget下载页面,curl或者urllib2,你会发现源代码与你的浏览器的源代码很不一样 – 2010-07-27 11:36:32
@ AP257,我修改了我的答案,根本不是javascript,而是使用了正式的测试:( – 2010-07-27 12:30:20