Как я могу сделать это? Я пытался ввести некоторую указанную ссылку (с urllib), но сделать это, я должен войти в систему.
У меня есть этот источник от сайта:
<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" />
Действительно ли это возможно?
Возможно, вы захотите использовать саржевое полотно (оно основано на Mechanize ). Он довольно прост в использовании и должен уметь делать то, что вы хотите.
Это будет выглядеть следующим образом:
from twill.commands import *
go('http://mysite.org')
fv("1", "email-email", "blabla.com")
fv("1", "password-clear", "testpass")
submit('0')
Вы можете использовать showforms ()
, чтобы перечислить все формы, когда вы использовали go (...)
для перехода на сайт, который вы хочу войти. Просто попробуйте это в интерпретаторе Python.
Как правило, для входа на сайт вам понадобятся cookies, что означает cookielib, urllib и urllib2. Вот класс, который я написал, когда играл в веб-игры на Facebook:
import cookielib
import urllib
import urllib2
# set these to whatever your fb account is
fb_username = "your@facebook.login"
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())
Вам не обязательно понадобятся обработчики HTTPS или Redirect, но они не помешают, и это делает открывалку гораздо более надежной. Возможно, вам также не понадобятся файлы cookie, но трудно сказать об этом только по форме, которую вы разместили. Я подозреваю, что нужны, только по закомментированному вводу "Запомнить меня".
Веб-сайты вообще могут проверять авторизацию разными способами, но тот, на который вы ориентируетесь, похоже, делает это достаточно просто.
Все, что вам нужно, это POST
на auth/login
URL закодированный в форме блоб с различными полями, которые вы там видите (забудьте о ярлыках for
, они украшают посетителей-людей). handle=whatever&password-clear=pwd
и так далее, пока вы знаете значения для handle (AKA email) и пароля, вы должны быть в порядке.
Предположительно, этот POST перенаправит вас на страницу "Вы успешно вошли" с заголовком Set-Cookie
, подтверждающим вашу сессию (не забудьте сохранить этот cookie и отправить его обратно при дальнейшем взаимодействии в течение сессии!)
import cookielib
import urllib
import urllib2
url = 'http://www.someserver.com/auth/login'
values = {'email-email' : 'john@example.com',
'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
Для получения дополнительной информации посетите: https://docs.python.org/2/library/urllib2.html