Вход на сайт с использованием Python - PullRequest
17 голосов
/ 29 ноября 2011

Я пытаюсь войти на эту страницу , используя Python.

Я попытался использовать шаги, описанные в этом другом сообщении о переполнении стека , и получил следующий код:

import urllib, urllib2, cookielib

username = 'username'
password = 'password'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://friends.cisv.org/index.cfm', login_data)
resp = opener.open('http://friends.cisv.org/index.cfm?fuseaction=activities.list')
print resp.read()

но это дало мне следующий вывод:

<SCRIPT LANGUAGE="JavaScript">
    alert('Sorry.  You need to log back in to continue. You will be returned to the home page when you click on OK.');
    document.location.href='index.cfm';
</SCRIPT>

Что я делаю не так?

Ответы [ 2 ]

35 голосов
/ 30 ноября 2011

Я бы порекомендовал использовать замечательный requests модуль.

Приведенный ниже код позволит вам войти на сайт и сохранить куки в течение всего сеанса.

import requests
import sys

EMAIL = ''
PASSWORD = ''

URL = 'http://friends.cisv.org'

def main():
    # Start a session so we can have persistant cookies
    session = requests.session(config={'verbose': sys.stderr})

    # This is the form data that the page sends when logging in
    login_data = {
        'loginemail': EMAIL,
        'loginpswd': PASSWORD,
        'submit': 'login',
    }

    # Authenticate
    r = session.post(URL, data=login_data)

    # Try accessing a page that requires you to be logged in
    r = session.get('http://friends.cisv.org/index.cfm?fuseaction=user.fullprofile')

if __name__ == '__main__':
    main()
3 голосов
/ 29 ноября 2011

Термин «логин», к сожалению, очень расплывчатый. Приведенный здесь код, очевидно, пытался войти в систему с использованием базовой аутентификации HTTP. Держу пари, что этот сайт хочет, чтобы вы отправили ему имя пользователя и пароль в какой-либо форме POST (именно так работают большинство веб-форм входа в систему). В этом случае вам нужно будет отправить правильный запрос POST и сохранить все файлы cookie, которые он отправил вам, для будущих запросов. К сожалению, я не знаю, что это будет, это зависит от сайта. Вам необходимо выяснить, как обычно пользователь входит в систему, и попытаться следовать этому шаблону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...