使用请求和Python保持登录状态

时间:2014-06-08 01:00:32

标签: python-requests

我正在尝试使用python和请求登录网站。我很确定我正在正常登录。接下来的部分是我转到另一个页面并尝试从该页面下载文件。但是,为了下载文件,你必须登录。然而,当我去下载文件时,它会将我重定向到登录菜单,说我还没有登录。我卡住了,不知道该怎么办!顺便说一句,网站是grabcad.com,我基本上要做的就是按下这样一个页面上的全部下载按钮 http://grabcad.com/library/apple-ipod-touch-5th-gen-1

payload = {'member[email]': 'username', 'member[password]': 'pass'}
with requests.Session() as s:
    rObject = s.post('http://www.grabcad.com/login', data=payload)
    cookies = rObject.cookies

    rObject = s.get('http://www.grabcad.com' + downloadUrl, cookies=cookies)
    #download URL is something I obtain early and I know it's correct. It's the URL for when you press the downloadAll button

    path = 'C:\\User\\Desktop\\filename
    with open(path, 'wb') as f:
        for chunk in rObject.iter_content():
            f.write(chunk)

2 个答案:

答案 0 :(得分:0)

您如何确保自己正确登录?我会在从会话对象&发送该帖子请求后打印出html。确保它不是登录页面或无效的密码页面。 Cookie会自动在会话对象上发出请求,因此我认为初始登录不成功(http://docs.python-requests.org/en/latest/user/advanced/#session-objects)。

就个人而言,我会使用selenium

我已使用以下代码正确登录了grabcad:

import requests
s = requests.session()
payload = {'member[email]': 'yourEmail', 'member[password]': 'yourPassword'}
p = s.post('https://grabcad.com/login', data=payload) # Ensure you're posting to HTTPS

答案 1 :(得分:0)

所以我采取了完全不同的路线来解决问题,我只使用了机械化,这是一个用于python的自动浏览器工具。

#how to use mechanize to log-in, specifically for grabcad
b.open('http://grabcad.com/login')
b.form = list(b.forms())[1]
control = b.form.find_control("member[email]")
control2 = b.form.find_control("member[password]")
control.value = 'username'
control2.value = 'pass'
b.submit()

#Download Part
path = 'C:\\User\\Desktop\\filename
b.retrieve('https://www.grabcad.com' + downloadUrl, path)
#downloadUrl is obtained earlier and is simply the URL for the download
相关问题