2012-12-07 42 views
1

根据对SO和其他来源,我想使用Python的urllib/urllib2的以以下方式提交表单发现了一些简单的例子:多POST提交表单元素

>>> import urllib, urllib2 
>>> url = 'http://example.com' 
>>> r_params = {'a':'test','b':'hooray'} 
>>> e_params = urllib.urlencode(r_params) 
>>> user_agent = 'some browser and such' 
>>> headers = {'User-Agent': user_agent} 
>>> req = urllib2.Request(url, e_params, headers) 
>>> response = urllib2.urlopen(req) 
>>> data = response.read() 

我已经得到了这个工作,但是,在我正在寻找的特定形式有两个“提交”类型的按钮。例如:

<b><input type="submit" name="ButtonA" value="SUBMIT"></b> 
<b><input type="submit" name="ButtonB" value="LINK"></b> 

我相信我从目前的代码选择错误的结果的问题。如何通过提交ButtonB而不是ButtonA来获得回复?我读过的一些东西似乎表明我可以尝试使用机械化,但我希望保持这种简单而不必阅读和学习机械化。有没有简单的方法来做到这一点,还是我需要吸取它,并且真正花时间学习和理解我在做什么?

回答

2

它应该是相当简单的,如果是那样的话 - 你应该看看在准确你在做什么。具体来说,你发送一个POST请求(urllib2.urlopen会自动发送一个POST请求,如果提供了数据参数的话)和通常由表单元素本身提供的数据。在多个“提交”输入的情况下,激活的提交输入的名称和值将与表单数据的其余部分一起发送。

所以,这就是你需要做的 - 包括“ButtonB”:“LINK”的数据。

快速参考,所以你可以看到HTML如何做它所做的一切东西: http://www.w3.org/TR/html401/interact/forms.html#submit-format

+0

我只是做了r_params = { '一': '测试', 'B': '万岁', 'ButtonB': 'LINK'} 和它的工作很大。谢谢! –

2

我建议使用像TamperData用于Firefox的工具是如何形成的网站发表的帖子准确地发现。在准备点击其中一个按钮之前激活TamperData。当它结束时,继续并单击一个。 POST将被记录在TamperData中。找到它并点击它。

找到下面的POSTDATA行并双击它。选择“Decoded”单选按钮以删除HTML转义。现在你有一个1:1的引用,你应该在制作“r_params”字典时复制。举例来说,如果POSTDATA是这样的:

Name  | Value 
-------------------- 
QueryString | test 
Page  | 
Search  | blah 

,那么你将创建你的词典是这样的:

r_params = {'QueryString': 'test', 
      'Page': '', 
      'Search':, 'blah'} 

你发现后出了什么POSTDATA看起来像每个单独提交事件,你会知道如何创建正确的字典来发送。此外,请务必确认您正在发布到正确的网址。祝你好运!

+0

啊,谢谢你。我得到了这个工作,这让我更加明白我现在正在做什么。 –