将信息从JavaScript传递给AutoIt

时间:2014-07-26 11:57:59

标签: javascript jquery google-chrome web autoit

我是否有办法将JavaScript与AutoIt连接,以便JavaScript将数据(以及要处理的参数)传递给AutoIt。

实际上我正在使用JavaScript在网页上获取鼠标坐标。现在我想将这些鼠标坐标动态传递给AutoIt脚本。

最初我想过用JavaScript动态保存txt文件并从AutoIt读取它。但是如您所知,您无法使用客户端JavaScript(或jQuery)保存txt文件。

请建议解决此问题。

4 个答案:

答案 0 :(得分:1)

您可以通过附加到浏览器窗口来完成。 这样,autoit就可以看到"或操纵页面上的所有内容。

查看Chrome UDFIE UDF

答案 1 :(得分:0)

另一种选择是安装本地Web服务器,然后通过HTTP将任何数据从javascript传递到本地Web服务器,在Web服务器上的CGI脚本(或类似)中执行AutoIt。

请注意如何设置Web服务器,禁止或防火墙远程连接,因为您可能不希望其他计算机执行AutoIt脚本。

答案 2 :(得分:0)

当你说你想将javascript返回的坐标传递给AutoIT时,我假设是因为你想对它们执行一些只有AutoIT可以帮助你的动作。 这符合这个小UDF的作者在他说

时所设想的
  

“我想知道是否有可能将jQuery”插入“IE页面,然后调用丰富的jQuery API来选择DOM元素。这将大大减少我的AutoIt脚本中的行数。”

下面给出了一套基本的教程。

  • 将文字设为按钮
  • 将文字设置为输入文字
  • 提交谷歌搜索
  • 搜索按类过滤仅获取结果网址

参考: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 ( )

答案 3 :(得分:-2)

如果只用纯文本存储一些coords,我会选择pastebin。 http://pastebin.com/api非常容易自动化。如果您需要帮助,请告诉我。

P.S。这是一个用autoit编写的小型Pastebin UDF:http://www.autoitscript.com/forum/topic/150838-pastebin-udf/