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

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

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

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

sham1975: y-greek пишет: Программа вообще то вполне портабельная (за исключением того что не free лицензия прячется где-то в реестре, наверное). Можно папку скопировать на флешку и посмотреть как будет на другом компе. к сожалению (или нет), у меня на всех трёх компах одинаковое программное обеспечение (Win10) ... не можешь глянуть, что ещё можно выкинуть из текста твоего плагина ?! ... вот итоговый текст, с которым всё работает быстро и замечательно !!! ... с учётом того, что по "апи" мне не судьба, соответственно, все лишние строчки тоже не нужны, в принципе: // Плагин для программы MobileBalance: http://mtsoft.ru/mobilebalance/ // // Инструкция по использованию: // 1. зайти в настройки программы MobileBalance, перейти на закладку "Плагины: Операторы", добавить плагин. // 2. После этого перейти на закладку "Телефоны" и в качестве оператора выбрать оператора с названием, указанным ниже. // // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Descript : Баланс Мегафона с ручным вводом капчи // Descript : Теперь берем данные из объекта JSON // Descript : Если баланс из api не загружается, то берём со страницы // Descript : Если баланс получен и равен 0 (может такое быть), то изменяется на 0.001 // Descript : Личный кабинет: https://lk.megafon.ru/login/ function main(){ // минимальная задержка (милисекунды) // все задержки external.sleep(N*ms) // в случае проблем можно попытаться увеличить var ms = 100; var pageN = 0; // wait browser function wb() { while(ie.busy) external.sleep(ms); } 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; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(2*ms); wb(); external.sleep(2*ms); // кликаем по всем стрелкам - данные на странице подгружаются динамически var arrows = doc.getElementsByClassName("lk_svg lk_svg_arrow"); for(i=0; i<arrows.length; i++) { arrows.click(); external.sleep(2*ms); } response.pages[pageN++] = doc.documentElement.outerHTML; // возвращает 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 script = '\ <script>\ xhr = new XMLHttpRequest();\ xhr.open("GET", "https://lk.megafon.ru' + url + '");\ xhr.send();\ xhr.onload = function(){ document.body.innerHTML = xhr.response; }\ </script>'; // записываем скрипт в iframe tag.contentWindow.document.write('<body>' + script + '</body>'); wb(); // до 20*ms ждём что содержимое будет соответствовать формату JSON // не очень правильно, больше ничего не придумал var response = ""; for(i=0; i<20; i++){ tmp = tag.contentDocument.body.innerHTML; if(tmp.match(/^\s*\{[\s\S]*\}\s*$/) ) { response = tmp; break; } external.sleep(ms); } // заменяем &nbsp; на пробел response = response.replace(/&nbsp;/gm, " "); return response; } // возвращает object из строки json function json(str) { try { var obj = eval('(' + str + ')'); } catch(e) { obj = str; } return obj; } // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main();

y-greek: sham1975 пишет: не можешь глянуть, что ещё можно выкинуть из текста твоего плагина ?! Вообще-то, чтобы что-то может быть ускорилось, достаточно было закомментировать одну строку: atourexpense = api("/api/lk/main/atourexpense"); Если обращение к апи не работает, то там подвисает на 2 секунды (ожидая ответа). Всё остальное убранное (если тебя миллисекунды не напрягают) не затормозит.

sham1975: y-greek пишет: Вообще-то, чтобы что-то может быть ускорилось, достаточно было закомментировать одну строку: atourexpense = api("/api/lk/main/atourexpense"); Если обращение к апи не работает, то там подвисает на 2 секунды (ожидая ответа). Всё остальное убранное (если тебя миллисекунды не напрягают) не затормозит. ну а всё-таки :) ... вот ещё подрезал текст ... такой текст тоже работает у меня быстро и без нареканий !!! ... что ещё можно удалить без проблем ?! ... если не трудно, ткни меня носом в те "места" !!! :) // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Descript : Баланс Мегафона с ручным вводом капчи function main(){ // минимальная задержка (милисекунды), все задержки external.sleep(N*ms), в случае проблем можно попытаться увеличить var ms = 100; var pageN = 0; // wait browser function wb() { while(ie.busy) external.sleep(ms); } 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; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(2*ms); wb(); external.sleep(2*ms); response.pages[pageN++] = doc.documentElement.outerHTML; // возвращает JSON из api url function api(url) { // чтобы загрузить страницы API, в iframe помещаем скрипт var tag = doc.createElement("iframe"); doc.body.appendChild(tag); tag.contentWindow.document.open(); var script = '\ <script>\ xhr = new XMLHttpRequest();\ xhr.open("GET", "https://lk.megafon.ru' + url + '");\ xhr.send();\ xhr.onload = function(){ document.body.innerHTML = xhr.response; }\ </script>'; // записываем скрипт в iframe tag.contentWindow.document.write('<body>' + script + '</body>'); wb(); // до 20*ms ждём что содержимое будет соответствовать формату JSON, не очень правильно, больше ничего не придумал var response = ""; for(i=0; i<20; i++){ tmp = tag.contentDocument.body.innerHTML; if(tmp.match(/^\s*\{[\s\S]*\}\s*$/) ) { response = tmp; break; } external.sleep(ms); } // заменяем &nbsp; на пробел response = response.replace(/&nbsp;/gm, " "); return response; } // возвращает object из строки json function json(str) { try { var obj = eval('(' + str + ')'); } catch(e) { obj = str; } return obj; } // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); из предыдущего удалил ещё три строчки: «// кликаем по всем стрелкам - данные на странице подгружаются динамически var arrows = doc.getElementsByClassName("lk_svg lk_svg_arrow"); for(i=0; i<arrows.length; i++) { arrows.click(); external.sleep(2*ms); } » получается, тоже наф не нужны мне !!! :) ... ещё что можно выкинуть к едрене-фене ?! ... пожалуйста, подскажи !!!


