Что нового

[Автоматизация] Цикл For $i с места где завис

defens

Знающий
Сообщения
89
Репутация
5
Каким значением нужно дописать цикл или другое условие вписать, чтоб цикл начался с того места где простой времени?
Вот вроде более подходящее из всего что нашел на сайте, но не срабатывает.
http://autoit-script.ru/index.php/topic,7743.0.html

Код:
Func _Script() ; ОСНОВНОЙ ПЕРЕХОД
	;.....
For $i = GUICtrlRead($Input1) To GUICtrlRead($Input2)
	GUICtrlSetData($Label4, $i)
	  	  $starttime = _Timer_Init()
Sleep(20)
   ;.....
      _IENavigate($oIE, '......')
   ;.....
if _Timer_Diff($starttime) > 6000 Then ; перейти заново на то что в ($Label4) где дольше 6 сек. весит
   ;.....
      _IENavigate($oIE, '......')
   ;.....
if _Timer_Diff($starttime) > 6000 ; перейти заново на то что в ($Label4) где дольше 6 сек. весит
	_FileWriteLog(@ScriptDir & "\log.log", $i)
Next

EndFunc
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
Код:
if _Timer_Diff($starttime) > 6000 Then ExitLoop (Или Return)


не помогло
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
if _Timer_Diff($starttime) > 6000 Then ContinueLoop
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
тогда он переходит в следующему значению $i, а надо чтоб повтор если простой
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну тогда
Код:
If _Timer_Diff($starttime) > 6000 Then
 $i -= 1
 ContinueLoop
EndIf
 

beve

Осваивающий
Сообщения
104
Репутация
31
Код:
Func _Script() ; ОСНОВНОЙ ПЕРЕХОД
;.....
For $i = GUICtrlRead($Input1) To GUICtrlRead($Input2)
	GUICtrlSetData($Label4, $i)

	While 1
		$starttime = _Timer_Init()
		Sleep(20)
		;.....
		_IENavigate($oIE, '......')
		;.....
		if _Timer_Diff($starttime) > 6000 Then 
			ContinueLoop
		else
			Exitloop
		endif
	WEnd

	_FileWriteLog(@ScriptDir & "\log.log", $i)
Next

EndFunc
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
C2H5OH

вроде работает позже испытаю на всем списке с просмотром log файла
P.S: лог не пишет что была рекурсия, как ее кстати тут избежать чтоб например раза три-четыре пробовал перезагрузить, если время все равно превышает, то переходил к следующему тогда

beve
для проверки времени загрузки(простоя) страницы вписать второй цикл:
Код:
While 1
        $starttime = _Timer_Init()
        Sleep(20)
        ;.....
        _IENavigate($oIE, '......')
        ;.....
        if _Timer_Diff($starttime) > 6000 Then 
            ContinueLoop
        else
            Exitloop
        endif
    WEnd


или
Код:
if _Timer_Diff($starttime) > 6000 Then 
            ContinueLoop
        else
            Exitloop
        endif


но указать во втором случае Exitloop2
 

beve

Осваивающий
Сообщения
104
Репутация
31
defens [?]
чтоб например раза три-четыре пробовал перезагрузить, если время все равно превышает, то переходил к следующему тогда
Делайте по совету C2H5OH но добавте переменную-счетчик:
Код:
;.....
Local $Count
For $i = GUICtrlRead($Input1) To GUICtrlRead($Input2)
$Count+=1
;.......
;.......
;.......
If _Timer_Diff($starttime) > 6000 Then 
	if $Count=4 then 
		$Count=5  ;для лога 
	else
		$i -= 1
		ContinueLoop
	endif
EndIf
;.......
;.......
;.......
;в логе можете выделить неудачную обработку
if $Count=5 then
_FileWriteLog(@ScriptDir & "\log.log", $i&" - неудача")
else
_FileWriteLog(@ScriptDir & "\log.log", $i)
endif
$Count=0
Next
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
Все отлично работает, всем спасибо за помощь, тему закрываю.
 
Верх