[TC] Скрипты Джоз. Ожидание инфы, клик по ссылке.
Здравствуйте, господа подписчики.
Возьмём гипотетическую веб-страницу с некоторым количеством текстовой
информации и ссылками "обновить", "следующая" и "предыдущая". Задача:
1. На странице мы будем искать слово "оранжевый" и при его появлении
совершать переход по ссылке "следующая", т.е. как только появилось слово
"оранжевый" джоз кликает по ссылке "следующий". Слово "оранжевый" может
появиться только при обновлении страницы, т.к. текст на странице
статический. Следовательно, раз в x секунд страницу нужно обновлять путём
нажатия на ссылку "обновить".
2. После того, как загрузилась страница по ссылке "следующая" мы смотрим на
новую страницу. Если на ней есть слово "мебель", то ищем и нажимаем ссылку
"хорошо", а если слова "мебель" нет, а есть слово "телефоны", то нажимаем
ссылку "плохо". В третьем случае, если нет ни "мебель", ни "телефоны", то
нажимаем ссылку "обновить" и продолжаем ждать появления либо "мебель", либо
"телефоны".
Проблема, собственно, в том, как организовать этот цикл ожидания средствами
джоз? А если точнее, как отследить событие загрузки страници и появления
текста. Ставить какой-то конкретный интервал, допустим, в 30 секунд
ожидания - не выход. Страница может загрузиться как за 0,2 сек, так и за 88
сек. Во втором случае скрипт не сработает, если мы поставим ему время
ожидания, к примеру, 30 сек.
Нужный текст "мебель", "телефоны" и т. д. мы можем легко отследить так:
*code*
if FindString (GetAppMainWindow (GetCurrentWindow ()), "мебель", S_BOTTOM,
S_RESTRICTED) then
FindString (GetAppMainWindow (GetCurrentWindow ()), "купить", S_BOTTOM,
S_RESTRICTED)
EnterKey()
EndIf
*code*
Ожидание интервала x секунд также не проблема. Мы можем организовать его с
помощью глобальной переменной и функции
ScheduleFunction (), например, так:
*code*
let WaitVar=ScheduleFunction ("WaitForPhones", 100)
*code*
Главное здесь - это дать понять джозу, что страница именно загрузилась и
можно приступать к поиску необходимого текста.
Может быть реально вобще обойтись без ScheduleFunction()? Зачем
устанавливать какой-то жёсткий интервал, если он заранее не известен?
Возможно ли кликать на ссылку как только на странице появляется слово
мебель"? Как-то пробовал сделать это через цикл while, но по-моему ничего не
получилось.
Доброго времени суток, Игорь.
Из сообщения от 11.02.2011 0:27:
В первом приближении используйте событийную функцию
DocumentLoadedEvent ()
Дополнительно можно проконтролировать текст статусной строки.
Дальнейшие усилия, если простое решение не удовлетворит,
прилагайте в направлении использования DOM
через COM интерфейс.
С уважением, Руслан Усачев