Что нового

Заполнение форм на странице с неизвестным url

Dmitry13

Новичок
Сообщения
15
Репутация
0
Добрый день. есть сайт, на который вход осуществляется по логину паролю. как автоматически логиниться я разобрался. Проблема в том, что после авторизации открывается страница с заранее неизвестным url, который каждый раз меняется. как сделать, чтобы autoit дождался загрузки новой страницы и потом ввести в элементы на этой странице определенные значения?

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

спасибо
 

uritalex

Новичок
Сообщения
197
Репутация
3
Для начала укажите что за сайт, какие у Вас есть наработки. Url страницы куда отсылает (даже если она и изменяется то не вся ж) И просмотрите эту тему: http://autoit-script.ru/index.php?topic=4982.0
 
Автор
D

Dmitry13

Новичок
Сообщения
15
Репутация
0
Наработки минимальные. Логинусь на сайт стандартным способом (скрипт ниже), а затем открывается страничка, у которой есть фиксированный url "https://intranet.ru.shd.com/" + изменяемая часть

Код:
#include <IE.au3>

$Login = 'login'
$Pass = 'Password'
$url="https://intranet.ru.shd.com/Login.aspx"

$oIE = _IECreate($Url)
_IELoadWait ($oIE)

$oForm   = _IEFormGetCollection($oIE,0)
$oLogin  = _IEFormElementGetObjByName($oForm,"txtusername")
$oPass   = _IEFormElementGetObjByName($oForm,"txtpassword")
_IEFormElementSetValue($oLogin,$Login)
_IEFormElementSetValue($oPass,$Pass)

$oIE.document.parentWindow.execScript("setTimeout(function(){__doPostBack('btnSignIn','')},1)")
 

uritalex

Новичок
Сообщения
197
Репутация
3
Открывается ссылка в новом окне? если да то и особо проблемы нет, url можно взять через
Код:
_IEPropertyGet ($oIE, "locationurl")
но тут же пропадает смысл так как к этой странице можно и дальше продолжать обращаться через $oIE
 
Автор
D

Dmitry13

Новичок
Сообщения
15
Репутация
0
вроде разобрался, но решение не совсем нравится. после нажатия кнопки на форме ввода логина и пароля, в этом же окне IE открывается другая форма.

у меня стояло

Код:
_IELoadWait ($oIE)


но получается эта функция ожидает открытия только нового окна? как только пославил sleep(5000) все заработало. но проблема в том, что загрузка это формы может занять от долей секунды до нескольких секунд, а ставить sleep с запасом не хочется. каким образом омжно дождаться окончания загрузки новой страницы в том же окне?
 

uritalex

Новичок
Сообщения
197
Репутация
3
Можно поиграться с внутренним параметром
Код:
_IELoadWait ($oIE, 1000) ; 1000 задержка в миллисекундах до начала проверки загрузки страницы



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

Dmitry13 сказал(а):
Код:
_IELoadWait ($oIE)


но получается эта функция ожидает открытия только нового окна?

Справка: http://autoit-script.ru/autoit3_docs/libfunctions/_ieloadwait.htm
ожидает загрузки страницы
 
Автор
D

Dmitry13

Новичок
Сообщения
15
Репутация
0
по большому счету это аналог sleep. я думаю сделать через проверку url. если он меняется, то надо прерывать цикл и уже потом запускать _IELoadWait ($oIE)
 

uritalex

Новичок
Сообщения
197
Репутация
3
Ну тогда можете попробовать что то вроде :
Код:
Do
sleep(100)
Until $oIE.readyState=4
 
Автор
D

Dmitry13

Новичок
Сообщения
15
Репутация
0
решил следующим образом

Код:
While $url= _IEPropertyGet ($oIE, "locationurl") 
         Sleep(250)
     WEnd


Всем спасибо за подсказки и советы!
 
Верх