Передать информацию из JavaScript в AutoIt

Есть ли способ связать JavaScript с AutoIt, чтобы JavaScript передавал данные (и параметры для работы) в AutoIt.

На самом деле я получаю координаты мыши на веб-странице с помощью JavaScript. Теперь я хочу динамически передать эти координаты мыши скрипту AutoIt.

Первоначально я думал о динамическом сохранении txt-файла с помощью JavaScript и чтении его из AutoIt. Но, как вы знаете, вы не можете сохранить текстовый файл с помощью клиентского JavaScript (или jQuery).

Пожалуйста, предложите обходной путь к этой проблеме.


person Adnan Zahid    schedule 26.07.2014    source источник


Ответы (3)


Вы можете сделать это, прикрепив к окну браузера. Таким образом, autoit может «видеть» или манипулировать всем на странице.

Взгляните на Пользовательскую функцию Chrome или Пользовательская функция IE

person Milos    schedule 27.07.2014
comment
Я могу установить расширение AutoIt, но не могу включить его, потому что оно недоступно в Интернет-магазине Chrome. Есть идеи @Milos? - person Adnan Zahid; 31.07.2014
comment
Может быть, вместо этого использовать IE? - person Milos; 01.08.2014
comment
Ну, мне нужно сделать массу вещей, таких как WebGL и другие вещи. IE? Мех. - person Adnan Zahid; 01.08.2014
comment
Автоматизация IE с помощью autoit на сегодняшний день является наиболее полной и простой автоматизацией браузера. Для управления страницей не требуется расширения или какого-либо внешнего помощника. Полная поддержка справки в файле справки AutoIt для каждой функции в IE UDF. - person Milos; 01.08.2014

Другим вариантом может быть установка локального веб-сервера, а затем передача любых данных из javascript на локальный веб-сервер через HTTP, выполнение AutoIt в сценарии CGI (или аналогичном) на веб-сервере.

Просто будьте осторожны с настройкой веб-сервера, запретом или брандмауэром удаленных подключений, потому что вы, вероятно, не хотите, чтобы другие компьютеры выполняли ваши сценарии AutoIt.

person Jeff-Inventor ChromeOS    schedule 26.07.2014

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

«Мне было интересно, можно ли «вставить» jQuery на страницу IE, а затем вызвать многофункциональный API jQuery для выбора элементов DOM. Это значительно уменьшило бы количество строк в моем скрипте AutoIt».

Базовый набор руководств приведен ниже.

  • Установить текст на кнопку
  • Установить текст на входной текст
  • Отправить поиск Google
  • поиск Фильтрация по классу для получения URL-адресов только результатов

Ссылка: https://www.autoitscript.com/forum/topic/81025-ie-automation-using-jquery/?do=findComment&comment=1058556

Global $objAppIE, $jQuery, $jQueryFilePath = @ScriptDir & '\jquery-1.9.1.js'
Global $oMyError = ObjEvent ( 'AutoIt.Error', '_MyErrFunc' )

If Not FileExists ( $jQueryFilePath ) Then InetGet ( 'http://code.jquery.com/jquery-1.9.1.js', $jQueryFilePath )
$objAppIE = ObjCreate ( 'InternetExplorer.Application' )
$objAppIE.visible = True
$objAppIE.navigate ( 'http://www.google.com/' )

$jQuery = _InsertJQuery ( $objAppIE )
If IsObj ( $jQuery ) Then
    $jQuery ( ':input[id="gbqfba"]' ).text ( 'Search With Bing' ) ; **set text button**
    Sleep ( 1000 ) ; just for see changes
    $jQuery ( ':input[id="gbqfq"]' ).val ( 'autoit' ) ; **set input text**
    Sleep ( 1000 ) ; just for see changes
    $jQuery ( ':input[id="gbqfba"]' ).submit ( ) ; submit
    _IEPageLoadWait ( $objAppIE )
    Do
        $aLinks = $jQuery ( '.l' ).get ( ) ; **filtering by class for get only results urls.**
    Until $aLinks.length
    ConsoleWrite ( '! Results Nb : ' & $aLinks.length & @Crlf )
    $i=0
    For $aLink In $aLinks
        $i+=1
        ConsoleWrite ( '+ ' & $i & ' $aLink.href : ' & $aLink.href & @Crlf )
    Next
EndIf

Func _InsertjQuery ( $objAppIE )
    Local $objWindow, $objHead, $objScript
    _IEPageLoadWait ( $objAppIE )
    If IsObj ( $objAppIE ) Then
        $objWindow = $objAppIE.document.parentWindow
        $objHead = $objAppIE.document.getElementsByTagName ( 'head' ).item ( 0 )
        If Not IsObj ( $objwindow.jQuery ) Then
            $objScript = $objAppIE.document.createElement ( 'script' )
            $objScript.type = 'text/javascript'
            $objScript.language = 'javascript'
            $objScript.defer = 'defer'
            $Script = FileRead ( $jQueryFilePath )
            $objScript.text = $Script
            $objHead.appendChild ( $objScript )
            While Not ( IsObj ( $objwindow.jQuery ) )
                Sleep ( 100 )
            WEnd
            $objwindow.jQuery.noConflict ( )
        EndIf
        Return $objwindow.jQuery
    EndIf
EndFunc ;==> _InsertjQuery ( )

Func _IEPageLoadWait ( $objAppIE )
    Do
        Sleep ( 50 )
    Until $objAppIE.readyState = 'complete' Or $objAppIE.readyState = 4
    Do
        Sleep ( 50 )
    Until $objAppIE.document.readyState = 'complete' Or $objAppIE.document.readyState = 4
    Do
        Sleep ( 50 )
    Until Not $objAppIE.busy
EndFunc ;==> _IEPageLoadWait ( )

Func _MyErrFunc ( )
    $HexNumber = Hex ( $oMyError.number, 8 )
    If $HexNumber = 80020006 Then Return
    Msgbox ( 0, '', 'We intercepted a COM Error !' & @CRLF & 'Number is: ' & $HexNumber & @CRLF & 'Windescription is: ' & $oMyError.windescription & @CRLF & 'Line Number: ' & $oMyError.scriptLine & @CRLF, 3 )
    Exit
Endfunc ;==> _MyErrFunc ( )
person Paras Parmar    schedule 18.01.2017