puede - ¿Cómo puedo iniciar sesión en un sitio web con Python?
puedo hacer una pagina web con python (7)
¿Automatización de página web? Use "WEBBOT"
webbot
incluso trabaja con páginas web que cambian dinámicamente el nombre y la clase, y tiene más métodos y funciones que el selenio o el mecanizado.
Aquí hay un fragmento :)
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 ^_^
¿Cómo puedo hacerlo? Estaba tratando de ingresar a un enlace específico (con urllib), pero para hacerlo, necesito iniciar sesión.
Tengo esta fuente del sitio:
<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" />
es posible?
Los sitios web en general pueden verificar la autorización de muchas maneras diferentes, pero la que está orientando parece hacer que sea razonablemente fácil para usted.
Todo lo que necesita es POST
a la URL de auth/login
un blob codificado en forma con los diversos campos que ve allí (olvide las etiquetas for
, son decoración para visitantes humanos). handle=whatever&password-clear=pwd
y así sucesivamente, siempre que sepa los valores para el identificador (AKA) y la contraseña, estará bien.
Es de suponer que POST lo redirigirá a una página de "ha iniciado sesión exitosamente" con un encabezado de Set-Cookie
valida su sesión (¡asegúrese de guardar esa cookie y enviarla de nuevo a la interacción a lo largo de la sesión!).
Normalmente necesitará cookies para iniciar sesión en un sitio, lo que significa cookielib, urllib y urllib2. Aquí hay una clase que escribí cuando estaba jugando juegos web de 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())
No necesitarás necesariamente los manejadores HTTPS o Redirect, pero no duelen, y hace que el abridor sea mucho más robusto. También es posible que no necesite cookies, pero es difícil decirlo solo desde el formulario que ha publicado. Sospecho que podrías, puramente por la entrada "Recordarme" que ha sido comentada.
Para cosas HTTP, la opción actual debería ser: Solicitudes : HTTP para humanos
Permítanme intentar simplificarlo, supongamos que la URL del sitio es www.example.com y debe registrarse rellenando el nombre de usuario y la contraseña, para ir a la página de inicio de sesión, por ejemplo, http://www.example.com/login.php ahora y ver su código fuente y buscar la URL de acción estará en forma de etiqueta algo así como
<form name="loginform" method="post" action="userinfo.php">
ahora toma userinfo.php para crear una URL absoluta que será '' http://example.com/userinfo.php '', ahora ejecuta una secuencia de comandos python simple
import requests
url = ''http://example.com/userinfo.php''
values = {''username'': ''user'',
''password'': ''pass''}
r = requests.post(url, data=values)
print r.content
Espero que esto ayude a alguien en algún lugar algún día.
Tal vez quieras usar twill (está basado en mechanize ). Es bastante fácil de usar y debería poder hacer lo que quieras.
Se verá así:
from twill.commands import *
go(''http://mysite.org'')
fv("1", "email-email", "blabla.com")
fv("1", "password-clear", "testpass")
submit(''0'')
Puede usar showforms()
para listar todos los formularios una vez que haya usado go(...)
para navegar al sitio que desea iniciar sesión. Inténtalo con el intérprete de Python.
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
Para obtener más información, visite: https://docs.python.org/2/library/urllib2.html