Python POST表单登录网站

时间:2014-02-26 03:32:36

标签: python post python-requests

我正在尝试使用工作站点在Python中使用此登录表单,因此我可以对站点数据进行一些抓取和诸如此类的操作。

现在,当我打印r.text的内容时,它与登录页面的HTML相同。该网站没有取得任何进展。

值得一提的是,我对此处使用请求无动于衷。我只是发现urllib的方法很难看,而且我在这个网站上找到的大部分信息都倾向于使用Requests进行上述任务。

以下是我正在使用的信息。

enter image description here

<form action="login.cgi" autocomplete="off" id="frmLogin_4" method="post" name="frmLogin" onsubmit="return Login(1)">
  <input id="tz_offset_5" name="tz_offset" type="hidden">
  <table border="0" cellpadding="2" cellspacing="0" id="table_LoginPage_3">
    <tr>
      <td valign="top">
        <input id="realm_16" name="realm" type="hidden" value="All Users">

        <table border="0" cellpadding="2" cellspacing="0" id="table_LoginPage_6">
          <tr>
            <td>E-Mail Address</td>

            <td>&nbsp;</td>

            <td><input id="username_5" name="username" size="20" type="text"></td>
          </tr>

          <tr>
            <td>Password</td>

            <td>&nbsp;</td>

            <td><input id="password_5" name="password" size="20" type="password"></td>
          </tr>

          <tr>
            <td></td>
          </tr>

          <tr>
            <td colspan="3">&nbsp;</td>
          </tr>

          <tr>
            <td>&nbsp;</td>

            <td>&nbsp;</td>

            <td><input id="btnSubmit_6" name="btnSubmit" type="submit" value="Sign In">&nbsp;</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</form>

下面是我正在使用的Python。

import requests

url = 'https://<scrubbed>/dana-na/auth/url_default/welcome.cgi'

payload = {
    'username':'<scrubbed>',
    'tz_offset':'-480',
    'realm':'All Users',
    'password':'<scrubbed>',
    'btnSubmit':'Sign In'
}    

session = requests.session()    
r = requests.post(url, payload)
print r.text

1 个答案:

答案 0 :(得分:3)

使用data关键字。来自documentation

  

通常,您希望发送一些表单编码数据 - 非常类似于HTML   形成。为此,只需将字典传递给data参数即可。您的   数据字典将在请求时自动进行表单编码   是:

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text 

此外,您发布的HTML表明该表单实际上会转到login.cgi而不是welcome.cgi。您也可以在屏幕截图中看到这一点。

使用:

url = 'https://<scrubbed>/dana-na/auth/url_default/login.cgi'