Автор Тема: Как реализовать проверку загруженности страницы в GoogleChrome ?  (Прочитано 633 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt:
3.3.14.2
Описание:
Всем  привет.
Подскажите пожалуйста как можно проверить загруженность окна в GoogleChrome?
Бывает так что клик по гиперссылке приводит к переходу на новый сайт. И это требует времени для загрузки его содержимого. Только после этого можно проводить манипуляции с элементами загруженной странницы. Но скрипт то не не знает этого, что может приводить к ошибкам в управлении. Что можно тут предпринять?
Примечания:
Спасибо
Если бы один пример - было бы волшебно...для новичка

Русское сообщество AutoIt


Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Неужели нет никакого способа программно узнать об завершении загрузки страницы в GoogleChrome ? GoogleChrome  же сигнализирует об ходе и завершении загрузки контента   вращающимся колесиком в адресной строке ...

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 108
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Неужели нет никакого способа программно узнать об завершении загрузки страницы в GoogleChrome

Попробуйте ожидать нужный вам элемент с помощью _UIA_WaitControlTypeElement() и гляньте пример который прилагается к UDF UIAutomate

Оффлайн uritalex [?]

  • Новичок
  • *
  • Сообщений: 195
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Можно реализовать таким образом:
Код: AutoIt [Выделить]
Do
      Sleep (500)
Until _URLexists ("URL") = 1

Func _URLexists($sURL, $fInStr = True)
  Local $oElement = _UIA_GetControlTypeElement($oParent, $UIA_HyperlinkControlTypeId, $sURL, "Value.Value")
  If IsObj($oElement) Then Return 1
Return 0
EndFunc
 


Русское сообщество AutoIt

Re: Как реализовать проверку загруженности страницы в GoogleChrome ?
« Ответ #3 Отправлен: Октябрь 10, 2017, 11:03:21 »

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo
Цитировать
Попробуйте ожидать нужный вам элемент с помощью _UIA_WaitControlTypeElement()

Все затруднено тем что заранее не известно что за страница будет загружаться. Это делает не возможным заранее указать Тип и Имя элемента  страницы
Единственный выход - привязываться к событиям самого браузера. И таким могло бы стать изменение кнопки загрузки страницы что слева от адресной строки (на текущий момент - скрин) Но тут опять затруднение: AutoIt inspect не отображает, как я не старался, инфу по этому элементу.... даже не знаю ....

uritalex
Очень интересно, спасибо  Тут мне требуются некоторые пояснения (я нубас пока в программировании)
  • $sURL, $fInStr - что означают данные переменные
  • Как быть, если заранее не известно, какой yrl загрузиться... а подождать загрузку очень надо

Пока что только так сделано:
(предварительно увеличил ping применив и без того не очень быстрый плагин Browsec VPN с сервером в Сингапуре  :)  )
Код: AutoIt [Выделить]
#include <UIAutomate.au3>

Opt("WinTitleMatchMode", 2)

$hWnd = WinActivate(" - Google Chrome")
$oParent = _UIA_GetElementFromHandle($hWnd)

Do
      Sleep (500)
Until _URLexists ("http://www.timeserver.ru/") = 1

MsgBox (262208,"Сообщение","Страницв  - загрузилась ",3)

Func _URLexists($sURL, $fInStr = True)
  Local $oElement = _UIA_GetControlTypeElement($oParent, $UIA_HyperlinkControlTypeId, $sURL, "Value.Value")
  If IsObj($oElement) Then Return 1
Return 0
EndFunc
 



Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Октябрь 10, 2017, 17:56:39 от dr.room »

Помечен как лучший ответ пользователем dr.room Отправлен Октябрь 10, 2017, 22:30:07

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 108
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
И таким могло бы стать изменение кнопки загрузки страницы что слева от адресной строки

Вот вариант с кнопкой

Код: AutoIt [Выделить]
#include "UIAutomate.au3"
Opt("WinTitleMatchMode", 2)

$hWnd = WinWait(" - Google Chrome")
If Not $hWnd Then Exit
WinActivate($hWnd)
WinWaitActive($hWnd)

$oParent = _UIA_GetElementFromHandle($hWnd)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Перезагрузить")
_UIA_ElementMouseClick($oElement)

Do
    Sleep(250)
Until _UIA_ElementGetPropertyValue($oElement, $UIA_LegacyIAccessibleDescriptionPropertyId) = "Остановить загрузку этой страницы"

Do
    Sleep(250)
Until _UIA_ElementGetPropertyValue($oElement, $UIA_LegacyIAccessibleDescriptionPropertyId) = "Обновить эту страницу"

