Тема: 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.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

