Python 机械化br.submit()限制?

Python 机械化br.submit()限制?,python,mechanize,form-submit,Python,Mechanize,Form Submit,我的目的是使用Mechanize向网站提交搜索查询,并使用BeautifulSoup分析结果。这将用于同一网站,因此表单名称等可以硬编码。我的初始查询有问题,如下所示: import mechanize import urllib2 #from bs4 import BeautifulSoup def inspect_page(url): br = mechanize.Browser(factory=mechanize.RobustFactory()) br.set_hand

我的目的是使用Mechanize向网站提交搜索查询,并使用BeautifulSoup分析结果。这将用于同一网站,因此表单名称等可以硬编码。我的初始查询有问题,如下所示:

import mechanize import urllib2 #from bs4 import BeautifulSoup def inspect_page(url): br = mechanize.Browser(factory=mechanize.RobustFactory()) br.set_handle_robots(False) br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6')] br.set_handle_redirect(mechanize.HTTPRedirectHandler) try: br.open(url) except mechanize.HTTPError, e: print "HTTP Error", e.code, except urllib2.URLError as e: print "URL Error", e.reason, return for form in br.forms(): print form br.select_form(name="dataform") br.form['pcode'] = 'WV14 8EW' br.form['premise'] = '66' response = br.submit() print response.read() #soup = BeautifulSoup(response.read()) inspect_page('http://www.fensa.co.uk/asp/certificate.asp')
正如我所预料的那样,我被重新引导了方向。调用
br.submit()
时,是否有任何东西可以阻止页面被重定向?我已经检查过该站点没有gzip。

一个限制是
mechanize
不知道JavaScript。在脚本中提交站点上的搜索表单会触发JavaScript函数,该函数在实际提交表单值之前验证输入并更改
操作属性

以下是表单的HTML部分:


这是在HTML文档开头附近定义的
validate\u required()
函数:

function validate_required(){
错误=”;
if(document.getElementById(“pcode”).value=''{error=error+“Postcode\n”;}
if(document.getElementById(“前提”).value==''{error=error+“前提\n”;}
如果(错误!=''){
警报(“请输入:\n\n”+错误);
返回false;
}
否则{
document.dataform.action=“certificate\u results.asp”;
document.dataform.submit();
}
}

表单操作仅在通过JavaScript验证表单输入时在页面上更改,因此我现在将字段直接提交到该URL

`params = {'pcode': "WV14 8EW", 'premise': "66"}
data = urllib.urlencode(params)
request = mechanize.Request(certificate_results.asp)
response = mechanize.urlopen(request, data=data)`

感谢@BlackJack提供的提示

,而不是通过br.submit()提交到当前URL。现在,我将参数直接发送到javascript中的URL
params={'pcode':“WV14 8EW”,“premise':“66”}data=urllib.urlencode(params)request=mechanize.request(redirect_url)response=mechanize.urlopen(request,data=data)
谢谢!
`params = {'pcode': "WV14 8EW", 'premise': "66"}
data = urllib.urlencode(params)
request = mechanize.Request(certificate_results.asp)
response = mechanize.urlopen(request, data=data)`