如何提交带有多个提交按钮的表单,并发送POST请求到网站。(Python)
我正在用Python Mechanize写一个脚本,目的是登录一个网站并提交一个表单。不过,这个表单有三个提交按钮(预览、发布和取消)。我之前只见过一个按钮……
这是表单的内容:
<TextControl(subject=Is this good for the holidays? Anyone know about the new tech?)>
<IgnoreControl(threads=<None>)>
<TextareaControl(message=Im new to technology stocks.)>
<SelectControl(identity=[*annamae41g])>
<RadioControl(E=[5, 4, *3, 2, 1, 0])>
<SubmitControl(SubmitPreview=Preview Message) (readonly)>
<SubmitControl(SubmitPost=Post Message) (readonly)>
<SubmitControl(SubmitCancel=Cancel) (readonly)>
<HiddenControl(action_btn=) (readonly)>
<HiddenControl(_charset_=) (readonly)>
<HiddenControl(.crumb=4DxnFEwMIGG) (readonly)>
<HiddenControl(r=/Stocks_(A_to_Z)/Stocks_G) (readonly)>
<HiddenControl(bn=25263) (readonly)>
<HiddenControl(<None>=annamae41g) (readonly)>>
这是我的代码:
br.open(newtopic_url)
br.select_form(name="postmsg")
br.form['subject'] = "Is this good for the holidays? Anyone know about the new tech?"
br.form['message'] = "Im new to technology stocks."
br.form['E'] = ['3']
br.form['identity'] = ['annamae41g']
print br.form
br.submit()
如果我运行这个脚本……它就不工作。什么都没有发生。我在想,是因为表单里有三个提交按钮的原因吗?还是说是其他问题?
2 个回答
4
我遇到过和你一样的问题。
有一个表单里面有两个提交按钮,第一个是预览,第二个是提交。
一开始,mechanize 只使用了第一个按钮,我可以看到服务器的回应,使用了
response = browser.submit()
print response.read()
我把提交按钮的名字作为参数放进了 mechanize 的提交函数里,这样就成功了!
response = browser.submit("submit")
你也试试,这样应该也能对你有效!
0
问题解决了。
不要使用 Python 的 mechanize 库。因为它不允许你发送其他的表单数据。
目前问题中提到的那些数据是不够的。还有其他一些东西需要发送到服务器。
所以,你必须使用普通的 opener 和 cookiejar 方法来发送所有的数据。我是通过 Firebug(查看网络请求)获取到的额外数据(除了主题、消息、E 和身份信息)。