Что нового

[Автоматизация] Как зациклить сбор и дополнения инфы в один файл с обновляющейся веб-страницы

gezan1

Новичок
Сообщения
47
Репутация
0
Здравствуйте.
Скрипт Выдает данные в Excel только один раз, потом просто висит в трее.А надо чтоб новые обновления с сайта добавлял в Excel.Как это можно исправить....

Код:
#include <IE.au3>
#include <Array.au3>
#include <Excel.au3>
$sFilePath1 = @ScriptDir & "\ф.xls" ;файл Test.xls должен находится в одной папке со скрипто
 $oExcel = _ExcelBookOpen($sFilePath1, 1)

$Url= 'https:'
$oIE = _IECreate($Url)
$sText=_IEDocReadHTML ($oIE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
while 1
$sHTML = _IEDocReadHTML($oIE)
$sSubString = '(?si)<TR>.*?<TD colSpan=.*?>.*?<SPAN class=evtNum>.*?</SPAN>(.+?)<.*?">(.+?)<.*?">(.+?)<.*?">(.+?)<'
if StringInStr($sHTML, $sSubString) = 0 then
_Action()
endif
sleep (1000*60*2)
$sSubString+=1
wend
func _Action()
$asResult = StringRegExp( $sText,$sSubString ,  3 )
_ExcelWriteArray($oExcel, 1, 1,$asResult,1,1 )  
 $oExcel.Columns('A:F' ).EntireColumn.AutoFit 
endfunc
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Включите в цикл соединение с сайтом
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Зачем? Страница открыта и обновляется автоматом.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Попробуйте использовать

Код:
_INetGetSource


вместо

Код:
_IEDocReadHTML
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
У меня происходит выборка с сайта один раз. Просто не могу это зациклить добавление обновлений с интервалом в 2минуты в Excel.Не охота переделывать под БЛОКНОТ, там вроде есть функция добавления, но сами записи выглядят в БЛОКНОТе не эротично.
Про
Код:
_INetGetSource

знаю, просто сейчас в стадии разработки скрипта лучще видеть страницу открытой
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Лично меня настораживают эти строки из справки к _IEDocReadHTML

Эта функция возвращает исходный код документа после любой модификации на клиентской стороне (например AutoIt-ом или клиентской стороной JavaScript). Это может отличаться от того, что показывает браузер при вызове в контекстном меню "Просмотр HTML-кода" или от результата возвращаемого функцией _INetGetSource.

Не охота переделывать под БЛОКНОТ
не совсем понял к чему тут блокнот...
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Я сам ничего не понимаю в справке, просто блуждаю в потемках по форуму

Функция
Код:
FileWrite


Записывает данные в конец файла. Но она не экселевская??? (БЛОКНОТ), или нет?
 

beliy

Продвинутый
Сообщения
372
Репутация
72
FileWrite записывает в файл данные в текстовом или бинарном виде. Только опять не понятно зачем тебе FileWrite если в твоем коде ты записываешь в ексель через функцию _ExcelWriteArray.
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Полный уход в сторону от первоначальной проблемы. :(
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Полный уход в сторону от первоначальной проблемы. :(
В том то и дело что тебе предложили вариант решения, ткнули в примечание в справке, но тебе захотелось вспомнить блокнот и функцию FileWrite. В самом цикле проблемы не вижу, разве что строку
Код:
$sSubString+=1

можно убрать.
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Спасибо mef-t
Действительно Нужно еще обновлять HTML в цикле.
Тема решена.
Но хочу добавить следующий вопрос?
А как все это сохранять???
Происходит постоянное обновление данных без сохранения ранее записанных.Как это устранить?
axlwor в теме Excel копирование приводит код, но как его привязать к моему циклу?
Код:
#Include <excel.au3>

;Ошибки нигде не обрабатываю )
;Переменные нигде не объявляю )

;Имя и путь (папка запуска) первого/второго файла
$file1 = @ScriptDir & "\Test1.xls"
$file2 = @ScriptDir & "\Test2.xls"

;Открываем его. Невидимка. Берем данные с АКТИВНОГО листа
$oExcel1 = _ExcelBookOpen($file1 , 0 , True)
$oExcel2 = _ExcelBookOpen($file2 , 0 , True)

;Третий файл будет результатом
$oExcel = _ExcelBookNew(0)

;Только заголовок первого файла
$aArray = _ExcelReadSheetToArray($oExcel1, 1, 1, 1)
;Все данные с листа в массив без первой строки
$aArray1 = _ExcelReadSheetToArray($oExcel1, 2)
$aArray2 = _ExcelReadSheetToArray($oExcel2, 2)

;Пишем заголовок
_ExcelWriteSheetFromArray($oExcel, $aArray, 1, 1, 1, 1)
;Пишем первый/второй файлы
_ExcelWriteSheetFromArray($oExcel, $aArray1, 2, 1, 1, 1)
_ExcelWriteSheetFromArray($oExcel, $aArray2, 1+UBound($aArray1), 1, 1, 1)

;Сохраняем (перезаписываем) результат
_ExcelBookSaveAs($oExcel, @ScriptDir & "\Test.xls", "xls", 0, 1)

;Закрываем без сохранения первый/второй/третий файл
_ExcelBookClose($oExcel1, 0, 0)
_ExcelBookClose($oExcel2, 0, 0)
_ExcelBookClose($oExcel, 0, 0)
MsgBox (0,0,"Закончили работу!")
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Я прошу прощения, с кодом для "excel" не знаком. Да и сам язык только начал осваивать, потому примера не даю.
Но суть в следующем.
1. создаем, или открываем файл "excel"
2. запускаем цикл
в цикле
3. считываем данные с сайта
4. записываем их в следующую строчку "excel"
цикл закончен
7. сохраняем открытый файл

Если пункт 4 реализовать нельзя (не совсем понял, к чему относятся параметр "$iStartRow", к массиву или листу "excel"), то
4. считываем лист "excel" в массив "_ExcelReadSheetToArray"
5. добавляем в массив записи, считанные с сайта (как сделать, ищи сам)
6. записываем их "excel", т.е. просто поверх перезаписываем.
Если возможен вылет программы, но сохранить данные нужно, то сохраняйте файл на каждом шаге цикла, или через шаг.

P.S. Поспешил. В зависимости от объема, если он не планируется быть "беспредельно" большим:
Если пункт 4 реализовать нельзя, то
4. добавляем в массив записи, считанные с сайта (как сделать, ищи сам)
после выхода из цикла записываете полученный массив в файл и сохраняете его.
 
Верх