Skip to content

Commit

Permalink
beeline_uz, mts balance2 error, beeline sec to minute
Browse files Browse the repository at this point in the history
  • Loading branch information
artyl committed Aug 10, 2023
1 parent 50d6c63 commit 00e9774
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 18 deletions.
4 changes: 3 additions & 1 deletion changelist.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 то отсутствие основного или кэшбэчного баланса должно считаться неполученным результатом
2 changes: 1 addition & 1 deletion mbplugin_ini.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@
Значение по умолчанию: nochange
Варианты значения balances: nochange swap add
## __null_is_error__
Описание: Что делать с полем balances
Описание: Считать нулевой баланс ошибкой
Значение по умолчанию: 0
Варианты значения null_is_error: 0 - выключено или 1 - включено
## __subscription_keyword__
Expand Down
16 changes: 8 additions & 8 deletions plugin/beeline_uz.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand Down
6 changes: 4 additions & 2 deletions plugin/mts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion plugin/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'},
Expand Down
13 changes: 8 additions & 5 deletions plugin/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 отсутствует баланс')
Expand Down

0 comments on commit 00e9774

Please sign in to comment.