2017-02-21 240 views
0

我试图登录到一个网站,然后执行一些任务来检索我需要的一些数据。我一直在寻找登录方式的例子,但我没有试过似乎适用于我的案例。我听说“请求”模块是我应该利用的。使用Python脚本登录网站

这里是登录页面的形式部分(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') 

任何帮助将不胜感激。谢谢!

回答

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' 
}