如何使用mechanize在嵌套框架/表单中导航并输入内容

1 投票
1 回答
3115 浏览
提问于 2025-04-16 20:06

我想在一个有框架的页面里输入一些文字(比如登录名和密码)。这个页面的结构大概是这样的:

<html xmlns="http://www.w3.org/1999/xhtml">
      <head>Whatever</head>
      <body id="Body">
            <form id="frmM" onsubmit="javascript:return whatever();" action="Login.aspx" method="post">
                  <div id="alldata">
                        <div id="header">
                              <iframe id="Login_SSL" scrolling="no" frameborder="1" src="https://www.whatever.com/User/LoginFrame.aspx?redir=/User/Login.aspx">
                                    <html xmlns="http://www.w3.org/1999/xhtml">
                                          <body onload="refreshParent()">
                                                <form id="form1" action="LoginFrame.aspx?redir=%2fUser%2fLogin.aspx" method="post">
                                                      <div id="loginRow" class="loginMenuRow" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'cmdLogin')">
                                                            <input id="cmdLogin" type="submit" tabindex="3" onclick="aspnetForm.target ='_top';" value="Login" name="cmdLogin">
                                                             <input id="Password" class="textbox" type="password" tabindex="2" name="Password">
                                                             <span id="lblPassword" class="loginMenu">Password:</span>
                                                       </div>
                                                </form>
                                            </body>
                                      </html>
                              </iframe>
                        </div>
                  </div>
            </form>
     </body>
</html>

如果我试着去找那个表单,我发现只有最上面的那个表单可以用。

>>br.select_form("form1")
FormNotFoundError: no form matching name 'form1'
>>[f.attrs['id'] for f in br.forms()]
['frmM']

那我该怎么在这个网站上登录呢?

1 个回答

4

有两种选择:

  • 直接在iframe里面访问网址,然后进行表单登录。

  • 在浏览器中登录这个网站,然后使用像Firebug这样的扩展工具来跟踪发送的数据。接着,复制这个请求来实现自动登录。

撰写回答