Что нового

UIAutomate - автоматизация нестандартных элементов GUI

hexin

Новичок
Сообщения
19
Репутация
0
Убедитесь в правильном названии строки адреса - её текст зависит от поиска по умолчанию (Google, Яндекс и т.д.)
Точно!
А я не мог понять в чем дело...
Оказывается после обновления поиск меняется с гугла на яндекс...
Спасибо!
Сообщение автоматически объединено:

Подскажите пожалуйста, а можно ли определить номер по порядку (слева на право) активной вкладки в Firefox?
То есть например открыто 10 страниц, а соответсвенно 10 вкладок, и активна 5тая вкладка, вот номер её слева на право можно определить?
чтобы скрипт показал что активна 5тая вкладка.
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
определить номер по порядку (слева на право) активной вкладки в Firefox
Код:
#include "UIAutomate.au3"

$oParent = _UIA_GetElementFromHandle(WinWait("[RegexpTitle:.*Mozilla Firefox]"))
$aTab = _UIA_FindAllElements($oParent, "ControlType", $UIA_TabItemControlTypeId)
ConsoleWrite("Всего вкладок: " & $aTab[0] & @CRLF)
$aSel = _UIA_FindElementsInArray($aTab, "SelectionItem.IsSelected", True)
ConsoleWrite("Выбрано вкладок: " & $aSel[0] & @CRLF)
$aFocus = _UIA_FindElementsInArray($aTab, "IsKeyboardFocusable", True, False, True)
ConsoleWrite("Номер активной вкладки: " & $aFocus[1] & @CRLF)
 

hexin

Новичок
Сообщения
19
Репутация
0
Не знаю почему но у меня практически не работает.
А именно если в браузере открыта одна вкладка то затрачивается время в 5 секунд, а если вкладок 2 то 48 секунд и увеличивается с колличеством вкладок.
Ну ждать 48 секунд на две вкладки это не те скорости...
Может у меня только так?
Лиса портейбл версия 92, виндовс10.
Зависание идет именно на функции $aTab = _UIA_FindAllElements($oParent, "ControlType", $UIA_TabItemControlTypeId)
Код:
#include "UIAutomate.au3"
WinActivate("[REGEXPTITLE:.*Mozilla Firefox]")

$oParent = _UIA_GetElementFromHandle(WinWait("[RegexpTitle:.*Mozilla Firefox]"))
ToolTip("1",0,0)

$timer = TimerInit()
$aTab = _UIA_FindAllElements($oParent, "ControlType", $UIA_TabItemControlTypeId)
MsgBox(4096, "", TimerDiff($timer)/1000)

ToolTip("2",0,0)
ConsoleWrite("Всего вкладок: " & $aTab[0] & @CRLF)
$aSel = _UIA_FindElementsInArray($aTab, "SelectionItem.IsSelected", True)
ConsoleWrite("Выбрано вкладок: " & $aSel[0] & @CRLF)
$aFocus = _UIA_FindElementsInArray($aTab, "IsKeyboardFocusable", True, False, True)
ConsoleWrite("Номер активной вкладки: " & $aFocus[1] & @CRLF)


