Ответ 1
Я предварю это, сказав, что я не занимался таким входом в течение некоторого времени, поэтому я мог бы пропустить некоторые из более "приемлемых" способов сделать это.
Я не уверен, что это то, что вам нужно, но без библиотеки типа mechanize
или более надежной структуры, такой как selenium
, в базовом случае вы просто смотрите на форму и inputs
. Например, глядя на www.reddit.com
, а затем просматривая исходную страницу рендеринга, вы найдете эту форму:
<form method="post" action="https://ssl.reddit.com/post/login" id="login_login-main"
class="login-form login-form-side">
<input type="hidden" name="op" value="login-main" />
<input name="user" placeholder="username" type="text" maxlength="20" tabindex="1" />
<input name="passwd" placeholder="password" type="password" tabindex="1" />
<div class="status"></div>
<div id="remember-me">
<input type="checkbox" name="rem" id="rem-login-main" tabindex="1" />
<label for="rem-login-main">remember me</label>
<a class="recover-password" href="/password">reset password</a>
</div>
<div class="submit">
<button class="btn" type="submit" tabindex="1">login</button>
</div>
<div class="clear"></div>
</form>
Здесь мы видим несколько input
- op
, user
, passwd
и rem
. Также обратите внимание на параметр action
- это URL-адрес, на который будет отправляться форма, и поэтому станет нашей целью. Итак, теперь последний шаг заключается в том, чтобы упаковать параметры в полезную нагрузку и отправить его как запрос POST
на URL action
. Также ниже мы создаем новый opener
, добавляем возможность обрабатывать файлы cookie и добавлять заголовки также, предоставляя нам немного более надежный открыватель для выполнения запросов):
import cookielib
import urllib
import urllib2
# Store the cookies and create an opener that will hold them
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# Add our headers
opener.addheaders = [('User-agent', 'RedditTesting')]
# Install our opener (note that this changes the global opener to the one
# we just made, but you can also just call opener.open() if you want)
urllib2.install_opener(opener)
# The action/ target from the form
authentication_url = 'https://ssl.reddit.com/post/login'
# Input parameters we are going to send
payload = {
'op': 'login-main',
'user': '<username>',
'passwd': '<password>'
}
# Use urllib to encode the payload
data = urllib.urlencode(payload)
# Build our Request object (supplying 'data' makes it a POST)
req = urllib2.Request(authentication_url, data)
# Make the request and read the response
resp = urllib2.urlopen(req)
contents = resp.read()
Обратите внимание, что это может усложниться - вы также можете сделать это с помощью GMail, но вам нужно выставлять параметры, которые будут меняться каждый раз (например, параметр GALX
). Опять же, не уверен, что это то, что вы хотели, но надеюсь, что это поможет.