背景:
在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中的字典进行编码并添加输入标记。它需要键作为name属性。它将字典中的值作为name属性的值。 Urllib2通过HTTP POST请求发送此HTML代码。
问题:
如果您提交的html代码采用标准方式格式化,并且html标记输入具有name属性,那么这是正常的。
<input id="32324" type="text" name="search" >
但是,存在html代码格式不正确的情况。并且html输入标记只有id属性没有name属性。是否有其他方法可以通过id属性访问输入标记?或者还有另一种方式吗?
解决方案:
答案 0 :(得分:2)
根据the W3 standard,对于要提交的输入字段,它必须具有name属性。对Firefox 3和Safari 3.2的快速测试表明,未提交缺少name属性但具有id属性的输入字段。
话虽如此,如果您有一个要提交的表单,并且其某些字段具有id而不是name属性,则使用id属性似乎是唯一可用的选项。可能是其他浏览器使用id属性,或者可能有一些JavaScript代码处理提交事件而不是让浏览器执行它。
答案 1 :(得分:0)
不会将没有名称的输入标记作为表单参数提交。
例如,创建一个包含此内容的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创建/设置的。