Что нового

Как реализовать проверку загруженности страницы в GoogleChrome ?

dr.room

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

dr.room

Новичок
Сообщения
283
Репутация
0
Неужели нет никакого способа программно узнать об завершении загрузки страницы в GoogleChrome ? GoogleChrome же сигнализирует об ходе и завершении загрузки контента вращающимся колесиком в адресной строке ...
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room сказал(а):
Неужели нет никакого способа программно узнать об завершении загрузки страницы в GoogleChrome

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

uritalex

Новичок
Сообщения
197
Репутация
3
Можно реализовать таким образом:
Код:
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
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Попробуйте ожидать нужный вам элемент с помощью _UIA_WaitControlTypeElement()

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

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

Пока что только так сделано:
(предварительно увеличил ping применив и без того не очень быстрый плагин Browsec VPN с сервером в Сингапуре :smile: )
Код:
#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
 

Вложения

  • Сообщение об зарузке.png
    Сообщение об зарузке.png
    15.3 КБ · Просмотры: 10

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room сказал(а):
И таким могло бы стать изменение кнопки загрузки страницы что слева от адресной строки

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

Код:
#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, "", "Определение загрузки по кнопке")
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Спасибо большое! То что нужно!
Но как, как Вам это удалось? Точнее как удалось получить значение переменной $vProperty т.е. свойство объекта ? Что такое $UIA_LegacyIAccessibleDescriptionPropertyId ? Не пойму также чем вызвана необходимость предварительного клика по кнопке "Перезагрузить" ?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room сказал(а):
Tempo
Спасибо большое! То что нужно!
Но как, как Вам это удалось? Точнее как удалось получить значение переменной $vProperty т.е. свойство объекта ? Что такое $UIA_LegacyIAccessibleDescriptionPropertyId ? Не пойму

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


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

dr.room сказал(а):
Не пойму также чем вызвана необходимость предварительного клика по кнопке "Перезагрузить" ?

Для примера
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Не вижу! :(
А вот кнопки нашел ид - но не при точном наведении а чуть левее. Абракадабра какая-то

How found: Mouse move (80,55)
hwnd=0x015210B2 32bit class="Chrome_WidgetWin_1" style=0x17CF0000 ex=0x100
Name: "Перезагрузить"
ControlType: UIA_ButtonControlTypeId (0xC350)
LocalizedControlType: "кнопка"
BoundingRectangle: {l:60 t:33 r:88 b:61}
IsEnabled: true
IsOffscreen: false
IsKeyboardFocusable: true
HasKeyboardFocus: false
AccessKey: ""
ProcessId: 10092
ProviderDescription: "[pid:10092,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]"
IsPeripheral: [Not supported]
LiveSettingProperty: [Not supported]
IsPassword: false
HelpText: ""
FlowsFrom: [Not supported]
OptimizeForVisualContent: [Not supported]
PositionInSet: [Not supported]
SizeOfSet: [Not supported]
Level: [Not supported]
AnnotationTypes: [Not supported]
AnnotationObjects: [Not supported]
LandmarkType: [Not supported]
LocalizedLandmarkType: [Not supported]
Annotation.AnnotationAuthor: [Not supported]
Annotation.AnnotationTypeId: [Not supported]
Annotation.Author: [Not supported]
Annotation.DateTime: [Not supported]
Annotation.Target: [Not supported]
Drag.DropEffect: [Not supported]
Drag.DropEffects: [Not supported]
Drag.GrabbedItems: [Not supported]
Drag.IsGrabbed: [Not supported]
DropTarget.DropTargetEffect: [Not supported]
DropTarget.DropTargetEffects: [Not supported]
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: "нажать"
LegacyIAccessible.Description: "Обновить эту страницу"
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Перезагрузить"
LegacyIAccessible.Role: кнопка (0x2B)
LegacyIAccessible.State: фокусируемое (0x100000)
LegacyIAccessible.Value: ""
ObjectModel.UnderlyingObjectModel: [Error: calling getter for this property: hr=0x80070057 - Параметр задан неверно.]
SpreadsheetItem.AnnotationObjects: [Not supported]
SpreadsheetItem.AnnotationTypes: [Not supported]
SpreadsheetItem.Formula: [Not supported]
Style.ExtendedProperties: [Not supported]
Style.FillColor: [Not supported]
Style.FillPatternColor: [Not supported]
Style.FillPatternStyle: [Not supported]
Style.Shape: [Not supported]
Style.StyleId: [Not supported]
Style.StyleName: [Not supported]
Transform2.CanZoom: [Not supported]
Transform2.ZoomLevel: [Not supported]
Transform2.ZoomMinimum: [Not supported]
Transform2.ZoomMaximum: [Not supported]
IsAnnotationPatternAvailable: [Not supported]
IsDragPatternAvailable: [Not supported]
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: [Not supported]
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: true
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: [Not supported]
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: [Not supported]
IsSpreadsheetPatternAvailable: [Not supported]
IsStylesPatternAvailable: [Not supported]
IsSynchronizedInputPatternAvailable: false
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: [Not supported]
IsTextEditPatternAvailable: [Not supported]
IsTextPatternAvailable: false
IsTextPattern2Available: [Not supported]
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: [Not supported]
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
IsCustomNavigationPatternAvailable: [Not supported]
FirstChild: [null]
LastChild: [null]
Next: ""
Previous: "Вперед"
Other Props: Object has no additional properties
Children: Container has no children
Ancestors: "main" панель инструментов
""
""
"Google Chrome"
"Точное текущее время в городах России, Европы, странах Латинской и Северной Америки (США и Канада). Узнайте сколько время!" окн
"Рабочий стол" панель
[ No Parent ]
 

Вложения

  • 2 окна.png
    2 окна.png
    126.1 КБ · Просмотры: 15
  • версия Inspect.png
    версия Inspect.png
    38.3 КБ · Просмотры: 14
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo, Здравствуйте.
Вот решил проверить себя, правильно ли я все понял
Условия задачи
[list type=decimal]
[*]Захожу на страницу переводчика https://translate.google.com.
[*]Нужно чтобы язык был: русский - скрипт зависит
[*]Запускаю скрипт, чтобы он ждал пока появиться кнопка Улучшить перевод. А надо сказать она появиться только после ввода текста
[/list]
И по идее - скрипт ждать должен, та как цикл работает. Но постоянно выскакивает ошибка что
Код:
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному
!> _UIA_ElementGetPropertyValue : первый параметр не является объектом

Где же я мог ошибиться, не подскажете?
Код:
#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
 
Верх