Advertisement
Guest User

Untitled

a guest
Jun 6th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.13 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. from PIL import Image
  4.  
  5.  
  6.  
  7. class lms:
  8.  
  9.     def __init__(self, username, password):
  10.         self.username = username
  11.         self.password = password
  12.         self.user_info = {}
  13.         self.res = {}
  14.         self.s = requests.Session()
  15.         self.s.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'})
  16.         self.login()
  17.         try:
  18.             self.get_info()
  19.         except:
  20.             self.user_info['курс'] = ''
  21.             self.user_info['группа'] = ''
  22.  
  23.     def login(self):
  24.         url = 'http://lms.mai.ru/'
  25.         self.s.get(url, allow_redirects = True)
  26.  
  27.         url_post = 'http://lms.mai.ru/login/index.php'
  28.         post_data = {'password': self.password,
  29.                      'username': self.username}
  30.         self.s.post(url_post, data = post_data, allow_redirects = True)
  31.         p = self.s.get('http://lms.mai.ru/', allow_redirects = True)
  32.         self.user_info['имя'] = BeautifulSoup(p.text, 'lxml').find('div', class_='logininfo').find('a').text.strip()
  33.  
  34.  
  35.     def get_info(self):
  36.         url = 'http://lms.mai.ru/user/profile.php'
  37.         r = self.s.get(url)
  38.         soup = BeautifulSoup(r.text, 'lxml')
  39.         data = soup.find('div', class_='description').find('p').text.strip().split()
  40.         self.user_info['курс'] = data[1]
  41.         self.user_info['группа'] = data[4]
  42.  
  43.  
  44.     def check_res(self, url):
  45.         r = self.s.get(url)
  46.         soup = BeautifulSoup(r.text, 'lxml')
  47.         try:
  48.             self.attempts = {}
  49.             for a in soup.find('table', class_='generaltable').find('tbody').find_all('tr'):
  50.                 data = [n.text.strip() for n in a.find_all('td')]
  51.                 if len(data) > 3:
  52.                     attempt_info = {'результат': data[3],
  53.                                     'url': a.find_all('td')[4].find('a').get('href')}
  54.                 else:
  55.                     attempt_info = {'результат': '',
  56.                                     'url': a.find_all('td')[2].find('a').get('href')}
  57.                 self.attempts[int(data[0])] = attempt_info
  58.         except:
  59.             pass
  60.  
  61.  
  62.     def get_res(self, url):
  63.         url = url + '&showall=1'
  64.         r = self.s.get(url)
  65.         soup = BeautifulSoup(r.text, 'lxml')
  66.  
  67.         self.issues = []
  68.         for a in soup.find_all('div', class_='que'):
  69.             issue = {}
  70.             issue['балл'] = a.find('div', class_='grade').text.strip().split()[1]
  71.             try:
  72.                 issue['вопрос'] = a.find('div', class_='qtext').text.strip()
  73.             except:
  74.                 continue
  75.             try:
  76.                 issue['url вопроса'] = a.find('div', class_='qtext').find('img').get('src')
  77.             except:
  78.                 pass
  79.  
  80.             try:
  81.                 issue['ответ'] = a.find('span', class_='answer').find('input').get('value')
  82.             except:
  83.                 pass
  84.  
  85.             try:
  86.                 s = ''
  87.                 for k in a.find('table', class_='answer').find('tbody').find_all('tr'):
  88.                     s = s + k.find('td', class_='text').text.strip() + ': '
  89.                     s = s + k.find('td', class_='control').find('option', selected='selected').text.strip() + '\n'
  90.                 issue['ответ'] = s
  91.             except:
  92.                 pass
  93.  
  94.             try:
  95.                 s = ''
  96.                 for k in a.find('div', class_='answer').find_all('input', checked="checked"):
  97.                     s = s + k.next_sibling.text.strip() + '\n'
  98.                 issue['ответ'] = s
  99.                 try:
  100.                     issue['url ответа'] =  k.next_sibling.find('img').get('src')
  101.                 except:
  102.                     pass
  103.             except:
  104.                 pass
  105.  
  106.             self.issues.append(issue)
  107.  
  108.  
  109.     def get_image(self, url):
  110.         r = self.s.get(url, stream = True)
  111.         with open('buf.jpg', 'wb') as f:
  112.             for chunk in r:
  113.                 f.write(chunk)
  114.  
  115.         img = Image.open('buf.jpg')
  116.         img.save('buf.bmp')
  117.  
  118.  
  119.     def __del__(self):
  120.         pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement