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

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

10.09.2018, 15:35. Показов 4935. Ответов 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
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 705
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru