Предавайте информация от JavaScript към AutoIt

Има ли начин да свържа JavaScript с AutoIt, така че JavaScript да предава данни (и параметри, върху които да работи) на AutoIt.

Всъщност получавам координати на мишката върху уеб страница с помощта на JavaScript. Сега искам да предам тези координати на мишката динамично на скрипт AutoIt.

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

Моля, предложете заобиколно решение на този проблем.


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


Отговори (3)


Можете да го направите, като прикачите към прозореца на браузъра. По този начин autoit може да "вижда" или да манипулира всичко на страницата.

Разгледайте Chrome UDF или IE UDF

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 може да ви помогне. Това съвпада с това, което авторът на този малък СДС си представяше, когато каза

„Чудех се дали е възможно да „вмъкна“ 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