Автор Тема: Клик по элементу, получить значение элемента в IE  (Прочитано 766 раз)

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

Оффлайн mr.Gbabak [?]

  • Новичок
  • *
  • Сообщений: 153
  • Репутация: 14
  • Пол: Мужской
    • Награды
Добрый день.
Итак, возник вопрос, а возможно ли кликнуть по элементу (ссылка, кнопка) в IE, и потом получить ее URL, name, value и.т.д?
Цель: сделать  простейший мультибокс .

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


Оффлайн mr.Gbabak [?]

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

  • Автор темы
  • Репутация: 14
  • Пол: Мужской
    • Награды
Появилась мысль транслировать Url на другие окна, вот таким способом:

Код: AutoIt [Выделить]
#include <IE.au3>
#include <Array.au3>
#include <File.au3>
#include <UIAutomate.au3>
#include <WinAPIProc.au3>


HotKeySet("{Tab}", "TPause")
HotKeySet("{esc}", "vyx")


Global $Paused, $tUrl, $sUrl





$iPID1 = Run("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging -private") ; IE10/11 -noframemerging -private
ProcessWait($iPID1)
$hWnd1 = _WinAPI_EnumProcessWindows($iPID1)
WinWaitActive($hWnd1[1][0])
$oIE1 = _IEAttach($hWnd1[1][0], "hwnd")


$iPID2 = Run("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging -private") ; IE10/11 -noframemerging -private
ProcessWait($iPID2)
$hWnd2 = _WinAPI_EnumProcessWindows($iPID2)
WinWaitActive($hWnd2[1][0])
$oIE2 = _IEAttach($hWnd2[1][0], "hwnd")

$iPID3 = Run("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging -private") ; IE10/11 -noframemerging -private
ProcessWait($iPID3)

$hWnd3 = _WinAPI_EnumProcessWindows($iPID3)
WinWaitActive($hWnd3[1][0])
$oIE3 = _IEAttach($hWnd3[1][0], "hwnd")



While 1

    $sUrl = _IEPropertyGet($oIE1, "locationurl")
    Sleep(200)

    ConsoleWrite($sUrl & @CRLF)
    If $sUrl <> $tUrl Then

        _IENavigate($oIE2, $sUrl)
        _IENavigate($oIE3, $sUrl)

        $tUrl = $sUrl

    EndIf
WEnd





Func TPause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Script is "Paused"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TPause

Func vyx()
    ToolTip("Good Buy", 0, 0)
    Sleep(1000)
    Exit

EndFunc   ;==>vyx
 


но, после третьего посещения каких-либо страниц, перестает считываться текущий URL.
Где я не прав?

Оффлайн mr.Gbabak [?]

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

  • Автор темы
  • Репутация: 14
  • Пол: Мужской
    • Награды
В общем, идея не понравилась, нашелся более простой способ и эффективный способ через через библиотеку UIAutomate, при обычной навигации работает стабильно

Код: AutoIt [Выделить]
$oParent = _UIA_GetElementFromHandle($hCtrl1)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адреса и поиск", 'name', true)
$URL = _UIA_ElementGetPropertyValue($oElement, "ValueValue")

   

но, изначально данный проект затачивался под мультибоксинг, поэтому необходимо изменять URL на "лету", делая замену сессии.
Код: AutoIt [Выделить]
While 1

        $oParent = _UIA_GetElementFromHandle($hCtrl1)
        $oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адреса и поиск", 'name', True)
        $url = _UIA_ElementGetPropertyValue($oElement, "ValueValue")

        If $url <> $tUrl Then

            $rURL1 = StringRegExpReplace($url, $vedushiy, $vedom1)

            $rURL2 = StringRegExpReplace($url, $vedushiy, $vedom2)
            ConsoleWrite($rURL1 & @CRLF)

            WinWaitActive($hWnd2[1][0])
            $oIE2 = _IEAttach($hWnd2[1][0], "hwnd")
            _IENavigate($oIE2, $rURL1, 0)
            If @error Then ConsoleWrite(@error & @CRLF)

            WinWaitActive($hWnd3[1][0])
            $oIE3 = _IEAttach($hWnd3[1][0], "hwnd")
            _IENavigate($oIE3, $rURL2, 0)

            $tUrl = $url

        EndIf
        Sleep(20)
    WEnd

в результате вылетает с ошибкой "C:\Program Files (x86)\AutoIt3\Include\IE.au3" (272) : ==> The requested action with this object has failed.:
$oObject.navigate($sUrl)
$oObject^ ERROR


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


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3158
  • Репутация: 833
    • Награды
  • Версия AutoIt: 3.3.14.0
mr.Gbabak
Цитировать
более простой способ
Узнать текст строки адреса IE
Код: AutoIt [Выделить]
$sURL = ControlGetText("[class:IEFrame]", "", "Edit1")
ConsoleWrite($sURL & @CRLF)


Осуществить переход, используя строку адреса
Код: AutoIt [Выделить]
ControlSetText("[class:IEFrame]", "", "Edit1", "autoit-script.ru")
ControlSend("[class:IEFrame]", "", "Edit1", "{enter}")


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

Re: Клик по элементу, получить значение элемента в IE
« Ответ #3 Отправлен: Январь 10, 2017, 22:27:27 »

Оффлайн mr.Gbabak [?]

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

  • Автор темы
  • Репутация: 14
  • Пол: Мужской
    • Награды
Как всегда есть еще более простое и элегантное решение.

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3158
  • Репутация: 833
    • Награды
  • Версия AutoIt: 3.3.14.0
mr.Gbabak
Если я правильно понял
(нажмите для показа/скрытия)

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

Re: Клик по элементу, получить значение элемента в IE
« Ответ #5 Отправлен: Январь 11, 2017, 13:26:16 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
2771 Просмотров
Последний ответ Апрель 24, 2010, 09:25:01
от madmasles
9 Ответов
4346 Просмотров
Последний ответ Август 06, 2012, 11:17:23
от madmasles
3 Ответов
2431 Просмотров
Последний ответ Август 28, 2012, 17:46:52
от AZJIO
6 Ответов
2835 Просмотров
Последний ответ Октябрь 17, 2012, 08:53:09
от PoleschenkoKV
14 Ответов
2704 Просмотров
Последний ответ Март 21, 2014, 15:00:50
от alex33
5 Ответов
1256 Просмотров
Последний ответ Январь 20, 2015, 20:36:36
от lesoid
13 Ответов
3250 Просмотров
Последний ответ Февраль 01, 2016, 19:08:11
от alex33
10 Ответов
1635 Просмотров
Последний ответ Июль 25, 2015, 14:37:39
от tarhitay
3 Ответов
1237 Просмотров
Последний ответ Январь 11, 2016, 11:41:38
от LuciferKo
0 Ответов
367 Просмотров
Последний ответ Март 08, 2016, 18:10:43
от DezmontDeXa