sham1975: охренеть ! :) ... удалил ПОЧТИ всё ... вот ИТОГОВЫЙ текст, с которым всё отрабатывает быстро и замечательно !!! ... ура ! // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Descript : Баланс Мегафона с ручным вводом капчи 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; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); response.pages[pageN++] = doc.documentElement.outerHTML; // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); НО ... я всё же хотел бы услышать совета от профи :( ... что ещё можно удалить ? ... вот, например, осталась пара строчек: «var pageN = 0;» «response.pages[pageN++] = doc.documentElement.outerHTML;» они нужны мне или нет ? уже на основе этого текста можно назвать СПЕЦПЛАГИН "получение ТОЛЬКО БАЛАНСА от мегафона" !!! :) ... текст получился ОЧЕНЬ коротким :) ... эх, ещё бы что вырезать для суперминимализма ! :) ... так проще мне потом будет у Вас, профи, что-то просить исправить !

y-greek: sham1975 пишет: они нужны мне или нет ? Как я писал, реально может замедлять (на 2 с.) только одна строка. И это совершенно несерьёзно учитывая сколько грузится лк. Вообще-то, я даже подумываю о введении случайной паузы в лк, чтобы они (мегафоны, блин) не заморочились про ботов. А микросекунды я не собираюсь экономить. Может потому у тебя и не работает нормально что ты уже в системе наоптимизировал...

