2017-02-21 185 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' 
}