Что нового

_FFLinksGetAll() - как обойти ошибку на пустой странице?

bescom

Новичок
Сообщения
61
Репутация
0
Функция получения ссылок на странице и записи их в массив _FFLinksGetAll() при пустой странице (точнее, не содержащей ни одной ссылки) выдает вот такое сообщение при скомпилированном скрипте:
05755b3718.jpg


Пример скрипта:

Код:
#Include <FF.au3>
#include <Array.au3>

; Открываем браузер FF
run(@ProgramFilesDir&"\Mozilla Firefox\firefox.exe")
WinWaitActive("Mozilla Firefox")
Sleep(5000)
If _FFConnect(Default, Default, 3000) Then
	; MsgBox(64, "", "Есть соединение с FireFox!")
Else
	MsgBox(64, "", "Нет соединения с FireFox!")
	Exit
 EndIf
 Sleep(1000)

 ; Производим переход
WinActivate("Mozilla Firefox")
Sleep(500)
_FFOpenURL("http://ps.alars.ru/001.htm")
Sleep(500)

$aLinks = _FFLinksGetAll() ; Получаем список URL на странице и записываем в массив
_ArrayDisplay($aLinks)


Если скрипт нескомпилирован, то такое же сообщение можно увидеть в отладчике. Логика, собственно, понятна - массив не может быть создан без данных.

Вопрос: Как сделать так, чтобы это сообщение не выводилось, а в массив записывалась, скажем, строка "error"?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
На сколько я понимаю, ошибка возникает в функции _FFLinksGetAll(). Она должна при ошибочном состоянии вернуть в [0][0] = 0. А она вместо этого вываливается в ошибку.
Может быть можно конечно перехватить и эту ошибку, но по хорошему надо разбираться, почему она корректно не отрабатывает.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
bescom,
В FF.au3 есть глобальная переменная $_FF_ERROR_MSGBOX. Установите ее значение в False.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
edyapd сказал(а):
На сколько я понимаю, ошибка возникает в функции _FFLinksGetAll(). Она должна при ошибочном состоянии вернуть в [0][0] = 0. А она вместо этого вываливается в ошибку.
Может быть можно конечно перехватить и эту ошибку, но по хорошему надо разбираться, почему она корректно не отрабатывает.
Возможно, я уже путаюсь в языках и ошибаюсь, но вроде в AutoIt не может быть записан пустой массив. Тогда данный месседж - не ошибка функции, а сообщение о невозможности поместить в массив пустой список URL. Я не утверждаю, просто как версия.


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

madmasles сказал(а):
bescom,
В FF.au3 есть глобальная переменная $_FF_ERROR_MSGBOX. Установите ее значение в False.
Спасибо за подсказку, хотя это вроде как половинчатое решение, как мне кажется. Запретим $_FF_ERROR_MSGBOX - значит, не увидим другие ошибки, только в отладчике.


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

bescom [?]
вроде в AutoIt не может быть записан пустой массив. Тогда данный месседж - не ошибка функции, а сообщение о невозможности поместить в массив пустой список URL
Ан нет, я неправ, сейчас начитался инфы - явно функция косячит. Должна возвращать [0][0] = 0. Друзья, кто может поправить FF.au3, чтобы _FFLinksGetAll() отрабатывала корректно при пустой странице?


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

Кажется, решение найдено (говорю "кажется", потому что до сих пор не верю своему счастью).

Для того, чтобы _FFLinksGetAll() не напрягалась при отсутствующих ссылках на странице и выдавала в массив корректные "нолики", нужно заранее жестко задавать размерность массива, например:

Код:
Local $aLinks[100][10]


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

Категорически жаль, что до сих пор такие моменты приходится выяснять всем миром + методом проб и ошибок, потому что в документации на этот счет вроде как ничего нет... :'(

И все же, :IL_AutoIt_1:

Спасибо всем, кто пытался помочь. Если все будет правильно работать, тему после подтверждения закрою.
 
Верх