Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
5 / 5 / 0
Регистрация: 13.10.2015
Сообщений: 38

Авторизация в личном кабинете platformaofd.ru

10.09.2018, 15:35. Показов 4772. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу код авторизации в личном кабинете. Но почему то сервис каждый раз возвращает окно логина.
Python
1
2
3
4
5
6
7
8
9
10
11
import requests
with requests.Session() as session:
    url = "https://lk.platformaofd.ru/web/login" # URL с формами логина
    session.get(url) # Получаем страницу с формой логина
    dann = {"_csrf":"6f4123fe-44bb-49c2-b977-29542015fa9e", "j_username":"логин", "j_password":"пароль"} # Данные, которые будут отправляться в POST
    session.post(url, dann) # Отправляем данные в POST, в session записываются наши куки
    url2 = "https://lk.platformaofd.ru/web/auth/cheques?start=28.08.2018+00%3A00&end=29.08.2018+00%3A00&deviceId=&operType=" # второй URL - тот с которого нужно спарсить данные
    r = session.get(url2) # 
html_file = open("result.html", "w")
html_file.write(r.text) # 
html_file.close()
Что я делаю не так?

Добавлено через 22 минуты
разобрался. можно удалять
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2018, 15:35
Ответы с готовыми решениями:

Авторизация в личном кабинете
Нужно по адресу ...

Статистика в личном кабинете
Доброго времени суток! знаю php очень плохо, к сожалению времени мало на изучение, надеюсь кто нибудь подскажет или поможет с дипломом. ...

Раздел в Личном кабинете: Друзья
Здравствуйте! Третий день идет (не считая дней потраченных на "резиновую" версту ), а я с места сдвинутся не могу. Появилась идея...

9
1 / 1 / 0
Регистрация: 22.01.2024
Сообщений: 2
22.01.2024, 08:47
Добрый день.
Столкнулся с аналогичной проблемой, не подскажете решение?
0
5 / 5 / 0
Регистрация: 13.10.2015
Сообщений: 38
25.01.2024, 15:11  [ТС]
polus79,
Кусок рабочего кода
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from lxml import html
import requests
from requests.exceptions import HTTPError
 
def get_tree(url):
    for i in range(3): # попытки
        try:
            response = session.get(url, timeout=9) # Получаем страницу
            # если ответ успешен, исключения задействованы не будут
            response.raise_for_status()
            break
        except HTTPError as http_err:
            print('HTTP ошибка:', http_err)
            exit()
        except Exception as err:
            print('попытка', i+1)
            print(url)
            print('Ошибка:', err)
    else: 
        print ("Все попытки использованы (")
        exit()
    tree = html.document_fromstring(response.text) # парсим страничку
    return tree
 
session=requests.Session()
lk = "https://lk.platformaofd.ru" # URL личного кабинета
 # логинимся в ЛК
login_url = lk+ "/web/login?fragments=content&ajaxSource=login_link_id" # URL с формой логина
login_tree = get_tree(login_url) # Получаем из страницы с формой логина
csrf = login_tree.find(".//input[@name='_csrf']").get('value') # ищем _csrf
data = {"_csrf":csrf, "j_username":login, "j_password":password} # Данные, которые будут отправляться в POST
security_check_url = lk+ "/web/j_spring_security_check" # URL, куда отправляются учётные данные
session.post(security_check_url, data) # Отправляем данные в POST, в session записываются наши куки
1
1 / 1 / 0
Регистрация: 22.01.2024
Сообщений: 2
13.02.2024, 13:33
Вариант авторизации на 1с:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    ОтветPOST.Очистить(); //ТекстовыйДокумент
    
    Соединение = Новый HTTPСоединение("lk.platformaofd.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); 
    HTTPЗапрос = Новый HTTPЗапрос("/web/login?fragments=content&ajaxSource=login_link_id");
    Результат = Соединение.Получить(HTTPЗапрос);
    
    ОтветPOST.ДобавитьСтроку(Строка(Результат.КодСостояния));
    ОтветPOST.ДобавитьСтроку(Результат.ПолучитьТелоКакСтроку());
    
    Текст = Новый ТекстовыйДокумент;
    Текст.УстановитьТекст(Результат.ПолучитьТелоКакСтроку());
    _csrf = "";
    Для Индекс = 0 По Текст.КоличествоСтрок() Цикл
        СтрокаТекста = Текст.ПолучитьСТроку(Индекс); 
        Если СтрЧислоВхождений(СтрокаТекста, "_csrf") > 0 Тогда  
            
            Позиция2 = СтрДлина(СтрокаТекста);
            Пока Позиция2 > 1 Цикл
                Если Сред(СтрокаТекста, Позиция2, 1) = """" Тогда
                    Прервать;
                КонецЕсли;
                Позиция2 = Позиция2 - 1;
            КонецЦикла;
            Позиция1 = Позиция2 - 1;
            Пока Позиция1 > 1 Цикл
                Если Сред(СтрокаТекста, Позиция1, 1) = """" Тогда
                    Прервать;
                КонецЕсли;
                Позиция1 = Позиция1 - 1;
            КонецЦикла;
            _csrf = Сред(СтрокаТекста, Позиция1 + 1, Позиция2 - Позиция1 - 1);
            
            ОтветPOST.ДобавитьСтроку(Строка(_csrf));
        КонецЕсли;
    КонецЦикла; 
    
    Куки = Результат.Заголовки.Получить("Set-Cookie");
    Куки = СтрЗаменить(Куки, ";", Символы.ПС);
    ИдентификаторСессии1 = СтрПолучитьСтроку(Куки, 1);
    
    ОтветPOST.ДобавитьСтроку(ИдентификаторСессии1);
    
    СтрокаДанных = СтрШаблон("_csrf=%1&j_username=%2&j_password=%3", _csrf, СокрЛП(ПользовательОФД), СокрЛП(ПарольОФД)); 
    
    Заголовки = Новый Соответствие;  
    Заголовки.Вставить("Cookie", ИдентификаторСессии1);
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
    
    Запрос = Новый HTTPЗапрос("/web/login", Заголовки);//"/web/j_spring_security_check"
    Запрос.УстановитьТелоИзСтроки(СтрокаДанных);
    
    ОтветPOST.ДобавитьСтроку(Символы.ПС);
    
    Ответ =  Соединение.ОтправитьДляОбработки(Запрос);
    ОтветЗаголовки = Символы.ПС;
    Для каждого соотв Из Ответ.Заголовки Цикл
        ОтветЗаголовки = ОтветЗаголовки + """" + Строка(соотв.Ключ) + """:""" + Строка(соотв.Значение) + """" + Символы.ПС;  
    КонецЦикла;
    ТекстОтвета = Строка(Ответ.КодСостояния)+ Символы.ПС + Ответ.ПолучитьТелоКакСтроку() + Строка(ОтветЗаголовки); 
    
    ОтветPOST.ДобавитьСтроку(ТекстОтвета);
1
5 / 5 / 0
Регистрация: 13.10.2015
Сообщений: 38
28.03.2024, 16:21  [ТС]
polus79,
26.03.24 они сломали авторизацию, переведя систему на keycloak.
Но сегодня всё вернули назад. Не знаю, надолго ли.
Ещё на сайте у них есть платная система Интеграция ОФД в 1С.
0
5 / 5 / 0
Регистрация: 13.10.2015
Сообщений: 38
22.08.2024, 10:19  [ТС]
Сегодня они перевели авторизацию на OAuth... keycloak
Как можно теперь авторизоваться из python?
0
5 / 5 / 0
Регистрация: 13.10.2015
Сообщений: 38
02.10.2024, 16:44  [ТС]
Походу никто не парсит platformaofd?
0
1 / 1 / 1
Регистрация: 09.01.2023
Сообщений: 2
12.02.2025, 14:15
Как раз сегодня появилась такая задача. Начал и прифигел =)
Судя по всему успешной реализации нет пока не у кого?
0
 Аватар для ViachaslauK
