2

背景:

在 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 并添加输入标签。它将键作为名称属性。它需要字典中的值作为名称属性的值。Urllib2 通过 HTTP POST 请求发送此 html 代码。

问题:

如果您提交的 html 代码以标准方式格式化,并且 html 标记输入具有 name 属性,这没关系。

<input id="32324" type="text" name="search" >

但是,存在html代码格式不正确的情况。并且 html 输入标签只有一个 id 属性没有 name 属性。是否有另一种方法可以通过 id 属性访问输入标签?还是可能有另一种方式?

解决方案:

?

4

2 回答 2

2

根据W3 标准,对于要提交的输入字段,它必须具有 name 属性。对 Firefox 3 和 Safari 3.2 的快速测试表明,缺少 name 属性但具有 id 属性的输入字段未提交。

话虽如此,如果您有一个要提交的表单,并且它的某些字段具有 id 但没有 name 属性,则使用 id 属性似乎是唯一可用的选项。可能是其他浏览器使用了 id 属性,或者可能有一些 JavaScript 代码处理提交事件,而不是让浏览器去做。

于 2009-05-07T22:05:09.127 回答
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 创建/设置的。

于 2009-05-07T22:11:59.657 回答