Что нового

возврат к предыдущему действию при условии

cr3sh

Новичок
Сообщения
10
Репутация
0
Добрый день!
у меня есть небольшой скрипт который переходит по ссылкам их списка url (в отдельном файле) и выгружает результаты.
Все бы хорошо, только сайт с которого скачиваю информацию не всегда стабильно работает
При работе скрипта, когда он переходит по ссылке - иногда загружается страница где написано либо "Сервер временно недоступен..", либо "Превышен лимит обращений к серверу..."
такое происходит в двух вариантах:
1. когда скрипт переходит по ссылке и сразу выскакивает страница с ошибкой
2. либо когда скрипт нажимает на Выгрузить результаты поиска.

Помогите пожалуйста решить проблему, нужно сделать проверку в обоих случаях.
Т.е. если выскакиевает ошибка, то просто повторно перейти по этому же URL из списка

Я смог сделать только 10ти секундную задержку на загрузку страницы, но смысла в ней нет, так как он же не проверяет какая страница загрузилась- с результатами или с ошибкой.

Код:
#include <IE.au3>
$sStartUrl = 'http://zakupki.gov.ru' ; ссылка свернутого окна
$sSplitter = ',' ; разделитель
$oIE = _IECreate($sStartUrl, 1)
$aUrl = StringRegExp(FileRead(@ScriptDir & '\url.txt'), '(.+?)' & $sSplitter & '([^\s]+)', 3)

For $i = 0 To UBound($aUrl) - 2 Step 2
    _go_to_url($aUrl[$i], $aUrl[$i + 1])
Next

Func _go_to_url($sUrl, $sName)
   Do
    _IENavigate($oIE, $sUrl)
   Until _IELoadWait($oIE,0,10000)
    _IELinkClickByText($oIE, "Выгрузка результатов поиска")
	Sleep(2000)
    While 1
        Select
            Case WinExists("Загрузка файла", "Со&хранить") And WinActive("Загрузка файла", "Со&хранить")
                ControlClick("Загрузка файла", "Со&хранить", "[CLASS:Button; INSTANCE:2]")
            Case WinExists("Сохранить как", "Со&хранить") And WinActive("Сохранить как", "Со&хранить")
                ControlSetText("Сохранить как", "", "[CLASS:Edit; INSTANCE:1]", $sName & ".csv")
                ControlClick("Сохранить как", "Со&хранить", "[CLASS:Button; INSTANCE:2]")
            Case WinExists("Сохранить как", "&Да") And WinActive("Сохранить как", "&Да")
                ;~ если файл уже существует, то он переписывается
                ControlClick("Сохранить как", "&Да", "[CLASS:Button; INSTANCE:1]")
            Case WinExists("Загрузка завершена.") And WinActive("Загрузка завершена.")
                ControlClick("Загрузка завершена.", "", "[CLASS:Button; INSTANCE:4]")
                ExitLoop
        EndSelect
    WEnd
EndFunc   ;==>_go_to_url


пример ошибки
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
cr3sh,
Попробуйте примерно так.
Код:
;...
;Until _IELoadWait($oIE,0,10000)
If _Server_Error($oIE) Then
	; Сервер временно недоступен или Превышен лимит обращений к серверу
	MsgBox(64, 'Info', 'No work now')
EndIf
_IELinkClickByText($oIE, "Выгрузка результатов поиска")
If _Server_Error($oIE) Then
	; Сервер временно недоступен или Превышен лимит обращений к серверу
	MsgBox(64, 'Info', 'No work now')
EndIf
;...

Func _Server_Error($o_IE)
	Local $a_NotWorkNow[2] = ['Сервер временно недоступен', 'Превышен лимит обращений к серверу'], $s_Body, $i_Res
	$s_Body = _IEBodyReadText($o_IE)
	;If @error Or Not $s_Body Then Return SetError(1, 0, False) Or True?
	For $i = 0 To 1
		$i_Res = StringInStr($s_Body, $a_NotWorkNow[$i])
		If $i_Res Then ExitLoop
	Next
	Return ($i_Res <> 0)
EndFunc   ;==>_Server_Error
 
Автор
C

cr3sh

Новичок
Сообщения
10
Репутация
0
спасибо за быстрый ответ!
сделал все, запустил, как только выпадает страница с Сервер временно не доступен - выскакиевает окошко ( ну это понятно), нажимаю ОК и ничего дальше не происходит


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

окошко которое выскакиевает мне не принципиально нужно, так как в момент выгрузки конечно не хотелось бы следить за процессом.
главное что бы просто он после попадания на страницу с ошибкой делал go_to_url повторно


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

немного подумал и передел, получилось вот так
Код:
If _Server_Error($oIE) Then
    ; Сервер временно недоступен или Превышен лимит обращений к серверу
    _go_to_url($sUrl, $sName)
EndIf
_IELinkClickByText($oIE, "Выгрузка результатов поиска")
If _Server_Error($oIE) Then
    ; Сервер временно недоступен или Превышен лимит обращений к серверу
    _go_to_url($sUrl, $sName)
EndIf


Да, если выпадает ошибка, то он повторно обращается к этому URL и скачивает файл, но сразу после скачивания ОПЯТЬ открывает диалог сохранения файла и все, дальше бездействие
 
Верх