Что нового

Сбрасываются переменные

Dridl

Новичок
Сообщения
3
Репутация
0
Есть скрипт вводящий ПИН на определенном сайте , бывает так, что сессия не была завершена и сайт сообщает об этом: "Сессия уже открыта!" и требуется нажать ссылку "Продолжить!"
Сделал проверку текста на присутствие "Сессия уже открыта!", скрипт проверку производит и даже нажимает ссылку "Продолжить!", но после EndIf выполнение останавливается, похоже, что переменные $oIE и остальные стираются. Как сделать переменные постоянными? Повторное декларирование переменных решает проблему, но мне хотелось бы устанавливать переменные только один раз.

Запускаю:
Код:
$oIE = _IEAttach("local", "title")
_IELoadWait($oIE)
$o_form = _IEFormGetObjByName($oIE, "fPIN")
$o_password = _IEFormElementGetObjByName($o_form, "pin")
$o_Text = _IEPropertyGet ( $oIE, "innertext" )
If StringInStr($o_Text, "Сессия уже открыта!" ) Then
_IELinkClickByText($oIE, "Продолжить!")
_IELoadWait($oIE)
EndIf
_IELoadWait($oIE)
_IEFormElementSetValue($o_password, "123456")
sleep(1000)
_IEFormSubmit ( $o_form )

Получаю ошибку:
Warning from function _IEFormGetObjByName, $_IESTATUS_NoMatch
--> IE.au3 T3.0-1 Error from function _IEFormElementGetObjByName, $_IESTATUS_InvalidDataType

Если повторно декларировать переменные:
Код:
$oIE = _IEAttach("local", "title")
_IELoadWait($oIE)
$o_form = _IEFormGetObjByName($oIE, "fPIN")
$o_password = _IEFormElementGetObjByName($o_form, "pin")
$o_Text = _IEPropertyGet ( $oIE, "innertext" )
If StringInStr($o_Text, "Сессия уже открыта!" ) Then
_IELinkClickByText($oIE, "Продолжить!")
_IELoadWait($oIE)
EndIf
$oIE = _IEAttach("VpnKey.local", "title")
$o_form = _IEFormGetObjByName($oIE, "fPIN")
$o_password = _IEFormElementGetObjByName($o_form, "pin")
$o_Text = _IEPropertyGet ( $oIE, "innertext" )
_IELoadWait($oIE)
_IEFormElementSetValue($o_password, "123456")
sleep(1000)
_IEFormSubmit ( $o_form )

В таком варианте все ОК
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
D

Dridl

Новичок
Сообщения
3
Репутация
0
Yashied сказал(а):
[warn]За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.[/warn]







Прошу прощения, исправился.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я посмотрел, поискал по форуму и много где написано, что это из-за режима совместимости.
 
Автор
D

Dridl

Новичок
Сообщения
3
Репутация
0
alex33 сказал(а):
Я посмотрел, поискал по форуму и много где написано, что это из-за режима совместимости.
Попробовал добавить сайт в режим совместимости, не помогло.
Правильно я Вас понял о режиме совместимости в IE идет речь?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Dridl,
По идее, так должно работать.
Код:
;~ ...
$oIE = _IEAttach('local', 'title')
_IELoadWait($oIE)
$s_Text = _IEPropertyGet($oIE, 'innertext')
If StringInStr($s_Text, 'Сессия уже открыта!') Then _IELinkClickByText($oIE, 'Продолжить!')
$o_form = _IEFormGetObjByName($oIE, 'fPIN')
$o_password = _IEFormElementGetObjByName($o_form, 'pin')
_IEFormElementSetValue($o_password, '123456')
Sleep(1000)
_IEFormSubmit($o_form)
Надо бы проверку на ошибки еще добавить.
 
Верх