使用Python脚本

时间:2017-02-21 16:05:03

标签: python login web python-requests

我正在尝试登录网站,然后执行一些任务来检索我需要的一些数据。我一直在寻找登录方式的例子,但我尝试的任何东西似乎都适用于我的情况。我听说“请求”模块是我应该利用的东西。

以下是登录页面的表单部分(https://verification.nws.noaa.gov/services/public/login.aspx):

<form name="PageForm" method="POST" action="/services/public/login.aspx" id="PageForm">
.
.
(a little ways down)
.
.
     <p>
       <label for="Username">Username:</label>
       <br>
       <input name="UsernameBox" type="text" id="UsernameBox">
     </p>
     <p>
       <label for="Password">Password:</label>
       <br>
     </p>
     <p>
       <input type="submit" name="LoginBtn" value="Login" onclick="javascript: WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("LoginBtn", "", true, "", "", false, false))" language="javascript" id="LoginBtn" class="btn">
     </p>
     .
     .
</form>

到目前为止,这是我对Python代码所拥有的内容,它似乎无法登录或工作:

import requests

# Log into the NWS Performance Management site to get Storm Data.
url = 'https://verification.nws.noaa.gov/services/public/login.aspx?'
values = {'UsernameBox': 'myuser',
          'PasswordBox': 'mypass',
          'LoginBtn': 'Login'}

session = requests.session()
r = session.post(url, data=values)

# Try opening private webpage when logged in.
r = session.get('https://verification.nws.noaa.gov/stormdat/downloads/csv/index.aspx#top')

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您错过了有效负载中的一些字段,您可以通过登录page获取这些字段。

<body><form name="PageForm" method="POST" action="/services/public/login.aspx" id="PageForm">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUIMzc4Mzk0MzlkZF/afEu7JIuhzEtWu2QqdxDm88Un" />

所以,你的价值应该是这样的

values = { 
    '__EVENTTARGET': '',
    '__EVENTARGUMENT': '',
    '__VIEWSTATE'   'Get this value from the login page',
    '__VIEWSTATEGENERATOR'  'Get this value from the login page',
    'UsernameBox'   'myuser',
    'PasswordBox'   'mypass',
    'LoginBtn'  'Login'
}