А так же через раз и вообще не считывает из за ошибки
"D:\script5.au3" (12) : ==> Subscript used on non-accessible variable.:
ConsoleWrite("Всего вкладок: " & $aTab[0] & @CRLF)
ConsoleWrite("Всего вкладок: " & $aTab^ ERROR
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
Зависание идет именно на функции
Пробуйте
Код:
#include "UIAutomate.au3"

$oParent = _UIA_GetElementFromHandle(WinWait("[RegexpTitle:.*Mozilla Firefox]"))
$oTabCond = _UIA_CreatePropertyCondition("ControlType", $UIA_TabControlTypeId)
$oTab = _UIA_GetElementFromCondition($oParent, $oTabCond)
$oItemCond = _UIA_CreatePropertyCondition("ControlType", $UIA_TabItemControlTypeId)
$aItems = _UIA_FindAllElementsEx($oTab, $oItemCond, $TreeScope_Children)
$aFocus = _UIA_FindElementsInArray($aItems, "IsKeyboardFocusable", True, False, True)
ConsoleWrite("Номер активной вкладки: " & $aFocus[1] & @CRLF)

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

А так же через раз и вообще не считывает из за ошибки
Firefox при этом продолжает работать или завершается с ошибкой?
 
Последнее редактирование:

hexin

Новичок
Сообщения
19
Репутация
0
Он как бы замораживается, вкладки невозможно переключить, ссылки не работают, скрол вверх вниз страницу невозможно прокрутить, текст мышкой выделить не даёт, ну то есть окно лисы полностью заморажиавется, даже кнопки меню Файл, Правка, Вид... и даже кнопки "свернуть" и "закрыть" окно боаузера тоже заморожены.
Ну а потом вот когда скрипт завершит работу, эти 48 секунд, то он размораживается и всё работает как и прежде.
А вот если не дождаться завершения скрипта а самому его выключить то браузер так и остается замороженым.

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

Спасибо!
Вот этот код прекрасно работает.
10 вкладок считывает за 0,93 секунды, это уже совсем другое дело.
 
Последнее редактирование:

index

Новичок
Сообщения
2
Репутация
0
Здравствуйте.
Впервые сегодня узнал об UIAutomate.
Скажите, пожалуйста, есть ли возможность получить HTML-текст всей страницы из браузера Google Chrome (класс окна "Chrome_RenderWidgetHostHWND")?
Почитал форум, не нашёл ничего об этом. В списке увидел функцию "_UIA_ElementTextSetValue", но соответствующую функцию "_UIA_ElementTextGetValue" тоже не нашёл.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
получить HTML-текст всей страницы из браузера Google Chrome
Код:
WinActivate("[RegexpTitle: - Google Chrome]")
Send("^u")
Sleep(5555)
Send("^a")
Sleep(555)
Send("^c")
Sleep(555)
Send("^w")
Sleep(555)
$HTMLText = ClipGet()
ConsoleWrite($HTMLText & @CRLF)
 

hexin

Новичок
Сообщения
19
Репутация
0
Подскажите пожалуйста а как активизировать (навести фокус) на вкладку Firefox по её номеру по порядку?
Нашел пример как активизировать по имени, но не пойму как активизировать но её номеру.
То есть если считать вкладки слева на право, 1,2,3...и тд. и например нужно активизировать перувую вкладку, то как это сделать?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
Код:
#include "UIAutomate.au3"
$Num = 3
$oParent = _UIA_GetElementFromHandle(WinWait("[RegexpTitle:.*Mozilla Firefox]"))
$oTabCond = _UIA_CreatePropertyCondition("ControlType", $UIA_TabControlTypeId)
$oTab = _UIA_GetElementFromCondition($oParent, $oTabCond)
$oItemCond = _UIA_CreatePropertyCondition("ControlType", $UIA_TabItemControlTypeId)
$aItems = _UIA_FindAllElementsEx($oTab, $oItemCond, $TreeScope_Children)
If $Num > 0 And $Num <= $aItems[0] Then _UIA_ElementMouseClick($aItems[$Num])
 

hexin

Новичок
Сообщения
19
Репутация
0
InnI
Спасибо.
Но я так понял таким способом можно выделять вкладки если вкладок мало, а если вкладок много, ну например 50, то там появляются прокрутки влево и вправо и те ссылки скрываются с экрана и код не срабатывает. То есть все те вкладки которые будут скрыты в списке их не получится выделить
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
То есть все те вкладки которые будут скрыты в списке их не получится выделить
Верно. Потому что вкладки Firefox не реагируют на команду установки фокуса ввода. И шаблон прокрутки не поддерживают.
 

DyadyaGenya

Новичок
Сообщения
205
Репутация
0
Добрый день. Пробую кликать по вкладкам и кнопкам окна, созданного с помощью фреймворка WPF. Пробую сделать так:
Код:
#include <UIAutomate.au3>
Local $hWnd = WinGetHandle("Программа") & " 32bit" ; без этой дописки почему-то стопорится. Эта дописка взята из отчета Inspect_W10
ConsoleWrite($hWnd & @CR)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
 EndIf
 ConsoleWrite($hWnd & @CR)
Local $oParent = _UIA_GetElementFromHandle($hWnd)
 ConsoleWrite($oParent & @CR)
; Поиск вкладки с именем "Звіти, що налаштовуються" и клик по ней
Local $oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "Звіти, що налаштовуються")
_UIA_ElementMouseClick($oElement)

Получаю такой отчет
Код:
0x012A0B52 32bit ; естественно эти цифры разные при новом запуске, но они совпадают с данными, полученными другим способом
0x012A0B52 32bit
!> _UIA_GetElementFromHandle : параметр не является дескриптором
0
!> _UIA_GetControlTypeElement : первый параметр не является объектом
!> _UIA_ElementMouseClick : первый параметр не является объектом

Что может быть не так?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
без этой дописки почему-то стопорится
Вот с этим и нужно разобраться. Дескриптор окна (handle) - это число. И никаких "дописок" не должно быть.
И ещё. Вы некорректно используете условие. Лучше так
Код:
;~ If Not $hWnd Then
If IsHWnd($hWnd) Then


Эта дописка взята из отчета Inspect_W10
Inspect нужен для функций этой UDF. Для встренных функций AutoIt лучше использовать Au3Info.
 

DyadyaGenya

Новичок
Сообщения
205
Репутация
0
Inspect нужен для функций этой UDF.
Тоесть нужно рядом со скриптом положить/прописать Inspect?
Для встренных функций AutoIt лучше использовать Au3Info
Так он почти не дает инфы по окошку, только Handle и ещё пару каких-то значений. Именно про него я говорил, когда упоминал, что цифры совпадают, если пробовать получить его другим способом (Au3Info)
Лучше так

Код:
;~ If Not $hWnd Then
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/ishwnd.htm']IsHWnd[/URL]($hWnd) [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL]
А вот этого не знал, спасибо, чуть позже проверю.
Вот с этим и нужно разобраться. Дескриптор окна (handle) - это число. И никаких "дописок" не должно быть.
Как бы в курсе, что это должно быть число. Но с числом ничего не получалось. Стопорилось и висело, ничего не делая. По крайней мере в консоли для отладки ничего не писало. А в отчете Inspect есть такая строка:
Код:
hwnd=0x00180BE4 32bit class="HwndWrapper[Название программы.exe;;31ddbc2a-037d-40e6-bec7-9a57fa5692b1]" style=0x16CF0000 ex=0x401Name:    "Название вкладки"

Вот отсюда и взял от безысходности. С такой допиской хоть какой-то результат получил.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,296
Тоесть нужно рядом со скриптом положить/прописать Inspect?
Нет. Информация из окна Inspect используется для UDF, информация из окна au3info - для нативных функций.

Так он почти не дает инфы по окошку
Так вам и нужен только заголовок окна. Скопируйте из au3info поле Title и вставьте в WinGetHandle без всяких дописок.
 
Верх