mirror of
https://github.com/house-of-vanity/fesmoo_perdoliq.git
synced 2025-07-07 22:04:08 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
decd96fe5c | |||
a5ac105177 | |||
4b0a8a7675 | |||
2ece55bd6f |
32
bot_keys.py
32
bot_keys.py
@ -14,6 +14,12 @@ from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
|
|||||||
from telegram.error import NetworkError, Unauthorized
|
from telegram.error import NetworkError, Unauthorized
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
try:
|
try:
|
||||||
@ -116,13 +122,19 @@ def perdoliq(username, password, subj, test, acc, submit=True, is_delayed=False)
|
|||||||
return "Exception: " + str(e)
|
return "Exception: " + str(e)
|
||||||
|
|
||||||
def list_test(username, password):
|
def list_test(username, password):
|
||||||
if username in cached_tests:
|
now = datetime.datetime.now()
|
||||||
return cached_tests[username]
|
cache_name = f"{now.month}_{now.day}_{now.hour}"
|
||||||
|
if cache_name in cached_tests:
|
||||||
|
cache_username = cached_tests[cache_name].get(username, None)
|
||||||
|
if cache_username:
|
||||||
|
return cache_username
|
||||||
try:
|
try:
|
||||||
app = Perdoliq(username, password)
|
app = Perdoliq(username, password)
|
||||||
app.auth()
|
app.auth()
|
||||||
tests = app.get_tests()
|
tests = app.get_tests()
|
||||||
cached_tests[username] = tests
|
if not cached_tests.get(cache_name, None):
|
||||||
|
cached_tests[cache_name] = dict()
|
||||||
|
cached_tests[cache_name][username] = tests
|
||||||
return tests
|
return tests
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return "Exception: " + str(e)
|
return "Exception: " + str(e)
|
||||||
@ -132,7 +144,6 @@ def list_(update, context):
|
|||||||
query = update.callback_query
|
query = update.callback_query
|
||||||
user_id = update.effective_user.id
|
user_id = update.effective_user.id
|
||||||
tests = list_test(auth[user_id]["login"], auth[user_id]["passwd"])
|
tests = list_test(auth[user_id]["login"], auth[user_id]["passwd"])
|
||||||
print(tests)
|
|
||||||
keyboard = list()
|
keyboard = list()
|
||||||
i = 1
|
i = 1
|
||||||
for subj in tests:
|
for subj in tests:
|
||||||
@ -140,7 +151,7 @@ def list_(update, context):
|
|||||||
#msg = msg + (" [%s] %s (%s tests)\n" % (i, subj, tests_count))
|
#msg = msg + (" [%s] %s (%s tests)\n" % (i, subj, tests_count))
|
||||||
keyboard.append([InlineKeyboardButton(f"{i}. {subj}", callback_data=f"s_{i}")])
|
keyboard.append([InlineKeyboardButton(f"{i}. {subj}", callback_data=f"s_{i}")])
|
||||||
i += 1
|
i += 1
|
||||||
keyboard.append([InlineKeyboardButton("Close", callback_data="subj")])
|
keyboard.append([InlineKeyboardButton("Закрыть", callback_data=f"close")])
|
||||||
reply_markup = InlineKeyboardMarkup(keyboard)
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||||
update.message.reply_text('Чо будем хакать?', reply_markup=reply_markup)
|
update.message.reply_text('Чо будем хакать?', reply_markup=reply_markup)
|
||||||
|
|
||||||
@ -182,10 +193,12 @@ def button_handler(update, context):
|
|||||||
if query.data.split('_')[0] == 't': # test
|
if query.data.split('_')[0] == 't': # test
|
||||||
data = query.data
|
data = query.data
|
||||||
keyboard = [[], []]
|
keyboard = [[], []]
|
||||||
for p in range(0, 51, 5):
|
in_a_row = 4
|
||||||
keyboard[0].append(InlineKeyboardButton(f"{p}", callback_data=f"p_{p}_{data}"))
|
for p in range(0, 101, 5):
|
||||||
for p in range(50, 101, 5):
|
if len(keyboard[-1]) == in_a_row:
|
||||||
keyboard[1].append(InlineKeyboardButton(f"{p}", callback_data=f"p_{p}_{data}"))
|
keyboard.append(list())
|
||||||
|
keyboard[-1].append(InlineKeyboardButton(f"{p}", callback_data=f"p_{p}_{data}"))
|
||||||
|
|
||||||
keyboard.append([InlineKeyboardButton("Закрыть", callback_data=f"close")])
|
keyboard.append([InlineKeyboardButton("Закрыть", callback_data=f"close")])
|
||||||
reply_markup = InlineKeyboardMarkup(keyboard)
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||||
query.edit_message_text("Ok, а какая точность?", reply_markup=reply_markup)
|
query.edit_message_text("Ok, а какая точность?", reply_markup=reply_markup)
|
||||||
@ -234,6 +247,7 @@ def button_handler(update, context):
|
|||||||
precision,
|
precision,
|
||||||
submit,
|
submit,
|
||||||
delay)
|
delay)
|
||||||
|
query.edit_message_text("Так! Я все решил.")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
|
38
main.py
38
main.py
@ -16,29 +16,45 @@ class Perdoliq:
|
|||||||
self.SessionId = ''
|
self.SessionId = ''
|
||||||
self.name = ''
|
self.name = ''
|
||||||
self.subjects = {}
|
self.subjects = {}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_secrets(response, input_id):
|
||||||
|
soup = BeautifulSoup(response.text, "html.parser")
|
||||||
|
try:
|
||||||
|
secret = soup.find(id=input_id).get('value', '')
|
||||||
|
except AttributeError:
|
||||||
|
secret = ''
|
||||||
|
logging.debug(f'*** Found {input_id}: {secret}')
|
||||||
|
return secret
|
||||||
|
|
||||||
# make auth
|
# make auth
|
||||||
def auth(self):
|
def auth(self):
|
||||||
r = requests.get(settings.fesmu_root_url)
|
r = requests.get(settings.fesmu_root_url)
|
||||||
for c in r.cookies:
|
self.SessionId = r.cookies.get('ASP.NET_SessionId', None)
|
||||||
if c.name == 'ASP.NET_SessionId':
|
logging.info('ASP.NET_SessionId for curtain session is %s',
|
||||||
self.SessionId = c.value
|
self.SessionId)
|
||||||
logging.info('ASP.NET_SessionId for curtain session is %s',
|
|
||||||
c.value)
|
|
||||||
|
|
||||||
|
data={
|
||||||
|
'ctl00$MainContent$UserText': self.username,
|
||||||
|
'ctl00$MainContent$PassText': self.password,
|
||||||
|
'ctl00_MainContent_ToolkitScriptManager1_HiddenField': '',
|
||||||
|
'ctl00$MainContent$ASPxButton1': '',
|
||||||
|
'__EVENTTARGET': '',
|
||||||
|
'__EVENTARGUMENT': '',
|
||||||
|
'__VIEWSTATE': self.get_secrets(r, '__VIEWSTATE'),
|
||||||
|
'__VIEWSTATEGENERATOR': self.get_secrets(r, '__VIEWSTATEGENERATOR'),
|
||||||
|
'__EVENTVALIDATION': self.get_secrets(r, '__EVENTVALIDATION'),
|
||||||
|
#'DXScript': get_secrets(r, 'DXScript'),
|
||||||
|
}
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
settings.fesmu_root_url,
|
settings.fesmu_root_url,
|
||||||
data=settings.merge(
|
data = data,
|
||||||
settings.scam_data_1, {
|
headers=settings.headers,
|
||||||
'ctl00$MainContent$UserText': self.username,
|
|
||||||
'ctl00$MainContent$PassText': self.password,
|
|
||||||
}),
|
|
||||||
cookies={'ASP.NET_SessionId': self.SessionId})
|
cookies={'ASP.NET_SessionId': self.SessionId})
|
||||||
r = requests.get(
|
r = requests.get(
|
||||||
settings.fesmu_root_url + 'startstu.aspx',
|
settings.fesmu_root_url + 'startstu.aspx',
|
||||||
cookies={'ASP.NET_SessionId': self.SessionId})
|
cookies={'ASP.NET_SessionId': self.SessionId})
|
||||||
soup = BeautifulSoup(r.text, "html.parser")
|
soup = BeautifulSoup(r.text, "html.parser")
|
||||||
#print("****** ", soup)
|
|
||||||
_p = re.compile(',.*$')
|
_p = re.compile(',.*$')
|
||||||
self.name = _p.sub(
|
self.name = _p.sub(
|
||||||
'', soup.find(id="ctl00_MainContent_Label1").get_text())[14:]
|
'', soup.find(id="ctl00_MainContent_Label1").get_text())[14:]
|
||||||
|
28
settings.py
28
settings.py
@ -6,16 +6,32 @@ def merge(x, y):
|
|||||||
z.update(y) # modifies z with y's keys and values & returns None
|
z.update(y) # modifies z with y's keys and values & returns None
|
||||||
return z
|
return z
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Host": "www.fesmu.ru",
|
||||||
|
"Connection": "keep-alive",
|
||||||
|
"Content-Length": '896',
|
||||||
|
"Cache-Control": "max-age=0",
|
||||||
|
"Origin": "http://www.fesmu.ru",
|
||||||
|
"Upgrade-Insecure-Requests": '1',
|
||||||
|
"DNT": '1',
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
|
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36",
|
||||||
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||||
|
"Referer": "http://www.fesmu.ru/eport/eport/",
|
||||||
|
"Accept-Encoding": "gzip, deflate",
|
||||||
|
"Accept-Language": "en-US,en;q=0.9,ru;q=0.8,zh-CN;q=0.7,zh;q=0.6",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
scam_data_1 = {
|
scam_data_1 = {
|
||||||
'ctl00_MainContent_ToolkitScriptManager1_HiddenField': '',
|
'ctl00_MainContent_ToolkitScriptManager1_HiddenField': '',
|
||||||
'__EVENTTARGET': '',
|
# '__EVENTTARGET': '',
|
||||||
'__EVENTARGUMENT': '',
|
# '__EVENTARGUMENT': '',
|
||||||
'__VIEWSTATE': '/wEPDwUKLTM5Mjc2OTQzMQ9kFgJmD2QWAgIDD2QWAgIBD2QWAgIFDw8WAh4EVGV4dAVA0KHQtdC50YfQsNGBINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INC90LAg0L/QvtGA0YLQsNC70LU6IDE0OWRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBR1jdGwwMCRNYWluQ29udGVudCRBU1B4QnV0dG9uMaxc3rVccSyMpTHRwTntZdTJoxFSZnqwhbBnF1ATfZNL',
|
'__VIEWSTATE': '/wEPDwUKLTM5Mjc2OTQzMQ9kFgJmD2QWAgIDD2QWAgIBD2QWAgIFDw8WAh4EVGV4dAW7AdCX0LAg0YHRg9GC0LrQuCDRg9C90LjQutCw0LvRjNC90YvRhSDQsNCy0YLQvtGA0LjQt9C40YDQvtCy0LDQvdC90YvRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQvdCwINC/0L7RgNGC0LDQu9C1OiAyNjY3PGJyLyA+0KHQtdC50YfQsNGBINC/0L7QtNC60LvRjtGH0LXQvdC40Lkg0Log0L/QvtGA0YLQsNC70YM6IDUzOTVkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUdY3RsMDAkTWFpbkNvbnRlbnQkQVNQeEJ1dHRvbjFA+y5c2mr9OLuyebEMey8lwZdb51brZaJ6iXIvwaVWpg==',
|
||||||
'__VIEWSTATEGENERATOR': '73D4C735',
|
# '__VIEWSTATEGENERATOR': '73D4C735',
|
||||||
'__EVENTVALIDATION': '/wEdAAPdQMZpQT+E4nHOdGeZqyTVUN0eEH6RAZcaSKVdt8S4X7osef1mutGT26WuFCdWwFbKoA75NEe+fYiUfCl9R3M++NkzZ8G6NwAHQz7bnnn1nw==',
|
'__EVENTVALIDATION': '/wEdAAMqLyJo1lw62U+c0YXYJTJCUN0eEH6RAZcaSKVdt8S4X7osef1mutGT26WuFCdWwFaDQnYjJQ2/uhzVMKV3HbBN40+h9rsbvZwG3sNsqevEUg==',
|
||||||
'ctl00$MainContent$ASPxButton1': '',
|
'ctl00$MainContent$ASPxButton1': '',
|
||||||
'DXScript': '1_42,1_75,2_27',
|
# 'DXScript': '1_42,1_75,2_27',
|
||||||
}
|
}
|
||||||
|
|
||||||
scam_data_2 = {
|
scam_data_2 = {
|
||||||
|
Reference in New Issue
Block a user