sham1975: y-greek пишет: Как я писал, реально может замедлять (на 2 с.) только одна строка. И это совершенно несерьёзно учитывая сколько грузится лк. Вообще-то, я даже подумываю о введении случайной паузы в лк, чтобы они (мегафоны, блин) не заморочились про ботов. А микросекунды я не собираюсь экономить. Может потому у тебя и не работает нормально что ты уже в системе наоптимизировал... у меня мощный комп ... ничего не оптимизировал :( ... даже и не умею это делать :( ... 32 гига оперативной памяти !!! ... Процессор Intel® Core™ i7-7700K (4500 мгц тактовая частота) ... 100 мбит инет ... и, да, ИЗЮМИНКА моя ЗАМЕЧАТЕЛЬНАЯ !!! - SSD накопитель A-DATA XPG GAMMIX S11, 480Гб, M.2 2280, PCI-E x4, NVMe (очень быстрый !!!) ну, пожалуйста, ткни ... что ещё можно выкинуть из этого текста без проблем !!! // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Descript : Баланс Мегафона с ручным вводом капчи function main(){ var pageN = 0; // wait browser function wb() { while(ie.busy) external.sleep(100); } function a(e){ window.alert(e); } // главная мантра победы ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); response.pages[pageN++] = doc.documentElement.outerHTML; // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); «var pageN = 0;» «response.pages[pageN++] = doc.documentElement.outerHTML;» они нужны мне или нет ? ... ещё может что лишнее есть ... пожалуйста ! ... извини, что отвлекаю и, может быть, даже напрягаю :( ...

y-greek: sham1975 пишет: ну, пожалуйста, ткни ... что ещё можно выкинуть из этого текста без проблем !!! function a(e){ window.alert(e); } Забыл закомментировать. Это для отладки чтобы быстрее было писать alert. Кстати, в моём парке на деревянной скамейке было ножом вырезано: "alert('х.й');" Сразу видно какой крутой чувак накорябал...

sham1975: y-greek пишет: function a(e){ window.alert(e); } Забыл закомментировать. Это для отладки чтобы быстрее было писать alert. Кстати, в моём парке на деревянной скамейке было ножом вырезано: "alert("х.й");" Сразу видно какой крутой чувак накорябал... удалил ... работает ... ИТОГОВЫЙ текст плагина "Получаем ТОЛЬКО БАЛАНС от Мегафона" , значит, пока такой: // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Types : y-greek на основе 'leha3d (Pasha edit)' от 23.07.2019 и 28.01.2019 // Descript : Баланс Мегафона с ручным вводом капчи function main(){ var pageN = 0; // wait browser function wb() { while(ie.busy) external.sleep(100); } // главная мантра победы ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); response.pages[pageN++] = doc.documentElement.outerHTML; // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); а эти две строчки, значит, нужны что ли ? «var pageN = 0;» «response.pages[pageN++] = doc.documentElement.outerHTML;» больше ничего нельзя удалить, чтобы работало без проблем ?!

sham1975: рискнул ... удалил и эти две строчки ! ... «var pageN = 0;» «response.pages[pageN++] = doc.documentElement.outerHTML;» ... РАБОТАЕТ быстро и без проблем !!! ... ИТОГОВЫЙ текст "суперминимализма" получился таким: // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Types : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Descript : Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!! function main(){ // wait browser function wb() { while(ie.busy) external.sleep(100); } // главная мантра победы ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); y-greek, что-то ещё можно вырезать без ущерба для работы плагина ?! ... назову его, например, так :) - "Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!!" пысы: оказывается, как мало надо было текста для решения проблемы с капчей ! :) ... ОГРОМНОЕ СПАСИБО !!!

y-greek: sham1975 пишет: а эти две строчки, значит, нужны что ли ? «var pageN = 0;» «response.pages[pageN++] = doc.documentElement.outerHTML;» Не нужны. И просто методом тыка можно было проверить нужны или нет.

sham1975: y-greek пишет: Не нужны. И просто методом тыка можно было проверить нужны или нет. методом тыка, конечно, можно ... повезло, работает ... но иногда удалишь то, се ... и не можешь потом понять, что не так, к сожалению ... всё-таки, вы профи, ваше "детище", уж вы то точно знаете, что к чему ! ... лучше, если есть возможность, уточнить у автора, что да как и для чего ... y-greek, в итоговом тексте ещё можно что-то вырезать без ущерба ?! ... и, учитывая, высокую общую производительность моего компьютера и стабильный интернет , может мне и задержки и не нужны от слова совсем ... значения всякие, типа external.sleep(200) и подобные им, критичны ?! ... может и ждать мне ничего не надо особо ? ... подозрения в ботоводстве со стороны мегафона, полагаю, мне не особо будут грозить - один запрос в сутки значения баланса не шибко их испугает ! :) на всякий случай и в этом сообщении продублирую ИТОГОВЫЙ вариант плагина "Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!!" : // FullName : Мегафон-JSON // ShortName : MgfJSON // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Types : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Descript : Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!! function main(){ // wait browser function wb() { while(ie.busy) external.sleep(100); } // главная мантра победы ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); СПАСИБО ОГРОМНОЕ за ПОМОЩЬ и ТРУД !!!

y-greek: sham1975 пишет: всё-таки, вы профи Я не профи. Но немножко подвизался... И Ваш интерес к программированию однозначно приветствую. Но лучше в личку.

sham1975: y-greek пишет: Я не профи. Но немножко подвизался... И Ваш интерес к программированию однозначно приветствую. Но лучше в личку. ни фига себе "немножко подвизался" ! ... я в программировании полный ноль и интереса особого нет ... прога удобная, вот и сам напрягаюсь и других напрягаю :( ... особо и не понимаю, откуда вы всё это достаёте у мегафона и прочих "опсосов" ?! ... а почему лучше в личку ?! ... модераторов тут, слава богу, вроде нет ... пиши сколько влезет, никто не запрещает :) ... вообще, хорошо, что сайт живой ... не было бы его, то фиг бы кто помог с решением возникающих "палок в колёса" :( пысы: ну, и, всё-таки, в итоговом тексте ещё можно что-то вырезать лишнее ? ... хотя, конечно, и в таком виде уже текста особо и не осталось :) « var doc = ie.document; » - эта строчка нужна ?

comprech: sham1975 пишет: « var doc = ie.document; » - эта строчка нужна ? Нужна, т.к. далее по тексту идут многократные обращения к переменной doc. sham1975, как браузер по твоему скрипту понимает, что надо открыть страницу по кнопке войти после программного заполнения логина и пароля? Не вижу команды на это действие между операцией заполнения логина/пароля и извлечением данных из исходного кода веб-страницы. Или сам мышкой нажимаешь кнопку в браузере?

y-greek: comprech пишет: sham1975, как браузер по твоему скрипту понимает, что надо открыть страницу по кнопке войти после программного заполнения логина и пароля? А дальше ручками надо капчу ввести.

sham1975: вот и всё :) ... строчку с « var doc = ie.document; » оставил ... ОКОНЧАТЕЛЬНЫЙ текст плагина "Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!!" : // FullName : Мегафон // ShortName : MgfBal // Version : 18.10.2019 // Icon : 789C73F235636100033320D600620128666450804840E591C1FFFFFFB1E237DF1F32CCBF91C7B0F66E13C3D3AFD771AA43C63FFE7C6688D8C5CC10B69381E1FCEB6D601A19171ED1C0A9F7CCAB4D286AB1E987E15B1F8EA1E9FF87A1069F7E10FEF7FF2F5C7FDC5E1E9CFA41F265C7F4C1EA57DDA963C838280516CB3C2803D78FCD7C64FDFD1743C1F4D9D79B196A4E5AC0F5806850D8E2D38F0F5F7EBB8761F59D7AAC725B1FF4E1751F084FBF92C8B0FDD124BC76E0D33FE95214C3B73F1F71EA8BDDC385573FC88FB8E441E2317B38F0EA87F96FF2A56892DD0F731BA130C225F7EFFF1F14FDBFFE7E235AFFA5B7BB71E683C5378B71EA8FD9C389926E09E10B6F7680E9EBEF0FE1540300F7C7D83E // Author : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Types : на основе 'leha3d (Pasha edit)', 'y-greek' от 28.01.2019, 23.07.2019, 18.10.2019 // Descript : Получаем 'ТОЛЬКО БАЛАНС' от Мегафона с ручным вводом капчи !!! function main(){ // wait browser function wb() { while(ie.busy) external.sleep(100); } // главная мантра победы ie = external.newActiveXObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("https://lk.megafon.ru/login/"); wb(); var doc = ie.document; // заполняем login/password if(doc.all.j_username) { doc.all.j_username.value=request.loginValue; doc.all.j_password.value=request.passwValue; } // ждём входа в lk tmp = doc.title; while (doc.title == tmp) external.sleep(200); wb(); external.sleep(200); // Баланс html=doc.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(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<div.*<h4>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); } else if (res=regexp.exec(html)) { tmp=res[0].replace(/ |&nbsp|\xA0/g, ""); // Удаляем пробелы tmp=tmp.replace(",", "."); // Заменяем запятую на точку tmp=tmp.replace(/<i.*<p>/gm, ""); tmp=tmp.replace(/\u2212/, "-"); // Корректировка Unicode минуса tmp=tmp.replace(/<i(.*)red.>/gm, ""); // Для отрицательного баланса response.Balance=parseFloat(tmp); }; // Выходим fin(); function fin() { ie.Navigate("https://lk.megafon.ru/logout/"); wb(); ie.quit(); } }; main(); работает всё быстро и без нареканий :) ... у меня так ... после запроса по телефону моментально всплывает автоматически окно браузера с уже введёнными плагином логином и паролем, далее я вручную ввожу капчу из шести цифр, указанных в капче, и после ввода капчи нажимаю энтер ... после этого окно браузера практически моментально (у меня) закрывается, а в программе и в БД программы уже есть полученный плагином ТОЛЬКО БАЛАНС !!! УРА !!! ОГРОМНОЕ ВСЕМ СПАСИБО !!!

pasha: y-greek, спасибо! sham1975, и всё же попробуй проверить работу плагина на других ПК leha3d пишет: Кто-нибудь проверял? Хотел проверить, но моих знаний не хватило для этого. Судя по тексту плагина, они косят под мобильный ЛК мегафона: меняют юзерагент, получают токен с помощью которого получают доступ в ЛК

sham1975: pasha пишет: sham1975, и всё же попробуй проверить работу плагина на других ПК До других ПК я точно не скоро доберусь ... Меня весьма устроил и "сборный" вариант, получившийся в итоге :) ... Всё-таки, мне проще ... Необходимо только получение баланса для отслеживания "сроков" в БД :) Ещё раз СПАСИБО !

sham1975: апну тему ... а то "ауты" спамом рекламным форум "загадили" :(

y-greek: sham1975 пишет: апну тему ... а то "ауты" спамом рекламным форум "загадили" :( А по-русски, или по-английски (не на суржике), или по сути..? А то ничего не понял.



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