【发布时间】:2010-10-18 02:34:54
【问题描述】:
我在提交表单提交结果时遇到问题(我可以提交表单,但无法在第一个页面之后的页面上提交表单)。
我有:
browser = mechanize.Browser()
browser.set_handle_robots(False)
browser.open('https://www.example.com/login')
browser.select_form(nr=0)
browser.form['j_username'] = 'username'
browser.form['j_password'] = 'password'
req = browser.submit()
这行得通,因为print req 导致
`
<body onload="document.forms[0].submit()">
<noscript>
<p>
<strong>Note:</strong> Since your browser does not support JavaScript,
you must press the Continue button once to proceed.
</p>
</noscript>
<form action="https://www.example.com/Shibboleth.sso/SAML2/POST" method="post">
<div>
<input type="hidden" name="RelayState" value="cookie:95ca495c"/>
<input type="hidden" name="SAMLResponse" value="really long encoded value"/>
</div>
<noscript>
<div>
<input type="submit" value="Continue"/>
</div>
</noscript>
</form>
</body>
`
但是当我尝试使用req.select_form(nr=0)时出现错误
我认为这可能与 mechanize 如何从submit() 返回对象类似,并且我的处理方式是错误的。
任何意见或指导将不胜感激:)
【问题讨论】:
-
你不是忘记提交第一个表单,获取登录表单了吗? (
browser.submit()在browser.select_form(nr=0)之后) -
不,我设置req = browser.submit(),就是提交第一个表单,对吧?
-
我以为你在提交第一个重定向表单后得到了真正的登录表单。所以这个页面中还有另一个表单?你的问题类似于我this one,这显然也是你的问题:)
-
第一页有一个表单,当我提交它时,我得到第二页(只有一个提交按钮)。我也希望能够提交第二页,这似乎是我无法得到的。它不喜欢机械化不做javascript,所以它想让“我”点击一个按钮来验证我猜
-
那你为什么只提交一次?如果您遇到错误,请描述它