Author Topic: Вопрос об определение факта окончания загрузки страницы браузера  (Read 2601 times)

0 Members and 1 Guest are viewing this topic.

Архипчик

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Приветствую всех. Пишу впервые  :)
Вопрос такой: есть страница(браузер не суть важен, но для примера Яндекс), на странице есть один элемент с картинкой под флэш-плеер, но интерес для анализа представляет текст(картинка) на странице в виде столбца таблички. Так вот, по клику на неких ссылках меняется только одна область, этот столбец, причём элементы там могут быть в разном количестве, а могут и вовсе не появиться, что нормально. Проблема не в самом анализе, тут трудностей нет, а в минимизации времени задержки после клика по ссылке и началом анализа: при явно указанной, и достаточно продолжительной паузе, все корректно. При попытках ввести таймер на опрос вновь ИЗМЕНИВШИХСЯ каких либо элементов  выясняется, что таковых элементов то и нет: именно меняющиеся и подлежат анализу, а все остальное строго статично...
   Можно как то обратиться к свойствам окна эксплорера, для примера свойство readyState или что то подобное?..
  Ну или какую другую реальную идею кто покинет?
  Спасибо!

Архипчик

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Нашёл совет вот тут: http://crapware.aidf.org/forum/index.php?topic=1566.0, т.е. на панели браузера анализирую часть изображения.  Сначала на факт процесса загрузки, потом на факт окончания. Ограничение поставил в 2 сек. Были ошибки. Увеличил до 3 - ошибки пропали. Если печатать в лог из тела цикла - получается одна итерация, причём всегда. Но с разными интервалами: 1-3 сек. Видно, исполнение команд влияет  :D
В общем и целом: работает!
ЗЫ все равно от хороших советов не откажусь...

Архипчик

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Продолжу разговор сам собой...  ::)
   Итак, рано радовался: увеличение времени обработки ожидания обновления страницы (во завернул!), он же цикл на время, действительно избавляет от ошибок при обновлении страниц. Потому что это равнозначно указать паузу на ожидание ровно на эту величину, указанную в цикле. Заметил сей факт из-за сильного падения скорости работы скрипта. Полез трассировать и выяснил: при нажатии на ССЫЛКУ, причём любую, алгоритм работает, если проходит команда через клавиатуру - 100% не срабатывает! Избавиться от использования эмуляции клавы - не вариант...
   Увы, пока у меня идей больше нет...

ЗЫ Попытки ориентироваться на различные части графики на странице при их прорисовке также закончились крахом.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Тяжело понять в чём затык без примеров кода и того что анализируем.
Просто непонятно, почему не подошло искать значёк "обновления страницы".
По ссылке таймер немного неудобный.
Code: (clickermann) [Select]
SUB(ожидание_загрузки)
   $check = 0
   $time = $_ms + 10000  // обновление через 10 сек
   WHILE($check = 0)
      IF($time > $_ms)
         GETSCREEN
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "reloadicon.bmp")
            $check = 1
         END_IF
         WAITMS(50)
      ELSE
         KEYPRESS(#F5)
         WAITMS(500)
         $time = $_ms + 10000  // обновление через 10 сек
      END_IF
   END_CYC
END_SUB


Архипчик

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Приведённый вами алгоритм я и использую. Затык именно в посылке команды F5(или я иногда пользую BACKSPACE): та самая часть reloadicon.bmp в браузере не отлавливается. Если нажать на странице на любую ссылку - алгоритм прекрасно работает, и bmp-шник прекрасно находится...
Спсб за ответ!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Аааа... Так проблема в фокусе. F5 - команда браузера и она работает только при фокусе на одном из элементов браузера.
Если фокус на элементе флэш (в основном сталкиваются с этим), его нужно перевести, кликнув перед применением KEYPRESS(#F5) на свободном месте страницы или, возможно, по заголовку браузера.

Как вариант...
[spoiler]
Code: (clickermann) [Select]
SUB(ожидание_загрузки, $tr)  // обновление через $tr сек
   $reloadicon = 0
   $timereload = $_ms + $tr*1000
   WHILE($reloadicon = 0)
      IF(($timereload > $_ms) | ($tr = 0))
         GETSCREEN
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "reloadicon.bmp")
            $reloadicon = 1
         END_IF
         WAITMS(50)
      ELSE
         LCLICK(500,5)
         WAITMS(50)
         KEYPRESS(#F5)
         WAITMS(500)
         $timereload = $_ms + $tr*1000
      END_IF
   END_CYC
END_SUB
[/spoiler]

если переданный параметр будет равен 0 (сек), перезагрузок не будет.
« Last Edit: July 16, 2015, 12:44:38 PM by Vint »


Архипчик

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
От спасибо!!! Кабы знать мне это ранее... И да, флэш присутствует, как же без неё :-)  Теперь я практически счастлив! На какое то время :) Потом опять что нить выскочит...