Что нового

Как узнать что пользовательская функция выполнилась

eropov

Jury
Сообщения
195
Репутация
25
День всем добрый :ok: , у меня такой вопрос. Есть бесконечный цикл в котором вызывается пользовательская функция Autoriz() после идет условие если приходит 1 значит хорошо, иначе снова вызывается функция. Загвоздка в том что функция не успевает отработать и вернуть 1 до того как цикл снова делает вызов, как узнать что пользовательская функция выполнилась.
Код:
#include <IE.au3>

For $i = 1 To 1
	$autor = Autoriz() ;Авторизация
	If $autor = 1 Then
		MsgBox(32,'','')
		ExitLoop 1
	Else
		ContinueLoop 1
	EndIf
Next
MsgBox(1,'','мы вышли')

Func Autoriz()
	$oIE = _IECreate("http://igrun.com/?p=7", 0, 1);Страница авторизации
	If @error Then Return -1
	$oForm = _IEFormGetObjByName($oIE, 1);Форма
	If @error Then Return -1
	$ologin = _IEFormElementGetObjByName($oForm, "login")
	If @error Then Return -1
	$opass = _IEFormElementGetObjByName($oForm, "psw")
	If @error Then Return -1

	_IEFormElementSetValue($ologin, "логин")
	If @error Then Return -1
	_IEFormElementSetValue($opass, "пароль")
	If @error Then Return -1
	_IEFormSubmit($oForm, 1)
	If @error Then Return -1
	_IENavigate($oIE, "http://igrun.com/?p=39")
	If @error = 0 Then Return 1
EndFunc   ;==>Autoriz
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Как может функция не успеть?
Вот и спрашиваю как, но это факт выполнения работы выше описанного кода
Если быть точным то выдает ошибку --> IE.au3 V2.4-0 Warning from function _IEAttach, $_IEStatus_NoMatch и в функции выполняется только первая строка(отличие кода только в том что у меня функция Autoriz() в отдельном INCLUDE, а библиотека IE подключена в скрипте с циклом(проверив выше описанный код все работает правильно))
Код:
$oIE = _IECreate("URL", 0, 1);Страница авторизации

После чего запускается цикл и новое открытие второго окна IE которое отрабатывает до конца при этом первый вызов прерывается (в чем ошибка)
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
AZJIO
Все равно все работает так как описал выше, ваш код выдает код ошибки=0
 

shakur

Осваивающий
Сообщения
76
Репутация
24
дайте URL страницу на которую пытаетесь залогинится, так тяжело чтото сказать :scratch: мб порядковый номер формы 0 а не 1.



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

NoMad73rus
Код: AutoIt [Выделить]
_IELoadWait

После каждого _IENavigate

бред, читай справку


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

AZJIO
Нужно наверно добавить ожидание открытия страницы...
где Вы его добавили в скрипте? в упор не вижу. и зачем это надо?
 

shakur

Осваивающий
Сообщения
76
Репутация
24
eropov
чет я пропустил изначально момент, организовывать бесконечный цикл и внем постоянно создовать окно IE??? :shok:


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

0 или 1 разницы нет
как нет разницы Вы наверное шутите, это разный порядковый номер формы на странице, а значит и разные формы)

чет я еще не проснулся
Код:
$oForm = _IEFormGetObjByName($oIE, 1);Форма

что Вы пишете? у Вас имя формы "1"?
мб вот так
Код:
$oForm = _IEFormGetCollection($oIE, 1);
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
чет я пропустил изначально момент, организовывать бесконечный цикл и внем постоянно создовать окно IE???
Разницы нет ни какой хоть с циклом хоть без, все рано все работает, так ,как работает :shok:
Код:
#include<IE.au3>
#include<Autoriz.au3>; Здесь подключена функция Autoriz()
$autor = Autoriz() ;Авторизация
If $autor = 1 Then
	MsgBox(32,'','')
EndIf
MsgBox(1,'','мы вышли')
 

shakur

Осваивающий
Сообщения
76
Репутация
24
авторизация
Код:
#include<IE.au3>
    $oIE = _IECreate("http://igrun.com/?p=7", 0, 1);Страница авторизации
    $oForm = _IEFormGetObjByName($oIE, "f1");Форма
    $ologin = _IEFormElementGetObjByName($oForm, "login")
    $opass = _IEFormElementGetObjByName($oForm, "psw")
    _IEFormElementSetValue($ologin, "логин")
    _IEFormElementSetValue($opass, "пароль")
    _IEFormSubmit($oForm)

Читайте внимательнее СПРАВКУ, и у ВАс не будет
все рано все работает, так ,как работает
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
shakur
Я заметил что первый вызов функции отрабатывает только вот эту ссылку http://igrun.com/?p=39, а потом отрабатывается функция целиком
Т.Е. запускаем скрипт выдает ошибку IE.au3 V2.4-0 Warning from function _IEAttach, $_IEStatus_NoMatch,
открывает IE с этой( http://igrun.com/?p=39) ссылкой, а не с этой (http://igrun.com/?p=7)
после открывается новое окно IE и функция отрабатывает правильно.
Как сделать чтобы функция на первой стадии отрабатывала правильно
 

shakur

Осваивающий
Сообщения
76
Репутация
24
eropov
изложите задачу! что вы хотите сделать?
ибо мы с вами не дойдем до финала!



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

попробуй так:
Код:
#include <IE.au3>	
dim $oIE

while 1
    $autor = Autoriz() ;Авторизация
    If $autor = 0 Then
        ;MsgBox(32,'','')
        ExitLoop 
    Else
			_IEQuit($oIE) ; для того чтобы при возникновении неучтенных ошибок у вас не открывалось куча окон
        ;ContinueLoop
    EndIf
Wend
MsgBox(1,'','мы вышли')

Func Autoriz()
    $oIE = _IECreate("http://igrun.com/?p=7", 0, 1);Страница авторизации
    If @error Then Return -1
    $oForm = _IEFormGetObjByName($oIE, "f1");Форма
    If @error Then Return -1
    $ologin = _IEFormElementGetObjByName($oForm, "login")
    $opass = _IEFormElementGetObjByName($oForm, "psw")
    _IEFormElementSetValue($ologin, "логин")
    _IEFormElementSetValue($opass, "пароль")
    _IEFormSubmit($oForm)
	_IENavigate($oIE, "http://igrun.com/?p=39")
EndFunc   ;==>Autoriz
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
shakur
Спасибо вам все работает, а в чем была загвоздка :scratch: (разница кода не велика, где там неучтенная ошибка?)
 

shakur

Осваивающий
Сообщения
76
Репутация
24
eropov
а в чем была загвоздка
проанализируйте ваш скрипт и мой и скажите мне в чем же она была? ;)


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

где там неучтенная ошибка?

вы организовываете бесконечный цикл и при каждом прохождение создаете обьект
_IECreat, допусим URL на который вы переходите при создании IE (игрун.ком) не будет отвечать, что тогда произойдет?


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

исправил скрипт в посте №12, я так понимаю вы хотели сделать бесконечный цикл пока не авторизируетесь, но оператор
Код:
ContinueLoop
не продолжает цикл(читаейте справку), я им не пользовался, а по названию он вводит в заблуждение :whistle:
вот так цикл действительно будет бесконечным) но я бы не рекомендовал этого делать, зачем это вам? одной попытки я думаю будет вполне достаточно :smile:
 
Верх