Главная

Скрипт для авторизации и сохранения страниц Joomla 1.5

Предисловие:

Сайт образовательного учреждения развёрнут на CMS Joomla 1.5.

Страница с расписанием доступна только для авторизованных пользователей.

Расписание каждый день обновляется.

Появилось желание автоматизировать процесс получения расписания по расписанию с дальнейшей рассылкой его студентам через vk.com

Итак, в этой статье приведу код скрипта на языке python с краткими комментариями. Данный скрипт проходит авторизацию на сайте и сохраняет нужную нам страницу в html файл, с которым дальше мы можем делать всё что угодно.

В скрипте указаны реальные параметры, т. к. никакой коммерческой тайны они не представляют.

# -*- coding: utf-8
   
  #импорт необходимых библиотек
  import urllib
  import urllib2
  import cookielib
  import re
  import string
   
  host = 'http://gbou-bpt.ru/'
  user = 'student'
  pasw = '2011'
   
  #подготовка опенера с функцией обработки кукисов
  CookieJar = cookielib.CookieJar()
  opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar))
   
  #запрос страницы авторизации
  conn = urllib2.Request(host + '/component/user/')
  page = opener.open(conn).read()
   
  #получаем скрытые поля
  params = re.findall(r'name="([^"]+)" value="([^"]+)"', page)
   
  #Предварительная подготовка параметров для отправки POST-запроса
  params.append( ('username', user) )
  params.append( ('passwd', pasw) )
  params.append( ('remember', 'yes') )
  params.append( ('Submit', 'Войти') )
  params.append( ('option', 'com_user') )
  params.append( ('task', 'login') )
  buf = {}
  ident = ''
  for param in params:
  buf[param[0]] = param[1]
   
  # Отправляем подготовленные параметры
  post = urllib.urlencode(buf)
  conn = urllib2.Request(host + 'component/user/', post)
  page = opener.open(conn).read()
  #print(page)
   
  # Считываем значение поля return, выполняющего роль тока
  params = re.findall(r'name="([^"]+)" value="([^"]+)"', page)
  buf = {}
  buf[params[2][0]] = params[2][1]
  #print(buf)
   
  # Запрашиваем страницу с расписанием, сообщая токен
  post = urllib.urlencode(buf)
  conn = urllib2.Request(host + 'uheba/raspisanie/5-raspisanie.html', post)
  page = opener.open(conn).read()
  #print(page)
   
  #Сохраняем файл
  with open("requests_results.html", "w") as f:
  f.write(page)

 

 

Для решения задачи перерыл относительно большой объём информации.

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