Что нового

Залогиниться, спарсить нужную информацию и вывести в трей

den4ik

Новичок
Сообщения
21
Репутация
0
Друзья, помогите с решением следующей задачи:
пишу программу для автоматизации тривиальных задач тех. поддержки интернет провайдера
есть кабинет интернет пользователя
нужно спарсить информацию о состоянии депозита и остатка трафика, бьюсь долго и разными методами, в XML который формирует биллинг нет нужной информации

вот пример кода, который приводит в нужное нам место, а как вытащить нужную инфу не могу разобраться

Код:
#include <IE.au3>

$Base_Url = "https://abills.nettv.uz"
$User = '1570'
$Pwd = '12341234'
$test = _IEAutoLogin($Base_Url, $User, $Pwd)

Func _IEAutoLogin($_sUrl, $_sUsername, $_sPwd)
    Local $iIndex = 0
    Local $oInputs, $oButton, $oIE, $oForm, $oLogin, $oPasswd

    $oIE = _IECreate($_sUrl)
    $oForm = _IEFormGetObjByName($oIE, 0)
    $oLogin = _IEFormElementGetObjByName($oForm, "user")
    $oPasswd = _IEFormElementGetObjByName($oForm, "passwd")

    _IEFormElementSetValue($oLogin, $_sUsername)
    _IEFormElementSetValue($oPasswd, $_sPwd)
    $oButton = _IEFormElementGetObjByName($oForm, "logined")
    _IEAction($oButton, "click")
    Sleep(1000)

 _IELoadWait($oIE)
$sSid = ''
$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        $sLinkUrl = $oLink.href
        $sLinkHtml = $oLink.innerHTML
        If StringInStr($sLinkHtml, "Internet") Then
            $tmp = StringRegExp($sLinkUrl, '.*?sid=([^&]*)', 3)
            If IsArray($tmp) Then
                $sSid = $tmp[0]
            Else
                $sSid = ''
            EndIf
            ConsoleWrite(StringFormat("+----------+\r\nFound link:\r\nURL: %s\r\nHTML: %s\r\nlink sid: %s\r\n+----------+\r\n", $sLinkUrl, $sLinkHtml, $sSid))
              _IENavigate($oIE, $_sUrl & "/index.cgi?index=44&sid="&$sSid)

_IELoadWait($oIE)
 $oInputs = _IETagNameGetCollection ($oIE, "a")
$file=_IETagNameGetCollection ($oIE, "a")
$str=StringRegExpReplace($file,'(?si).*?\<td\>((?:(?!\<\td\>).)+)\<\td\>).*','\1')
MsgBox(32,'',$file)
 ExitLoop
        EndIf
	 Next
EndIf

EndFunc   ;==>_IEAutoLogin


хотелось бы что бы выполнялось все в фоне и не видимо для пользователя
и вытащить нужно данные из верхней таблицы "Предоплата" - Тип 0: , Всего и Осталось в сообщение в трее
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
den4ik [?]

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Для лл:
Код:
<table class="kabinet-styled_table" id="kabinet-filter_table" summary="">
<tbody><tr><td class="tcaption" colspan="3">Предоплата</td></tr>
<tr><td class="cel_border" colspan="3"><table>
<tbody><tr><th class="table_title"> Тип</th><th class="table_title">Начало</th><th class="table_title">Конец</th><th class="table_title">Начало</th><th class="table_title">Всего (MB)</th><th class="table_title">Осталось (MB)</th><th class="table_title">Оверквота (MB)</th></tr>
<tr class="odd marked" id="row_1"><td>0:/ 12</td><td>00:00:00</td><td>24:00:00</td><td>2015-12-12</td><td>0</td><td>0</td><td>0</td></tr>
<tr class="odd" id="row_2"><td>1:/ 12</td><td>00:00:00</td><td>24:00:00</td><td>2015-12-12</td><td>0</td><td>0</td><td>0</td></tr>
</tbody></table>
</td></tr></tbody></table>


Добавлено:
Сообщение автоматически объединено:

Код:
$oTable = _IEGetObjById($oIe, 'kabinet-filter_table')
$oSubTable = _IETableGetCollection($oTable, 1)
$aTableData = _IETableWriteToArray($oSubTable)
_ArrayDisplay($aTableData)



Добавлено:
Сообщение автоматически объединено:

В массиве будет:
Тип0:/ 121:/ 12
Начало00:00:0000:00:00
Конец24:00:0024:00:00
Начало2015-12-122015-12-12
Всего (MB)00
Осталось (MB)00
Оверквота (MB)00
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
подскажите пожалуйста куда в мой кусок кода вставить ваш код? не получается вывести данные, все по нулям
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вставляйте после того, как загрузилась статистика, ваш код не смотрел :smile:
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
вставляю после того, как открываю статистику
Код:
_IENavigate($oIE, $_sUrl & "/index.cgi?index=44&sid="&$sSid)

и..результат 0 :-[
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Попробуйте так:
Код:
$oTable = _IETableGetCollection($oIe, 3)
$aTableData = _IETableWriteToArray($oTable)
_ArrayDisplay($aTableData)
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
теперь бы это все в фоне и с выводом в трей :scratch:
попробую написать, если есть идеи как это реализовать буду очень рад
 

uritalex

Новичок
Сообщения
197
Репутация
3
А для скрытности используйте так :
Код:
$oIE = _IECreate($_sUrl,0,0)   ;скрыть отображение браузера
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
uritalex спасибо,
а как из из массива забрать данные, например я сейчас получаю вот это:

RowCol0Col1Col2Col3
[0]Всего МБ1500015000
[1]Осталось МБ1500015000
[2]Оверквота000

а мне нужно без "Col3"
и вообще, можно ли как то маркировать данные из этих ячеек в переменные что бы потом подставлять в трей или сообщение?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
den4ik [?]
подставлять в трей или сообщение
Код:
$sText = StringFormat("%s\t(%d) (%d)\n%s\t(%d) (%d)\n%s\t(%9d) (%7d)\n", _
                      $aTableData[0][0], $aTableData[0][1], $aTableData[0][2], _
                      $aTableData[1][0], $aTableData[1][1], $aTableData[1][2], _
                      $aTableData[2][0], $aTableData[2][1], $aTableData[2][2])
TrayTip("Читаем справку!", $sText, 10)
 
Верх