我是否有办法将JavaScript与AutoIt连接,以便JavaScript将数据(以及要处理的参数)传递给AutoIt。
实际上我正在使用JavaScript在网页上获取鼠标坐标。现在我想将这些鼠标坐标动态传递给AutoIt脚本。
最初我想过用JavaScript动态保存txt文件并从AutoIt读取它。但是如您所知,您无法使用客户端JavaScript(或jQuery)保存txt文件。
请建议解决此问题。
答案 0 :(得分:1)
您可以通过附加到浏览器窗口来完成。 这样,autoit就可以看到"或操纵页面上的所有内容。
答案 1 :(得分:0)
另一种选择是安装本地Web服务器,然后通过HTTP将任何数据从javascript传递到本地Web服务器,在Web服务器上的CGI脚本(或类似)中执行AutoIt。
请注意如何设置Web服务器,禁止或防火墙远程连接,因为您可能不希望其他计算机执行AutoIt脚本。
答案 2 :(得分:0)
当你说你想将javascript返回的坐标传递给AutoIT时,我假设是因为你想对它们执行一些只有AutoIT可以帮助你的动作。 这符合这个小UDF的作者在他说
时所设想的“我想知道是否有可能将jQuery”插入“IE页面,然后调用丰富的jQuery API来选择DOM元素。这将大大减少我的AutoIt脚本中的行数。”
下面给出了一套基本的教程。
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/