我试图编写一个程序,从我的密码保护成绩单中抓取数据并为我分析,因为我的大学成绩簿并不能自动计算平均值。我正在使用"请求"为了登录网站,但使用我当前的代码,似乎没有任何事情发生。我已经尝试了一些我在stackoverflow上找到的不同方法但尚未找到可用的代码。有人可以帮我看一下吗?感谢。
P.S。当我手动登录这个网站时,它看起来要带我去某种"授权"短暂的URL,然后它转发到登录后的主页。
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
class MyAdapter(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1)
import requests
url = 'http://learn.ou.edu/d2l/m/login'
s = requests.Session()
s.mount('https://', MyAdapter())
payload = {
'username': 'MYUSERNAME',
'password': 'MYPASSWORD!'
}
r = s.get(url, auth=('MYUSERNAME', 'MYPASSWORD!'))
print r.status_code
print r.content
答案 0 :(得分:0)
您填写的表单位于http://learn.ou.edu/d2l/m/login,但表单提交到http://learn.ou.edu/d2l/lp/auth/login/login.d2l - 您需要模拟提交该表单。我会确保我在那里有相同的信息。
删除我看到的表格:
<form method="post" enctype="application/x-www-form-urlencoded" action="/d2l/lp/auth/login/login.d2l" onsubmit="return false;">
<input type="hidden" name="d2l_referrer" />
<input type="hidden" name="target" value="/d2l/lp/ouHome/loginHome.d2l?isMobile=1" />
<input type="hidden" name="loginPath" value="/d2l/m/login" />
<input type="text" name="userName" />
<input type="password" name="password" />
</form>
正如@ABri已经指出的那样,在提交之前使用一些j来搞乱它。当我提交表单(没有正确的用户名和密码)时,看起来好像没有更改,所以我尝试以最简单的形式点击表单。
import requests
s = requests.Session()
payload = {
'd2l_referrer': '',
'target': '/d2l/lp/ouHome/loginHome.d2l?isMobile=1',
'loginPath': '/d2l/m/login',
'userName': 'MYUSERNAME',
'password': 'MYPASSWORD!'
}
r = s.POST('http://learn.ou.edu/d2l/lp/auth/login/login.d2l', data=payload)
print r.status_code
print r.content
如果没有un / pw,我就不能再进一步尝试了,看看你是如何继续下去的。