Форум » » Костыль для Мегафона. » Ответить

Костыль для Мегафона.

leha3d: Может надо кому. Попробовал написать плагин для Мегафона (обновленный личный кабинет после ноября 2018г.) У меня, вроде, работает. https://yadi.sk/d/EMh15xKcdoB55w Видит только баланс и имя абонента.

Ответов - 222, стр: 1 2 3 4 5 6 7 8 9 10 11 12 All

sham1975: leha3d, привет ... смотрю, ты тоже тут :) ... есть мысли какие-нибудь по всему написанному, в частности, мною ... как бы "влепить" это "чудо" ... мне нужно получать только баланс :(

pasha: sham1975, привет. Для получения только баланса берем версию MB-megafon20191016.zip от y-greek и удаляем в ней следующие строки: // Предоставленный лимит tmp = json(atourexpense); if(tmp.limit) response.KreditLimit = tmp.limit; // ФИО tmp = json(profilename); if(tmp.name) response.UserName = tmp.name; // Тариф tmp = json(tariffcurrent); if(tmp.name) response.TarifPlan = tmp.name; // Количество услуг tmp = json(minioptions); response.UslugiOn = tmp.servicesDto.free + '/' + tmp.servicesDto.paid; //Остатки getRemainders(json(remaindersMini)); После этого будет собираться только баланс

sham1975: pasha пишет: Для получения только баланса берем версию MB-megafon20191016.zip от y-greek и удаляем в ней следующие строки: указанные тобою строки удалил, на всякий случай строчку с debug тоже включил ... НЕ РАБОТАЕТ :( ... в файл PluginSaveToLogFile.txt записалось опять только три строчки: // atourexpense: // balanceget: // multiaccountsummary: после удаления указанных тобою (лишних для меня) строчек, получился вот такой текст этого плагина (+ включил debug): // Плагин для программы MobileBalance: http://mtsoft.ru/mobilebalance/ // // Инструкция по использованию: // 1. зайти в настройки программы MobileBalance, перейти на закладку "Плагины: Операторы", добавить плагин. // 2. После этого перейти на закладку "Телефоны" и в качестве оператора выбрать оператора с названием, указанным ниже. // // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 16.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 // Descript : Баланс Мегафона с ручным вводом капчи // Descript : Теперь берем данные из объекта JSON // Descript : Если баланс из api загружается и равен 0 (может такое быть), то изменяется на 0.001 // Descript : Личный кабинет: https://lk.megafon.ru/login/ function main(){ var pageN = 0; // wait browser function wb() { while(ie.busy) external.sleep(100); } //function a(e){ window.alert(e); } // вот главная мантра; нашёл этот method, который автор добавил в external, в дампе памяти // new ActiveXObject не прокатывает ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; response.pages[pageN++] = doc.documentElement.outerHTML; tmp = doc.title; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk while (doc.title == tmp) external.sleep(200); wb(); debug(); // возвращает JSON из api url function api(url) { // чтобы загрузить страницы API, в iframe помещаем скрипт var tag = doc.createElement("iframe"); tag.style.display = "none"; tag.setAttribute("style", "width: 0px; height: 0px; border: none;"); doc.body.appendChild(tag); tag.contentWindow.document.open(); var scr = '\ <script>\ xhr = new XMLHttpRequest();\ xhr.open("GET", "https://lk.megafon.ru' + url + '");\ xhr.send();\ xhr.onload = function(){\ document.body.innerHTML += xhr.response;\ }\ </script>'; tag.contentWindow.document.write('<body>' + scr + '</body>'); wb(); for(i=0; i<20; i++){ if(tag.contentDocument.body.innerHTML != scr) break; external.sleep(100); } var tmp = tag.contentDocument.body.innerHTML.replace(/<script>.*?<\/script>/gm, ""); // заменяем &nbsp; на пробел tmp = tmp.replace(/&nbsp;/gm, " "); return tmp; } // возвращает object из строки json function json(str) { try { var obj = eval('(' + str + ')'); } catch(e) { obj = str; } return obj; } // загружаем данные через api var tariffcurrent = api("/api/tariff/current"); var profilename = api("/api/profile/name"); var balanceget = api("/api/lk/balance/get"); var atourexpense = api("/api/lk/main/atourexpense"); var remaindersMini = api("/api/options/remaindersMini"); var minioptions = api("/api/lk/mini/options"); //var multiaccountsummary = api("/api/multiaccount/summary"); //var cashback = api("/api/cashback"); function debug() { var tmp = ""; tmp += "// atourexpense:\n" + api("/api/lk/main/atourexpense") + "\n"; tmp += "// balanceget:\n" + api("/api/lk/balance/get") + "\n"; tmp += "// multiaccountsummary:\n" + api("/api/multiaccount/summary") + "\n"; // tmp += "// remaindersMini:\n" + api("/api/options/remaindersMini") + "\n"; // tmp += "// minioptions:\n" + api("/api/lk/mini/options") + "\n"; // tmp += "// profilename:\n" + api("/api/profile/name") + "\n"; // tmp += "// tariffcurrent:\n" + api("/api/tariff/current") + "\n"; // tmp += "// cashback:\n" + api("/api/cashback") + "\n"; external.SaveStrToLogFile( tmp ); } var objRemainders = {}; // Считаем остатки в пакете function increaseRemainder(objJson){ switch(objJson.groupId){ case "message": objRemainders.message = ("message" in objRemainders ? objRemainders.message + objJson.availableValue.value : objJson.availableValue.value); break; case "voice": objRemainders.voice = ("voice" in objRemainders ? objRemainders.voice + objJson.availableValue.value : objJson.availableValue.value); break; case "internet": var trafficGB = (objJson.availableValue.unit == "МБ" ? objJson.availableValue.value/1000 : objJson.availableValue.value); objRemainders.internet = ("internet" in objRemainders ? objRemainders.internet + trafficGB : trafficGB); break; default: break; } } // Обработка остатков function getRemainders(jsonAnswer){ if(jsonAnswer.remainders) { for (i = 0; i < jsonAnswer.remainders.length; i++) { var parentRemainder = jsonAnswer.remainders if(parentRemainder.remainders){ for(var x=0; x < parentRemainder.remainders.length; x++){ var objRemainder = parentRemainder.remainders[x]; if(objRemainder.groupId){ increaseRemainder(objRemainder); } else { var anystring = objRemainder.name +": " + objRemainder.availableValue.value + " " + objRemainder.availableValue.unit +";"; objRemainders.anystring = ("anystring" in objRemainders ? objRemainders.anystring + " " + anystring : anystring); } } } } // Все остатки теперь в объекте objRemainders. Пишем их в response. if("message" in objRemainders) response.SMS = objRemainders.message; if("voice" in objRemainders) response.Min = objRemainders.voice; if("internet" in objRemainders) response.Internet = objRemainders.internet; if("anystring" in objRemainders) response.AnyString = objRemainders.anystring; } } // Баланс if( typeof(json(atourexpense).balance) != 'undefined' ) response.Balance = json(atourexpense).balance; // если почему-то нет в atourexpense, то берём из balanceget. Там баланс + кредит else if( typeof(json(balanceget).balance) != 'undefined' ) response.Balance = json(balanceget).balance; // Если не undefined, значит из api получили. Но может равняться 0, // тогда чтобы MobileBalance не считал что ошибка запроса делаем 0.001 if( typeof(response.Balance) != 'undefined' ) { if(response.Balance == 0) response.Balance = 0.001; } else { fin(); return; } // дальше бессмысленно... выходим // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); паша, а вот выше я твой плагин (текст) указывал ... в него нельзя разве "впихнуть" "чудо-кусочек" нового текста с ручным вводом капчи ?! ... ведь именно он у меня работал без проблем до появления капчи :(


sham1975: leha3d, привет ... ты опять просто тут или как ?! :( ... я надежды не теряю ... помогите !!!!!! вот в этот, уже "старый", текст нельзя ли как-то протиснуть новый "чудо-кусочек" текста для появления возможности ручного ввода капчи ... с этим текстом у меня до появления капчи всё работало хорошо :( ... // Плагин для программы MobileBalance: http://mtsoft.ru/mobilebalance/ // // Инструкция по использованию: // 1. зайти в настройки программы MobileBalance, перейти на закладку "Плагины: Операторы", добавить плагин. // 2. После этого перейти на закладку "Телефоны" и в качестве оператора выбрать оператора с названием, указанным ниже. // // FullName : Мегафон // ShortName : MgfBal // Version : 12.01.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : leha3d (Pasha edit) // Types : leha3d (Pasha edit) // Descript : Баланс у сотового оператора Мегафон после изменений в ноябре 2018г. // Descript : Личный кабинет: https://lk.megafon.ru/login/ function main(){ var p = 0; // Заходим на главную страницу document.location="https://lk.megafon.ru/login/"; if(!external.WaitBrowser) return; response.pages[p++]=external.source; // Вводим логин и пароль и submit форму if(document.all.j_username) { document.all.j_username.value=request.loginValue; document.all.j_password.value=request.passwValue; document.all.j_password.form.submit(); if(!external.WaitBrowser) return; response.pages[p++]=external.source; }; external.sleep(1000); // Баланс html=document.documentElement.outerHTML; regexp=/<i class=.lk_svg lk_svg_user_balans.><.i><p>.*?<.p>/; regexp2=/<div class=.gadget_account_block.><p>Баланс<.p><h4>.*?<.h4>/; if (res=regexp2.exec(html)) { tmp=res[0].replace(",", "."); tmp=tmp.replace(/ |&nbsp|\xA0|<div.*<h4>/gm, ""); response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(",", "."); tmp=tmp.replace(/ |&nbsp|\xA0|<i.*<p>/gm, ""); response.Balance=parseFloat(tmp); }; // Выходим external.sleep(300); document.location="https://lk.megafon.ru/logout/"; if(!external.WaitBrowser) return; response.pages[p++]=external.source; }; main();

leha3d: sham1975 пишет: Похвально, что решение с ручным вводом капчи реализовано, но такой метод мне немного не подходит. Есть некоторые соображения, как ещё можно решить проблему с капчей. Времени, как всегда не хватает. Если что-то получится у меня, обязательно отпишусь.

comprech: leha3d пишет: Есть некоторые соображения, как ещё можно решить проблему с капчей. Времени, как всегда не хватает. Если что-то получится у меня, обязательно отпишусь. В AnyBalance реализована привязка через смс, цитата из описания провайдера мегафон: Рекомендуется использовать способ без ввода пароля. В настройках провайдера введите только Ваш телефон, а галочку Использовать пароль оставьте снятой. Тогда при первом обновлении баланса вам придет код на SMS для привязки приложения. Последующие обновления будут происходить без посылки кода. Такое возможно реализовать средствами плагинов?

sham1975: охренеть ... сейчас во всех кабинетах мегафона у меня пишет баланс 0 ... авария что ли у них ? ... имею ввиду, без использования программы ... просто через браузер захожу ... и на ВСЕХ номерах баланс 0 ... непосредственно с мобилы проверка показывает, что деньги на месте (*100#) ... чтобы это значило ? ... или опять только у меня ?

Aqua: "баланс 0" Да глюк это. Тоже нолики.

sham1975: короче, позвонил на горячую линию ... сказали замена оборудования или чего-то там ещё ... какие-то работы ведутся ... уффф ... я уж испужался, что всё - кирдык ... везде по нулям ! ...

sham1975: y-greek, признавайся ... ты сломал мегафон вконец своим плагином ?! :) пысы: шучу ... сейчас зашёл в кабинеты ... всё нормализовалось ... баланс отображается ... входил через браузер ... y-greek, есть новости по моему "делу" ?! ... ни так, ни сяк ... не фурычит у меня твой плагин :( ... если не сложно, мне бы только баланс получать ... debug продолжает постоянно писать эти три строчки в файл PluginSaveToLogFile.txt ... // atourexpense: // balanceget: // multiaccountsummary: уж и не знаю, в чём дело :( ... полная очистка и сброс IE проводится мною до и после каждой попытки использования твоего плагина ! :( ... но ни в какую не хочет получать баланс ... пишет в отладочном режиме, во внутреннем браузере, что баланс "0" и завершает работу без какой-либо записи в БД :(

y-greek: sham1975 пишет: y-greek, признавайся ... ты сломал мегафон вконец своим плагином ?! :) Могет быть... Сегодня много долбил личный кабинет. Но нулевого баланса не было. Зато стали появляться буквенно-цифровые капчи. Сделал уже (перенёс из старого скритпа) запрос баланса со страницы (если через api не получается), но потом напортачил в другом месте и отложил доработку на завтра+.

sham1975: y-greek пишет: отложил доработку на завтра+. очень на тебя надеюсь !!! ... спасибо тебе за твой труд !!!

y-greek: MB-megafon20191018.zip Если баланс не достаётся из api, то берём его со страницы лк. Ожидание готовности iframe api делалось не очень корректно. Может быть из-за этого не всегда считывалось. Изменил. Вместо функции debug() ввёл переменную debug=0 в начале скрипта. Если не 0 то в PluginSaveToLogFile.txt сбрасываются все загруженные данные. Ввёл переменную balanceOnly=0 в начале скрипта. Если не 0, то добывается только баланс. Ну и другие всякие исправления (которые, как известно, добавляют новые баги) Надеюсь что это последняя правка...

sham1975: y-greek пишет: MB-megafon20191018.zip Если баланс не достаётся из api, то берём его со страницы лк. Ожидание готовности iframe api делалось не очень корректно. Может быть из-за этого не всегда считывалось. Изменил. Вместо функции debug() ввёл переменную debug=0 в начале скрипта. Если не 0 то в PluginSaveToLogFile.txt сбрасываются все загруженные данные. Ввёл переменную balanceOnly=0 в начале скрипта. Если не 0, то добывается только баланс. Ну и другие всякие исправления (которые, как известно, добавляют новые баги) Надеюсь что это последняя правка... РЕСПЕКТ !!! ... balanceOnly=1 ... МОМЕНТАЛЬНОЕ ПОЛУЧЕНИЕ баланса !!! ... Даже намного быстрее, чем было до этого !!! ... ОГРОМНОЕ СПАСИБО y-greek за твой ТРУД !!! пысы: y-greek, получается на моём компе что-то не позволяло получать баланс по "API" ?! ... а напрямую со странички ЛК - получает сразу ... как думаешь, что на моём компе мешает взаимодействию с так называемым "API" ?! ... спрашиваю для расширения кругозора ... сам не пойму, почему так ... ЕЩЁ РАЗ ОГРОМНОЕ ТЕБЕ СПАСИБО !!! ... сейчас "прогнал" ВОСЕМЬ симок мегафона (5 - москва, 3 - нижний новгород) по очереди ... все МОМЕНТАЛЬНО получили БАЛАНС !!! ... УРА !!!

y-greek: sham1975 пишет: как думаешь, что на моём компе мешает взаимодействию с так называемым "API" ?! А надо через debug проверить - получает ли сейчас. У меня была, кажется, некорректная проверка готовности iframe, и там всё могло зависеть от чего угодно - версии винды, эксплорера, скорострельности компа... А если по-прежнему не забирает апи - ну тогда не знаю.

sham1975: y-greek пишет: А надо через debug проверить - получает ли сейчас. У меня было, кажется, некорректная проверка готовности iframe, и там всё могло зависеть от чего угодно - версии винды, эксплорера, скорострельности компа... А если по-прежнему не забирает апи - ну тогда не знаю. врубил дебаг ... в файлик ОЧЕНЬ много чего записалось ! // atourexpense: // multiaccountsummary: // remaindersMini: // minioptions: // profilename: // tariffcurrent: // balanceget: // cashback: // Page 0: всё сюда вставлять не стал, так как после строчки с //Page 0: ... идёт очень много текста при беглом просмотре которого, увидел много личной информации ... можно даже сказать, ВСЮ (!!!) личную информацию ... стало как-то даже не по себе :( ... это не опасно ?! ... жесть какая-то по тому, что я скопировал из файлика PluginSaveToLogFile.txt , ты тоже не сможешь определить причину предыдущих моих неудачных попыток использования старых версий твоего плагина ?

leha3d: comprech пишет: comprech пишет: В AnyBalance реализована привязка через смс, цитата из описания провайдера мегафон: Рекомендуется использовать способ без ввода пароля. В настройках провайдера введите только Ваш телефон, а галочку Использовать пароль оставьте снятой. Тогда при первом обновлении баланса вам придет код на SMS для привязки приложения. Последующие обновления будут происход Кто-нибудь проверял?

y-greek: sham1975 пишет: по тому, что я скопировал из файлика PluginSaveToLogFile.txt , ты тоже не сможешь определить причину предыдущих моих неудачных попыток использования старых версий твоего плагина ? апи по-прежнему не забирает, по крайней мере atourexpense должен забираться. Определить почему не могу. sham1975 пишет: врубил дебаг ... в файлик ОЧЕНЬ много чего записалось ! Да, сейчас пишется всё что грузилось (кроме страницы входа). Page 0 это страница личного кабинета. Для диагностики она мне (пока?) бесполезна, не знаю что искать. Пароля там нет, но публиковать, конечно, не стоит.

sham1975: y-greek пишет: апи по-прежнему не забирает, по крайней мере atourexpense должен забираться. Определить почему не могу. ну да ладно ... ГЛАВНОЕ - получилось ! ... мне только баланс и нужен ! ... чтобы в БД записывался и отсчитывал срок до 90 дней ! ... прога мне хотя бы напоминать будет, чтобы сделал контрольный звонок :)

y-greek: sham1975 пишет: ну да ладно ... ГЛАВНОЕ - получилось ! ... мне только баланс и нужен ! ... чтобы в БД записывался и отсчитывал срок до 90 дней ! ... прога мне хотя бы напоминать будет, чтобы сделал контрольный звонок :) Программа вообще то вполне портабельная (за исключением того что не free лицензия прячется где-то в реестре, наверное). Можно папку скопировать на флешку и посмотреть как будет на другом компе.



полная версия страницы