Что нового

Поиск и ожидание ссылки перехода, продолжение выполнения скрипта

Криворукий

Новичок
Сообщения
17
Репутация
0
Столкнулся с проблемой: скрипт должен ожидать появления ссылки для перехода на неё ( она может появиться как через 1 секунду, так и через несколько часов).
Он всё время должен смотреть не появилась ли ссылка, как только она появляется на странице, он переходит по ней, для выполнения дальнейших действий. В случае если ссылка не появляется, скрипт должен ждать её появления (на странице присутствует автоматическое обновление каждые 5 секунд). Написал такой вариант :

Код:
dim $var
Do
_IENavigate($oIE, 'некая ссылка, появление которой необходимо дождаться/?approve=1')
ExitLoop
Until $var=1
; продолженние выполнения других действий, после выполнения условий поиска


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

Спасибо за ответы
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Это из-за ExitLoop
Он пробегается в цикле один раз по строчке с поиском ссылки, потом видит ExitLoop и выходит из цикла
 
Автор
К

Криворукий

Новичок
Сообщения
17
Репутация
0
Убрал из фрагмента скрипта
Код:
ExitLoop


по ссылке всё равно не переходит((( Не пойму в чём проблема
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Дайте полный код вашего скрипта и / или опишите подробнее проблему...
 
Автор
К

Криворукий

Новичок
Сообщения
17
Репутация
0
Часть скрипта, где проблема в автоматизации:

Код:
#Include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("***********", 1150, 500, -1, -1)
$oIE = ObjCreate("Shell.Explorer.2")
$hiE = GUICtrlCreateObj($oIE, 2, 2, 1140, 492)
GUISetState(@SW_SHOW,$Form1)


; Логин на сайте
_IENavigate($oIE, '******.ru')
$Login="**********"
$Parol="**********"
_IELoadWait ($oIE)
$oForm = _IEFormGetCollection ($oIE, " 0 ")
$oUser =_IEGetObjByName($oIE,"auth_name")
$oPass =_IEGetObjByName($oIE,"auth_pass1")
_IEFormElementSetValue ($oUser, $Login)
_IEFormElementSetValue ($oPass, $Parol)
MouseClick('left', 174, 547 )  ; нажимаем на кнопку войти
Sleep (5000)
_IENavigate($oIE, '*****    &act=app&step=1')
Sleep (4000)

dim $var = 0
Do
_IENavigate($oIE, '*********.php?approve=1')
Sleep (2000)
Until $var=1

MouseClick('left', 948, 411 ) 
Sleep (2000)


После того как убрал повторение, переход на ссылку '*********.php?approve=1' происходит, и следующая страница, начинает всё время обновляться , дальнейшие действия в скрипте не происходят (хоть и прописанны)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я бы сделал так:
Код:
dim $var = 0
Dim $iCount = 0
Do
_IENavigate($oIE, '*********.php?approve=1')
If @error = 0 Then ExitLoop
If $iCount >= 10 Then
ExitLoop
Else
$iCount +=1
EndIf
Sleep (2000)
Until $var=1

P.S. И по возможности я бы заменил MouseClick на что-нибудь понадёжнее... :smile:
 

getigor01

Новичок
Сообщения
23
Репутация
2
Как-то так :scratch:
Код:
Func _Wait()
Local $sWait,$Wait,$exit = false
do
	$sWait = _IETagNameGetCollection($oIE, 'a')
	For $Wait In $sWait
		If StringRegExp($Wait.href,"некая ссылка, появление которой необходимо дождаться/?approve=1") Then
			_IEAction($Wait, 'click')
			$exit = True
			ExitLoop
		EndIf
	Next
Until  $exit = true
EndFunc
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
А так?
Код:
Dim $iCount = 0
While 1
    ConsoleWrite("Count: " & $iCount & @CRLF)
    $oLinks = _IELinkGetCollection($oIE)
    If IsObj($oLinks) Then
        For $oLink In $oLinks
            $sLinkUrl = $oLink.href
            $sLinkHtml = $oLink.innerHTML
            If $sLinkHtml = "Подтвердить" Then
            ;~ If StringInStr($sLinkHtml, "Подтвердить") Then
                _IENavigate($oIE, $sLinkUrl)
                ExitLoop 2
            EndIf
        Next
    EndIf
    $iCount += 1
    If $iCount >= 100 Then ExitLoop
    Sleep(2000)
WEnd
 
Верх