【问题标题】:Submitting a form in mechanize在机械化中提交表格
【发布时间】: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,所以它想让“我”点击一个按钮来验证我猜
  • 那你为什么只提交一次?如果您遇到错误,请描述它

标签: python forms mechanize


【解决方案1】:

再试一次browser.select_form(nr=0) 而不是req.select_form(nr=0)。 (在提交或点击一个链接之后,新的响应被认为是一个实际的浏览器页面 - 就像在浏览器中一样:))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多