使用python登录网站

时间:2011-11-29 19:51:03

标签: python cookies login

我正在尝试使用Python登录此page

我尝试使用此other Stack Overflow post中描述的步骤,并获得以下代码:

import urllib, urllib2, cookielib

username = 'username'
password = 'password'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://friends.cisv.org/index.cfm', login_data)
resp = opener.open('http://friends.cisv.org/index.cfm?fuseaction=activities.list')
print resp.read()

但是这给了我以下输出:

<SCRIPT LANGUAGE="JavaScript">
    alert('Sorry.  You need to log back in to continue. You will be returned to the home page when you click on OK.');
    document.location.href='index.cfm';
</SCRIPT>

我做错了什么?

2 个答案:

答案 0 :(得分:34)

我建议使用精彩的requests模块。

以下代码将让您登录该网站并在会话期间保留Cookie。

import requests
import sys

EMAIL = ''
PASSWORD = ''

URL = 'http://friends.cisv.org'

def main():
    # Start a session so we can have persistant cookies
    session = requests.session(config={'verbose': sys.stderr})

    # This is the form data that the page sends when logging in
    login_data = {
        'loginemail': EMAIL,
        'loginpswd': PASSWORD,
        'submit': 'login',
    }

    # Authenticate
    r = session.post(URL, data=login_data)

    # Try accessing a page that requires you to be logged in
    r = session.get('http://friends.cisv.org/index.cfm?fuseaction=user.fullprofile')

if __name__ == '__main__':
    main()

答案 1 :(得分:3)

遗憾的是,“登录”一词非常模糊。这里给出的代码显然试图使用HTTP基本身份验证登录。我猜赌这个网站希望你以某种POST格式发送用户名和密码(这就是大多数基于网络的登录表单的工作方式)。在这种情况下,您需要发送正确的POST请求,并保留它发送给您的任何cookie以备将来请求。不幸的是我不知道这会是什么,这取决于网站。您需要弄清楚它通常如何记录用户并尝试遵循该模式。