使用Python脚本登录网站
问题描述:
我试图登录到一个网站,然后执行一些任务来检索我需要的一些数据。我一直在寻找登录方式的例子,但我没有试过似乎适用于我的案例。我听说“请求”模块是我应该利用的。使用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')
任何帮助将不胜感激。谢谢!
答
您刚刚错过了有效负载中的几个字段,您可以从登录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'
}