如何提交带有多个提交按钮的表单,并发送POST请求到网站。(Python)

0 投票
2 回答
1613 浏览
提问于 2025-04-15 16:35

我正在用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 和身份信息)。

撰写回答