Python: Как войти на страницу и просмотреть получившуюся страницу в браузере? - PullRequest
3 голосов
/ 19 марта 2009

Я довольно долго гуглял и не могу заставить это работать. Во многих моих поисках я обнаружил похожие проблемы, но все они, похоже, связаны с захватом / хранением файлов cookie. Я думаю, что настроил это правильно, но когда я пытаюсь открыть «скрытую» страницу, он продолжает возвращать меня на страницу входа, говоря, что мой сеанс истек.

import urllib, urllib2, cookielib, webbrowser

username = 'userhere'
password = 'passwordhere'
url = 'http://example.com'
webbrowser.open(url, new=1, autoraise=1)
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://example.com', login_data)
resp = opener.open('http://example.com/afterlogin')
print resp
webbrowser.open(url, new=1, autoraise=1)

Ответы [ 3 ]

4 голосов
/ 20 марта 2009

Прежде всего, при выполнении аутентификации на основе файлов cookie вам необходимо иметь CookieJar для хранения ваших файлов cookie, во многом так же, как ваш браузер хранит файлы cookie в месте, где он может найти их снова.

После открытия страницы входа в систему через python и сохранения файла cookie из успешного входа в систему следует использовать MozillaCookieJar, чтобы передать файлы, созданные в Python, в формат, который может анализировать браузер Firefox. Firefox 3.x больше не использует формат файлов cookie, созданный MozillaCookieJar, и я не смог найти жизнеспособных альтернатив.

Если все, что вам нужно сделать, - это получить конкретные (заранее отформатированные в известном формате) данные, то я предлагаю вам сохранить все ваши HTTP-взаимодействия внутри Python. Это намного проще, и вам не нужно полагаться на доступность определенных браузеров. Если абсолютно необходимо показать материал в браузере, вы можете визуализировать так называемую «скрытую» страницу через urllib2 (которая, кстати, очень хорошо интегрируется с cookielib), сохранить HTML-файл во временный файл и передать его в webbrowser.open, который затем отобразит эту конкретную страницу. Дальнейшие перенаправления невозможны.

1 голос
/ 26 марта 2009

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

0 голосов
/ 28 марта 2009

Предоставленный код звонков:

opener.open('http://example.com', login_data)

но выбрасывает ответ. Я хотел бы посмотреть на этот ответ, чтобы увидеть, если он говорит «Неверный пароль» или «Я только принимаю IE» или подобное.

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