MsgBox(0, "", "Определение загрузки по кнопке")


Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo
Спасибо большое! То что нужно!
Но как, как Вам это удалось? Точнее как удалось  получить значение переменной $vProperty т.е. свойство объекта ? Что такое $UIA_LegacyIAccessibleDescriptionPropertyId ? Не пойму также чем вызвана необходимость предварительного клика по кнопке "Перезагрузить" ?
« Последнее редактирование: Октябрь 10, 2017, 23:37:07 от dr.room »

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 108
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo
Спасибо большое! То что нужно!
Но как, как Вам это удалось? Точнее как удалось  получить значение переменной $vProperty т.е. свойство объекта ? Что такое $UIA_LegacyIAccessibleDescriptionPropertyId ? Не пойму

Окно Chrome и Inspect. Жмете на кнопку перезагрузки и увидите все в Inspect
$UIA_LegacyIAccessibleDescriptionPropertyId (UIAConstants.au3) ид свойства LegacyIAccessible.Description


Добавлено: Октябрь 10, 2017, 23:46:12
Не пойму также чем вызвана необходимость предварительного клика по кнопке "Перезагрузить" ?

Для примера
« Последнее редактирование: Октябрь 10, 2017, 23:46:12 от Tempo, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Как реализовать проверку загруженности страницы в GoogleChrome ?
« Ответ #7 Отправлен: Октябрь 10, 2017, 23:32:57 »

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Не вижу! :(
А вот кнопки нашел ид - но не при точном наведении а чуть левее. Абракадабра какая-то

(нажмите для показа/скрытия)


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Октябрь 11, 2017, 00:18:22 от dr.room »

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo, Здравствуйте.
Вот решил  проверить  себя, правильно ли я все понял
Условия задачи 
  • Захожу на страницу переводчика  https://translate.google.com.
  • Нужно чтобы язык был: русский  - скрипт зависит
  • Запускаю скрипт, чтобы он ждал  пока появиться кнопка Улучшить перевод. А надо сказать она появиться только после ввода текста
И по идее - скрипт ждать должен, та как цикл работает. Но постоянно выскакивает ошибка что
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному
!> _UIA_ElementGetPropertyValue : первый параметр не является объектом

Где же я мог ошибиться, не подскажете?
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPISys.au3>
#include <UIAutomate.au3>
#include <WinAPIEx.au3>

Opt("WinTitleMatchMode", 2)

ShdemPerevod()

Func ShdemPerevod()

$hWnd = WinWait(" - Google Chrome")
If Not $hWnd Then Exit
WinActivate($hWnd)
WinWaitActive($hWnd)

$oParent = _UIA_GetElementFromHandle($hWnd)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Улучшить перевод")
;~ _UIA_ElementMouseClick($oElement)

Do
    Sleep(500)
Until  _UIA_ElementGetPropertyValue($oElement, $UIA_LegacyIAccessibleDescriptionPropertyId) = ""
If @error Then MsgBox (48,"","ошибка в поиске элемента " & @CRLF & "_UIA_ElementGetPropertyValue")

    EndFunc
 

« Последнее редактирование: Октябрь 16, 2017, 17:51:44 от dr.room »

Русское сообщество AutoIt

Re: Как реализовать проверку загруженности страницы в GoogleChrome ?
« Ответ #9 Отправлен: Октябрь 16, 2017, 00:08:50 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
2132 Просмотров
Последний ответ Ноябрь 07, 2011, 06:07:56
от Rage911
7 Ответов
2885 Просмотров
Последний ответ Январь 23, 2012, 01:51:04
от joiner
8 Ответов
3180 Просмотров
Последний ответ Сентябрь 13, 2012, 15:45:32
от Redline
0 Ответов
2935 Просмотров
Последний ответ Октябрь 02, 2013, 18:42:21
от mef-t
2 Ответов
1316 Просмотров
Последний ответ Март 09, 2015, 03:26:03
от AZJIO
6 Ответов
961 Просмотров
Последний ответ Ноябрь 05, 2016, 20:18:19
от SNAK
0 Ответов
194 Просмотров
Последний ответ Август 15, 2017, 15:54:08
от OlegSmirnov
2 Ответов
756 Просмотров
Последний ответ Сентябрь 01, 2017, 09:12:03
от yl3d
4 Ответов
704 Просмотров
Последний ответ Сентябрь 18, 2017, 01:37:13
от perven1
3 Ответов
478 Просмотров
Последний ответ Октябрь 09, 2017, 19:42:08
от perven1