我正在使用Python Mechanize创建一个可以登录网站并提交表单的脚本。 但是,此表单有3个提交按钮(预览,发布和取消)。我习惯只有一个按钮......
这是表格:
<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()
如果我运行此脚本......它将无效。什么都没发生。我假设,因为它在表单中有3个提交按钮?还是另一个问题?
答案 0 :(得分:4)
我和你有同样的问题。
带有两个提交按钮的表单,第一个是预览,第二个是提交。
首先,机械化只使用第一个按钮,我可以看到服务器使用
回答response = browser.submit()
print response.read()
我将提交按钮名称作为参数添加到机械化提交功能中,并且它有效!
response = browser.submit("submit")
测试它,它也适合你!
答案 1 :(得分:0)
问题解决了。
不要使用python mechanize。它不会让您发送其他帖子数据。
出于某种原因,目前问题中的帖子数据还不够。还有其他东西需要发送到服务器。
因此,您必须使用常规的opener / cookiejar方法来发送所有数据。 我从Firebug(查看NET)获得了额外的数据(除了主题,消息,E,身份)