背景:
使用Python中的urllib和urllib2,您可以提交表单。
首先创建一个字典。
formdictionary = { 'search' : 'stackoverflow' }
然后使用urllib的urlencode方法转换这个字典。
params = urllib.urlencode(formdictionary)
现在,您可以使用urllib2发出url请求,并将变量params作为第二个参数传递,第一个参数是url。
open = urllib2.urlopen('www.searchpage.com', params)
据我所知,urlencode会自动将字典编码为html并添加input标记。它将关键字作为name属性。它将字典中的值作为name属性的值。Urllib2通过HTTP POST请求发送此html代码。
问题:
如果您提交的html代码是以标准方式格式化的,并且html标记输入具有name属性,那么这是可以接受的。
<input id="32324" type="text" name="search" >
但是,存在html代码未被正确格式化的情况。并且html输入标签仅具有id属性而没有名称属性。是否有其他方法可以通过id属性访问input标记?或者还有另一种方法?
解决方案:
发布于 2009-05-07 14:05:09
根据the W3 standard的说法,对于要提交的输入字段,它必须具有name属性。在Firefox3和Safari3.2上的快速测试显示,缺少name属性但具有id属性的输入字段未被提交。
也就是说,如果您有一个要提交的表单,并且它的一些字段有id属性,但没有name属性,那么使用id属性似乎是惟一可用的选项。可能是其他浏览器使用了id属性,或者可能有一些JavaScript代码来处理提交事件,而不是让浏览器来处理。
发布于 2009-05-07 14:12:00
没有名称的输入标记将不会作为表单参数提交。
例如,创建一个HTML页面,其中只包含以下内容:
<form>
<input type="text" name="one" value="foo"/>
<input type="text" value="bar"/>
<input type="submit"/>
</form>
您可以看到,第二个文本字段缺少name
属性。如果单击“提交”,页面将刷新为查询字符串:
test.html?one=foo
这样做的一个好策略是查看浏览器发送的实时POST请求,并从模拟该请求开始。使用Firefox的FireBug扩展之类的工具来查看浏览器发送的POST请求和参数。其中可能有您以前没有注意到的参数--可能是因为它们是隐藏的表单元素,或者它们是由JavaScript创建/设置的。
https://stackoverflow.com/questions/837195
复制相似问题