Python中的browser.submit()无效

0 投票
1 回答
843 浏览
提问于 2025-04-18 00:32

当我使用 browser.submit() 的时候,出现了这个错误:

  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 541, in submit
    return self.open(self.click(*args, **kwds))
  File "/usr/local/lib/python2.7/dist-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 528, in click
    if not self.viewing_html():
  File "/usr/local/lib/python2.7/dist-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 443, in viewing_html
    raise BrowserStateError("not viewing any document")
mechanize._mechanize.BrowserStateError: not viewing any document

我想到的一个原因是,当我打印 browser.form 的时候,它显示了:

-form-urlencoded
  <TextControl(username)>
  <PasswordControl(password)>
  <HiddenControl(AUTH_STATE=08539313-ae8d-4133-ba21-247a90668ccb) (readonly)>
  <SubmitButtonControl(<None>=) (readonly)>>

可能是因为在 SubmitButtonControl 中显示为 none。有没有人能建议我该如何解决这个问题?在 HTML 中,提交按钮的代码是:

login

我该怎么解决这个问题呢?

1 个回答

0

问题在于你没有收到任何来自 browser.submit() 的响应,因为我认为 SubmitButtonControl 被设置为 None。首先,我会这样做:

通过 br.select_form(nr=WHATEVER) 选择表单,然后使用

for control in br.form.controls:
    print control.name

看看是否能打印出一些标识符。

你的目标是手动给控件分配一个值,可以这样选择控件...

browser.form['controlname']='login'
browser.urlopen(form.click())

如果你无法选择控件,那就试试 browser.urlopen(form.click()),而不是 browser.submit()。

告诉我结果如何。

撰写回答