我正在尝试登录网站,然后执行一些任务来检索我需要的一些数据。我一直在寻找登录方式的例子,但我尝试的任何东西似乎都适用于我的情况。我听说“请求”模块是我应该利用的东西。
以下是登录页面的表单部分(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 :(得分: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'
}