我需要使用python登录网站。本网站使用cookies。
我已尝试使用urllib2
和requests
库以及此answer to a related question。
# -*- coding:utf-8 -*-
import cookielib
import urllib
import urllib2
import requests
auth_data = {
'login': '+79269999999',
'password': 'strongpassword',
'source': 'MENU',
}
urls = {
'home': r'https://qiwi.ru',
'login': r'https://qiwi.ru/auth/login.action',
'reports': r'https://qiwi.ru/report/list.action',
}
headers = {
#'content-type': 'application/json',
'User-agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer': 'qiwi.ru',
}
def requests_foo():
with requests.session() as c:
c.get(urls['home'])
request = c.post(urls['login'], data=auth_data, headers=headers)
print request.headers['content-type']
print request.status_code
def urllib_foo():
cj = cookielib.CookieJar()
opener = urllib2.build_opener(
urllib2.HTTPSHandler(),
urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode(auth_data)
request = urllib2.Request(urls['home'], login_data, headers)
opener.open(request)
try:
request = urllib2.Request(urls['login'], login_data, headers)
resp = opener.open(request)
except IOError, e:
print e
else:
print resp.read()
但两个函数都返回 HTTP错误401:未经授权
我应该如何登录网站?
修改
我尝试使用机械化,但没有成功
def is_logged_in(html):
return auth_data['login'] in html
def mechanize_foo():
br = mechanize.Browser()
br.open(urls['home'])
br.select_form(nr=0)
forms = [f for f in br.forms()]
forms[0].action = urls['login']
forms[0]['login'] = auth_data['login']
forms[0]['password'] = auth_data['password']
response = br.submit()
print is_logged_in(response.read())
答案 0 :(得分:0)
我担心浏览网站不是为什么构建请求。如果要模拟Web浏览器,则需要使用名为mechanize
的库。
你可以继续这样做,但一段时间后会变得非常烦人,因为你需要设置一些boilterplate代码。
它是我所知道的唯一可以做到这一点的工具,可能还有其他工具。 Here是该网站的链接,您可以在其中学习如何在Python中使用它。
你可以也使用Selenium。从here下载。
答案 1 :(得分:0)
我使用firefox + firebug来测试登录系统。
主页面连接login.action
两次。
第一次发送login
,password
和source
并获取一些token
的JSON数据。
第二次发送login
,password
,source
和loginToken
(之前收到过)。
因此,与此服务器的连接更复杂。
如果您没有经验,请尝试使用Selenium或Mechanize(参见游戏Brainiac答案)。