Как с помощью python производить логин на ресурсном сайте университета?

Нам на одном предмете показали как создать web-crawler на питоне. А я хочу создать оповещалку о новостях moodle. Не знаю или в России употребляется такое, но вот в моем барселонском университете, да. Я пытаюсь скачать html сайта, найти секцию где учителя выставляют оценки, материалы pdf… и при обнаружании чего то нового, оповещать. Просто и элементарно. Но заноза в том что сайт требует authentification. На первый взгляд лишь submit form по протоколу http. Но на самом деле производится аутентификация через это место по https.

<form action="https://auten.ub.edu/uauten.pl" method="post" name="login" id="login">



Как залогинится и скачать страницу курса campusvirtual.ub.edu/course/view.php?id=34437
  • Вопрос задан
  • 8044 просмотра
Решения вопроса 1
mik_os
@mik_os
import urllib2
from urllib import urlencode
from cookielib import CookieJar

cookie_processor = urllib2.HTTPCookieProcessor(CookieJar())
opener = urllib2.build_opener(cookie_processor)

auth_data = {
# см. в firebug/еще где-то
}
opener.open('https://auten.ub.edu/uauten.pl', urlencode(auth_data))


и далее используем этот же opener для навигации по сайту.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@1099511627776
Пишу все что интересно и на всем на чем интересно
Ну наверное надо начать отсуда: docs.python.org/library/httplib.html
а конкретно с примера
>>> import httplib, urllib
>>> params = urllib.urlencode({'@number': 12524, 'type': 'issue', 'action': 'show'})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
... "Accept": "text/plain"}
>>> conn = httplib.HTTPConnection("bugs.python.org")
>>> conn.request("POST", "", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
302 Found
>>> data = response.read()
>>> data
'Redirecting to http://bugs.python.org/issue12524'
>>> conn.close()


В качестве params — передать логин\пароль и др. параметры (можно подсмотреть в Firebug-е) а дальше посмотреть на возврат на предмет cookies если вдруг там они используются для организации сесии, а дальше пихать их (куки) в каждый запрос к сайту
Ответ написан
Комментировать
mik_os
@mik_os
Посмотрите вы в firebug наконец. Там еще пачка input'ов,
Ответ написан
Комментировать
vitom
@vitom Автор вопроса
О! ура получилось. Спасибо за помощь и терпение. Я не знал что надо все input's посылать
Ответ написан
Комментировать
@mgSergio
Вместо urllib в такой задаче гораздо приятней использовать питонскую нестандартную библиотеку requests.
Ответ написан
vitom
@vitom Автор вопроса
А что я сдесь упустил?
cookie_processor = urllib2.HTTPCookieProcessor(CookieJar())
opener = urllib2.build_opener(cookie_processor)
auth_data = {
    'login': '*****',
    'password': '******'

}
 
opener.open('https://feinaactiva.gencat.cat/web/guest/candidatelogin?p_p_id=loginCandidate&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_loginCandidate_struts_action=%2FloginCandidate%2Fauthentication', urlencode(auth_data))
req = opener.open('https://feinaactiva.gencat.cat/group/candidate/jobslocator?p_p_id=jobsLocator_WAR_psocwebjobslocator&p_p_lifecycle=1&p_p_state=maximized&p_p_mode=view&_jobsLocator_WAR_psocwebjobslocator_struts_action=%2Fjobslocator%2FjobsLocator&saveLastPath=0&_jobsLocator_WAR_psocwebjobslocator_forwardPath=search')
html = req.read()


Возвращает логин страницу. Вроде больше инпутов нет. А в чем проблема?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы