web-dev-qa-db-fra.com

Connectez-vous au site Web en utilisant python

J'essaye de me connecter à ceci page en utilisant Python.

J'ai essayé d'utiliser les étapes décrites sur ce autre publication Stack Overflow , et j'ai obtenu le code suivant:

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()

mais cela m'a donné la sortie suivante:

<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>

Qu'est-ce que je fais mal?

18
iomartin

Je recommanderais d'utiliser le merveilleux module requests .

Le code ci-dessous vous permettra de vous connecter au site et de conserver les cookies pendant toute la durée de la session.

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()
35
Acorn

Le terme "connexion" est malheureusement très vague. Le code donné ici a évidemment essayé de se connecter en utilisant l'authentification de base HTTP. Je parie que ce site souhaite que vous lui envoyiez un nom d'utilisateur et un mot de passe sous une forme POST (c'est ainsi que fonctionnent la plupart des formulaires de connexion Web). Dans ce cas, vous aurais besoin d'envoyer la bonne demande POST, et de conserver tous les cookies qu'il vous a renvoyés pour de futures demandes. Malheureusement, je ne sais pas ce que ce serait, cela dépend du site. Vous 'll faudra comprendre comment il connecte normalement un utilisateur et essayer de suivre ce modèle.

3
Chris Eberle