122 / 181 / 16
Регистрация: 08.10.2024
Сообщений: 651
12.02.2025, 16:54
Цитата Сообщение от Cyr Посмотреть сообщение
Кусок рабочего кода
тру питонисты так не пишут)) вынесите цикл в декоратор. Вместо requests - httpx, он умеет в асинхронные запросы. принты я так понимаю - для разработки, надеюсь в прод вы их не потащите. лучше сразу привыкнуть logger использовать.
Ну и подумать - надо ли перехватывать все исключения
0
1 / 1 / 1
Регистрация: 09.01.2023
Сообщений: 2
13.02.2025, 09:14
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Короче кому интересно, можно используя различные техники средневековых пыток с красными глазами сидеть и пробивать авторизацию OAuth2 keycloak и страдать, а можно тупо подключить услугу интеграции с 1с предприятие за 2 тыс в год, взять описание сервиса https://docs.google.com/docume... sp=sharing и сделать за 10 минут =)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import requests
 
# URL API для чеков
base_url = "https://ofv-api-v0-1-1.evotor.ru/v1/client/receipts"
 
# Ваш API Token
token = "9011c111-1ad1-1b11-b111-d119101113f1"   #[B]<---- Сюдой ваш токен[/B]
 
kktRegId = "0005411111111305"  #   [B]<------ Здесь указываем номер кассы, который видим при подключении услуги[/B]
 
# Параметры запроса. Период не более 7 дней!
params = {
    "dateFrom": "2025-02-07 00:00:00",  # Укажите нужную дату начала периода
    "dateTo": "2025-02-12 00:00:00",  # Укажите дату окончания периода
    "dateType": 1,  # По умолчанию = 1 (дата ФД)
    "kktRegId": kktRegId  
}
 
# Заголовки запроса
headers = {
    "Token": token,
    "Accept": "application/json",
    "Accept-Charset": "utf-8"
}
 
# Отправка GET-запроса
response = requests.get(base_url, headers=headers, params=params)
 
# Проверка ответа
if response.status_code == 200:
    data = response.json()
    print("Список чеков:")
    print(data)   [B]#<------- С этими данными уже делаем все что нужно[/B]
else:
    print(f"Ошибка: {response.status_code}, {response.text}")
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.02.2025, 09:14
Помогаю со студенческими работами здесь

Не работает регистрация в личном кабинете
Решил я набыдлокодить небольшой файловый хостинг где у людей будет свой личный кабинет (после регистрации,кочечно), и они в нём смогут...

Смена пароля в личном кабинете
В универе семестровка - написание сайта на аспе. Разрабатываю личный кабинет, в нем в скрываемом блоке разместил форму смены пароля. ...

Отображение файлов в личном кабинете
Здравствуйте! Подскажите пожалуйста, как такое реализовать? 1. Есть сайт и база с пользователями, базу заполняю сам(нет возможности...

PDO: изменить пароль в личном кабинете
Здравствуйте! Работаю над заменой старого пароля новым. Проблема в том, что желательно использовать PDO и сделать запросы к БД...

Страница для заказа в личном кабинете
Здравствуйте, у меня такая задача, нестандартная, на странице личного кабинета есть список товаров, разделенная категориями как аккордеон....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru