From 00e97742243981c0192f336f6ffd454812f22eb2 Mon Sep 17 00:00:00 2001 From: Artem Lavrenov Date: Thu, 10 Aug 2023 20:44:16 +0300 Subject: [PATCH] beeline_uz, mts balance2 error, beeline sec to minute --- changelist.md | 4 +++- mbplugin_ini.md | 2 +- plugin/beeline_uz.py | 16 ++++++++-------- plugin/mts.py | 6 ++++-- plugin/settings.py | 2 +- plugin/store.py | 13 ++++++++----- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/changelist.md b/changelist.md index 201bb67..c52eabf 100644 --- a/changelist.md +++ b/changelist.md @@ -530,6 +530,8 @@ ADD: Опция null_is_error - считать нулевой баланс ош FIX: Исправлена работа через proxy на МТС и запуск хрома на linix и mac (issues 38 from yoman88111) ADD: Добавил утилиту csv_to_phones_ini.py из issue 36 -## mbplugin v1.00.60 (04.08.23) fix beeline web +## mbplugin v1.00.60 (10.08.23) fix beeline web, fix a1by, fix beeline_uz, balance2 as error in mts cashback FIX: Очередной фикс билайн web (остаток минут) FIX: Восстановлена работа a1by (новый личный кабинет) +FIX: Восстановлена работа beeline_uz +FIX: Небольшие изменения в логике получения кэшбэчного баланса МТС (balance2) - теперь если указано в опции balances=swap или balances=add то отсутствие основного или кэшбэчного баланса должно считаться неполученным результатом diff --git a/mbplugin_ini.md b/mbplugin_ini.md index 122ba01..175e5ef 100644 --- a/mbplugin_ini.md +++ b/mbplugin_ini.md @@ -148,7 +148,7 @@ Значение по умолчанию: nochange Варианты значения balances: nochange swap add ## __null_is_error__ -Описание: Что делать с полем balances +Описание: Считать нулевой баланс ошибкой Значение по умолчанию: 0 Варианты значения null_is_error: 0 - выключено или 1 - включено ## __subscription_keyword__ diff --git a/plugin/beeline_uz.py b/plugin/beeline_uz.py index c09450b..ca0870a 100644 --- a/plugin/beeline_uz.py +++ b/plugin/beeline_uz.py @@ -6,22 +6,22 @@ login_url = 'https://beeline.uz/ru' user_selectors = { - 'chk_lk_page_js': "Array.from(document.querySelectorAll('#ms-login-button')).filter(el=>el.innerText=='Войти').length==0", - 'chk_login_page_js': "Array.from(document.querySelectorAll('#ms-login-button')).filter(el=>el.innerText=='Войти').length!=0", - 'before_login_js': "document.querySelector('#ms-login-button').click();document.querySelector('#auth-v2-modal-tab-1').click();", - 'login_clear_js': "document.querySelector('#auth-v2-modal-login-phone').value=''", - 'login_selector': "#auth-v2-modal-login-phone", + 'chk_lk_page_js': "Array.from(document.querySelectorAll('button')).filter(el=>el.innerText.startsWith('+998')||el.innerText==('Главная')).length>0", + 'chk_login_page_js': "Array.from(document.querySelectorAll('button.gray')).filter(el=>el.innerText=='Войти').length>0", + 'before_login_js': "document.querySelectorAll('button').forEach(el=>el.innerText=='Войти'?el.click():0);document.querySelectorAll('button').forEach(el=>el.innerText=='Вход по паролю'?el.click():0);", + 'login_clear_js': "document.querySelector('#auth-form-phone').value=''", + 'login_selector': "#auth-form-phone", 'password_clear_js': "document.querySelector('input[type=password]').value=''", 'password_selector': "input[type=password]", 'remember_checker': "true", # все проверяем в remember_js - 'remember_js': "document.querySelectorAll('.container-branded-subitems').forEach(el=>el.innerText=='Запомнить меня'&&el.querySelector('input[type=checkbox]').checked==false?el.click():0)", - 'submit_js': "document.querySelector('#auth-v2-modal-login-btn').click()", + 'remember_js': "", + 'submit_js': "document.querySelector('button.center').click()", } class browserengine(browsercontroller.BrowserController): def data_collector(self): self.do_logon(url=login_url, user_selectors=user_selectors) - self.page_evaluate("document.querySelectorAll('#ms-login-button').forEach(el=>el.innerText!='Войти'?el.click():0)") + self.page_evaluate("document.querySelectorAll('button').forEach(el=>el.innerText.startsWith('+998')?el.click():0)") self.wait_params(params=[ {'name': 'Balance', 'url_tag': ['/dashboard-updated$'], 'jsformula': "parseFloat(data.subUsers[0].balance).toFixed(2)"}, {'name': 'TarifPlan', 'url_tag': ['/dashboard-updated$'], 'jsformula': "data.subUsers[0].pricePlan.ru"}, diff --git a/plugin/mts.py b/plugin/mts.py index 15d7112..37950e2 100644 --- a/plugin/mts.py +++ b/plugin/mts.py @@ -446,9 +446,11 @@ def wait_state(timeout=30): if 'amount' in mccsp_balance and 'Balance' in result: if mccsp_balance['amount'] > 0 and result['Balance'] == 0: del result['Balance'] - cashback = pd.get_response_body_json('for=api/cashback/account') + cashback_page = pd.get_response_body_json('for=api/cashback/account') # pd.jsformula('for=api/cashback/account', "parseFloat(data.data.balance).toFixed(2)") - result['Balance2'] = round(cashback.get('data', {}).get('balance', 0), 2) + cashback_data = cashback_page.get('data', {}) + if 'balance' in cashback_data: + result['Balance2'] = round(cashback_data['balance'], 2) counters = pd.get_response_body_json('for=api/sharing/counters').get('data', {}).get('counters', []) if 'Balance' in result and 'Balance2' in result: try: diff --git a/plugin/settings.py b/plugin/settings.py index fa7a8ff..abbe616 100644 --- a/plugin/settings.py +++ b/plugin/settings.py @@ -182,7 +182,7 @@ 'balances_': {'descr': 'Что делать с полем balances', 'type': 'select', 'variants': 'nochange swap add'}, 'balances': 'nochange', # Считать нулевой баланс ошибкой (если включен balances=swap то ошибка будет если нулевой Balance2) - 'null_is_error_': {'descr': 'Что делать с полем balances', 'type': 'checkbox'}, + 'null_is_error_': {'descr': 'Считать нулевой баланс ошибкой', 'type': 'checkbox'}, 'null_is_error': '0', # Слова, которые встречаются в названиях тарифов, про которые нужно выдать предупреждение и красить номер, нежелательные unwanted услуги 'subscription_keyword_': {'descr': 'Признаки подписок, через запятую', 'type': 'text'}, diff --git a/plugin/store.py b/plugin/store.py index c9db45c..984c2e1 100644 --- a/plugin/store.py +++ b/plugin/store.py @@ -110,15 +110,18 @@ def correct_and_check_result(result, pkey): if type(result) != dict: return result result = fix_num_params(result, int_params=['SMS', 'Min']) - if 'Balance' in result and 'Balance2' in result: - b, b2 = result['Balance'], result['Balance2'] + if options('balances', pkey=pkey) != 'nochange': + b, b2 = result.get('Balance', None), result.get('Balance2', None) if options('balances', pkey=pkey) == 'swap': - result['Balance'], result['Balance2'] = result['Balance2'], result['Balance'] + try: + result['Balance'], result['Balance2'] = result['Balance2'], result['Balance'] + except Exception: + raise RuntimeError(f"Swap error for Balance and Balance2 {exception_text()}") elif options('balances', pkey=pkey) == 'add': try: - result['Balance'] = float(result['Balance']) + float(result['Balance2']) + result['Balance'] = round(float(result['Balance']) + float(result['Balance2']), 2) except Exception: - logging.error(f"Addition error for {repr(result['Balance'])}+{repr(result['Balance2'])}: {exception_text()}") + raise RuntimeError(f"Addition error for Balance + Balance2 {exception_text()}") logging.info(f"Balance correct by option.balances={options('balances', pkey=pkey)} {[b, b2]} -> {[result['Balance'], result['Balance2']]}") if type(result) != dict or 'Balance' not in result: raise RuntimeError(f'В result отсутствует баланс')