1

Тема: VBScript: получаем баланс мобильников МТС

Есть несколько (много) мобильников МТС, на всех включена ИССА (Интернет-Помощник МТС). Задача - получать с них баланс, желательно не мучаясь с вводом множественных телефонов и паролей.
Вводный файл - phones.txt, выглядит примерно так:

имя       номер телефона    пароль
-----------------------------------
телефон1   +79111234567     1234567
телефон2   +79111234567     1234567

В теле phones.txt допустимы как пустые строки, так и строки с произвольным текстом, пока в них не встречается объект, похожий на телефонный номер (начало на +7 и длина номера - задаётся в скрипте). Разделители - пробелы, причем их может быть любое количество между "полями". Также, после пароля, через пробел может идти любой текст, например pin-коды и другие комментарии.
Собственно, сам скрипт, balance.vbs, выводит информацию в новое окно IE:

Const PhonePrefix = "+7"      ' +7...
PhoneLen = 12                 ' полная длина телефонного номера
PrefixLen = Len(PhonePrefix)  ' = 2

'PrefixLen = 0               ' установить, если в форму надо вводить полный номер телефона (с +7)

Const Curr = " руб."

Const ForReading = 1
Const ForWriting = 2

Function GetBalance(phone, password, balance)
 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Visible = False
 'objIE.Navigate "https://www.spb.mts.ru/selfcare/" ' МТС Санкт-Петербург
 objIE.Navigate "https://ihelper.mts.ru/selfcare/" ' МТС Москва
 While objIE.Busy
    WScript.Sleep 10
 Wend
 Set objForm = objIE.Document.forms("aspnetForm")
 objForm.elements("ctl00$phContent$tbPhoneNumber").value = phone
 objForm.elements("ctl00$phContent$tbPassword").value = password
 objForm.elements("ctl00_phContent_btnEnter").click

 While objIE.Busy
    WScript.Sleep 10
 Wend

 Set objForm = objIE.Document.forms("aspnetForm")

 balance = objForm.elements.all("customer-info-balance").InnerHTML
 objIE.quit

End Function

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set PhoneFile = objFSO.OpenTextFile("phones.txt", ForReading)

Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"   
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 300
objExplorer.Height = 400
objExplorer.Left = 0
objExplorer.Top = 0

Do While (objExplorer.Busy)
    Wscript.Sleep 10
Loop    

objExplorer.Document.Title = "Balance Information"   
objExplorer.Visible = 1  
objExplorer.Document.Body.InnerHTML = ""

With PhoneFile
    Do Until .AtEndOfStream
        strLine = .ReadLine
        If (Trim(strLine) <> "")  and (Instr(strLine,PhonePrefix) > 0) Then
           alias = mid(strline,1,Instr(strLine,PhonePrefix)-1)                   ' название телефона
           tmp = mid(strline,Instr(strLine,"+7")+PrefixLen,255)                  ' эта строка начинается с номера телефона (без +7)
           phone = mid(tmp,1,Instr(tmp," ")-1)                                   ' телефон тут (без +7)
           tmp = Trim(mid(strline,Len(alias) + Len(phone) + 1 + PrefixLen,255))  ' эта строка начинается с пароля
           pass = Trim(mid(tmp,1,Instr(tmp," "))) ' если после пароля еще есть пробелы - отделим их
           if pass = "" Then                      ' если нету - и не надо...
             pass = tmp
           End If 

           alias = Trim(alias)                    ' обрезаем пробелы

'           wscript.echo alias & ":" & phone& ":" & pass & ":"   ' ****************** отладка
           If (Len(phone) = PhoneLen - PrefixLen) Then
              Call GetBalance(phone,pass, sum)
              objExplorer.Document.Body.InnerHTML = objExplorer.Document.Body.InnerHTML & "<B>" & alias & "</B>" & ": " & sum & Curr & "<BR>"
'              wscript.echo alias & ":" & phone & ":" & sum  ' ****************** отладка
           End If
        End If
    Loop
    
    .Close
End With

objExplorer.Document.Body.InnerHTML = objExplorer.Document.Body.InnerHTML & "<BR><B>OK</B>"

Москва и Санкт-Петербург отличаются только одним URL (см. текст скрипта).
Автор скрипта - sandy00.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: получаем баланс мобильников МТС

МТС на титульной странице интернет-помощника добавили галочку "я ознакомлен с пользовательским соглашением", поэтому в скрипт необходимо добавить одну строчку
перед:

 objForm.elements("ctl00_phContent_btnEnter").click

добавить строку, чтобы получилось в итоге:

 objForm.elements("ctl00_phContent_cbAgreement").click
 objForm.elements("ctl00_phContent_btnEnter").click