web-dev-qa-db-fra.com

Comment puis-je me connecter à un site Web avec Python?

Comment puis-je le faire? J'essayais d'entrer un lien spécifique (avec urllib), mais pour le faire, je dois me connecter.

J'ai cette source sur le site:

<form id="login-form" action="auth/login" method="post">
    <div>
    <!--label for="rememberme">Remember me</label><input type="checkbox" class="remember" checked="checked" name="remember me" /-->
    <label for="email" id="email-label" class="no-js">Email</label>
    <input id="email-email" type="text" name="handle" value="" autocomplete="off" />
    <label for="combination" id="combo-label" class="no-js">Combination</label>
    <input id="password-clear" type="text" value="Combination" autocomplete="off" />
    <input id="password-password" type="password" name="password" value="" autocomplete="off" />
    <input id="sumbitLogin" class="signin" type="submit" value="Sign In" />

Est-ce possible?

75
Bruno 'Shady'

Peut-être que vous souhaitez utiliser twill (il est basé sur mécaniser ). Il est assez facile à utiliser et devrait pouvoir faire ce que vous voulez.

Cela ressemblera à ceci:

from twill.commands import *
go('http://mysite.org')

fv("1", "email-email", "blabla.com")
fv("1", "password-clear", "testpass")

submit('0')

Vous pouvez utiliser showforms() pour répertorier tous les formulaires une fois que vous avez utilisé go(...) pour accéder au site que vous souhaitez connecter. Essayez-le simplement à partir de l’interprète python.

61
sloth

Laissez-moi essayer de simplifier les choses, supposons que l’URL du site est www.example.com et que vous devez vous inscrire en indiquant votre nom d’utilisateur et votre mot de passe. Nous allons donc à la page de connexion, par exemple http: //www.example .com/login.php maintenant et visualisez son code source et recherchez l'URL de l'action dans la balise de formulaire, quelque chose comme

 <form name="loginform" method="post" action="userinfo.php">

maintenant, prenez userinfo.php pour créer une URL absolue qui sera ' http://example.com/userinfo.php ', exécutez maintenant un simple python

import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
          'password': 'pass'}

r = requests.post(url, data=values)
print r.content

J'espère que cela aidera quelqu'un quelque part un jour.

41
Tarun Venugopal Nair

En règle générale, vous aurez besoin de cookies pour vous connecter à un site, ce qui signifie cookielib, urllib et urllib2. Voici un cours que j'ai écrit lorsque je jouais à des jeux Web sur Facebook:

import cookielib
import urllib
import urllib2

# set these to whatever your fb account is
fb_username = "[email protected]"
fb_password = "secretpassword"

class WebGamePlayer(object):

    def __init__(self, login, password):
        """ Start up... """
        self.login = login
        self.password = password

        self.cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener(
            urllib2.HTTPRedirectHandler(),
            urllib2.HTTPHandler(debuglevel=0),
            urllib2.HTTPSHandler(debuglevel=0),
            urllib2.HTTPCookieProcessor(self.cj)
        )
        self.opener.addheaders = [
            ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; '
                           'Windows NT 5.2; .NET CLR 1.1.4322)'))
        ]

        # need this twice - once to set cookies, once to log in...
        self.loginToFacebook()
        self.loginToFacebook()

    def loginToFacebook(self):
        """
        Handle login. This should populate our cookie jar.
        """
        login_data = urllib.urlencode({
            'email' : self.login,
            'pass' : self.password,
        })
        response = self.opener.open("https://login.facebook.com/login.php", login_data)
        return ''.join(response.readlines())

Vous n’avez pas nécessairement besoin des gestionnaires HTTPS ou de redirection, mais ils ne font pas mal, et cela rend l’ouvre-porte beaucoup plus robuste. Vous n'avez peut-être pas besoin de cookies, mais il est difficile de le distinguer du formulaire que vous avez posté. Je soupçonne que vous pourriez le faire, uniquement à partir de l'entrée "Souvenez-vous de moi" qui a été commentée.

24
Anthony Briggs
import cookielib
import urllib
import urllib2

url = 'http://www.someserver.com/auth/login'
values = {'email-email' : '[email protected]',
          'password-clear' : 'Combination',
          'password-password' : 'mypassword' }

data = urllib.urlencode(values)
cookies = cookielib.CookieJar()

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(),
    urllib2.HTTPHandler(debuglevel=0),
    urllib2.HTTPSHandler(debuglevel=0),
    urllib2.HTTPCookieProcessor(cookies))

response = opener.open(url, data)
the_page = response.read()
http_headers = response.info()
# The login cookies should be contained in the cookies variable

Pour plus d'informations, visitez: https://docs.python.org/2/library/urllib2.html

18
blokeley

Automatisation de page Web? Certainement "webbot"

webbot fonctionne même avec des pages Web dont les identifiants et les noms de classe changent de manière dynamique et qui ont plus de méthodes et de fonctionnalités que Selenium ou mécanize.

Voici un extrait :)

from webbot import Browser 
web = Browser()
web.go_to('google.com') 
web.click('Sign in')
web.type('[email protected]' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^

Les documents sont également assez simples et faciles à utiliser: https://webbot.readthedocs.io

9
Natesh bhat

Les sites Web en général peuvent vérifier les autorisations de différentes manières, mais celle que vous ciblez semble vous faciliter la tâche.

Tout ce dont vous avez besoin est de POST au auth/login URL un blob de formulaire codé avec les différents champs que vous voyez ici (oubliez les étiquettes for, elles sont décorées pour les visiteurs humains). handle=whatever&password-clear=pwd et ainsi de suite, tant que vous connaissez les valeurs pour le descripteur (email AKA) et le mot de passe, vous devriez vous débrouiller.

Je suppose que POST vous redirigera vers une page "vous êtes connecté avec succès" avec un Set-Cookie en-tête validant votre session (assurez-vous de sauvegarder ce cookie et de le renvoyer pour une interaction ultérieure le long de la session!).

6
Alex Martelli

Pour les choses HTTP, le choix actuel devrait être: Requests- HTTP for Humans

4
Andrew_1510