Что нового

Функции IE.au3 вызывают ошибки, программа вылетает

Alexey_A

Новичок
Сообщения
8
Репутация
0
Здравствуйте!

Имею программу, которая активно работает с одним сайтом через браузер. Всё через IE.au3. С недавних пор на сайте что-то поменяли, и программа стала вылетать с ошибкой. Отловил два своих вызова, на которых программа вылетала:

Код:
_IEBodyWriteHTML
_IEBodyReadText


Ошибка была "The requested action with this object has failed". Переписал все места, где были эти функции, использовав другие функции, но через некоторое время вылетела где-то ещё. На сей раз

Код:
_IEPropertyGet


Причём ошибки "приходящие", то есть не всякий вызов этих функций приводи к ошибке.

Насколько я понял, сайт иногда подвисает, и браузер не отвечает вовсе, соответствующие методы внутри IE.au3 не могут вернуть значение, и функция думает, что объекта нет, и валит ошибку.

Прошу помощи! Мне на отсутствие данных наплевать, запросто подошло бы решение, позволяющее ошибку игнорировать и идти дальше. Также помог бы какой-то метод запроса состояния браузера (или проверки его "живости").

Что делал/пробовал:

1) Читал тут: http://autoit-script.ru/index.php?topic=6485.0 у меня так и сделано, программа вылетает
2) Функции типа
Код:
_IEGetObjById
, когда не находят объект, валят в консоль предупреждения, но программа продолжает работать, но валится на ошибках, которые IE.au3 выдаёт в других местах вместо предупреждений.
3) Стоят перехватчики:

Код:
$oAny_Error = ObjEvent("AutoIt.Error", "AnyErrFunc")
_IEErrorHandlerRegister("AnyErrFunc")


В функции AnyErrFunc пытаюсь сбросить ошибку:

Код:
SetError(0)


но тщетно, когда управление из неё выходит, программа таки завершается.
 
Автор
Alexey_A

Alexey_A

Новичок
Сообщения
8
Репутация
0
Alofa сказал(а):
Попробуйте так:
Код:
SetError(0, 0, 0)

Спасибо за ответ, попробую! Смогу только завтра.

Alofa сказал(а):
P.s: А вообще тут на форуме целая ветка есть Автоматизация IE и Web-интерфейса.

Не туда написал? Ориентировался на раздел темы, которую процитировал.


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

Код:
SetError(0, 0, 0)


не помог, влетает. Надо как-то проверять, висит ли браузер, или нет.
 
A

Alofa

Гость
Alexey_A сказал(а):
... Функции типа
Код:
_IEGetObjById
, когда не находят объект, валят в консоль предупреждения, но программа продолжает работать...
Такие предупреждения игнорировать нельзя. С чем вы будете работать дальее, если объект факически не найден?

Alexey_A сказал(а):
... На сей раз
Код:
_IEPropertyGet

Причём ошибки "приходящие"...

Можете попробовать выйти из положения ПРИМЕРНО следующим способом:
Код:
#include <IE.au3>
Global $oDiv, $Text, $oIE = _IE_Example ("basic")

; Цикл ожидания срабатывания 2 функций в течении 3 сек.
$hTimer = TimerInit() ; Запускает таймер
Do
    $oDiv = _IEGetObjById ($oIE, "line1")
    Select
        Case $oDiv
            $Text = _IEPropertyGet($oDiv, "innertext")
            If Not $Text Then ContinueCase
        Case Else
            Sleep(200)
    EndSelect
    If TimerDiff($hTimer) >= 3000 Then ; Если 3 секунды истекли, то ...
Until $Text
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Alexey_A
Это из-за версии AutoIT, поставьте 3.3.12.0 и вылетов не будет.
 
Автор
Alexey_A

Alexey_A

Новичок
Сообщения
8
Репутация
0
Alofa сказал(а):
Такие предупреждения игнорировать нельзя. С чем вы будете работать дальее, если объект факически не найден?

На сайте 5-7 вариантов контента при одном и том же URL, в произвольный момент времени может отображаться любой. Программа определяет, какой именно: если в коде есть красная кнопка, то тогда 1-ый вариант, если текстовое поле, то 2-ой вариант и т.д. Поэтому пытается найти разные объекты. Некоторых заведомо нет, она это сама обработает.

Хочу натыкать трассировки по всему коду, чтобы точно определить место, и сильно подумать над ним.


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

inververs сказал(а):
Alexey_A
Это из-за версии AutoIT, поставьте 3.3.12.0 и вылетов не будет.

То есть откатиться? У меня 3.3.14.2, она глючная?
 
Автор
Alexey_A

Alexey_A

Новичок
Сообщения
8
Репутация
0
Выловил страницу с

Код:
<meta http-equiv="REFRESH" content="3;url=http://......">

Похоже на время редиректа и возникали ошибки запроса разных параметров объекта браузера. Поставил проверку, тестирую.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Alexey_A сказал(а):
То есть откатиться? У меня 3.3.14.2, она глючная?
Да. Глючная в плане объектов... Поставьте 3.3.12.0 и ошибок не будет. Это у всех так и много кто об этом пишет.


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

Например здесь такая же ошибка...
 
Автор
Alexey_A

Alexey_A

Новичок
Сообщения
8
Репутация
0
Спасибо, alex33!

Решил пока не откатываться, подожду свеженькой. Источник проблемы выявил -- редирект, прописанный в META. Тесты прошли, и всё работает пока.
 
Верх