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?
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.
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.
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.
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
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
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!).
Pour les choses HTTP, le choix actuel devrait être: Requests- HTTP for Humans