autoit在IE瀏覽器上執行js並拿到返回值

一、介紹

autoit通常是用來做windows桌面控件的操作的。除此之外還有一些UDF的庫擴展其功能。
本文介紹的並不是autoit的基礎操作,如果是做桌面控件的操作,請自行百度,教程多如牛毛。

autoit下載鏈接: autoit下載鏈接 百度很容易找到這個鏈接
除此之外,還有一個autoit的中文社區 : AutoIt中文論壇

二、IE擴展

autoit安裝完成後,在安裝路徑下 Include 文件夾下就有擴展的工具。
IE擴展工具
其可以根據dom屬性的各種屬性尋找元素,執行點擊或者輸入的各種操作。比較常見的就是收入表單數據,然後點擊提交,模擬登陸的操作了。

三、通過autoit在IE瀏覽器執行js

曾經遇到過需要用autoit執行js,因爲selenium受到網站的限制不能使用,而autoit執行js是相當於在F12控制檯上執行js,並不會受到任何攔截什麼的。先講述下執行js:

1、拿到瀏覽器

$oIE = _IECreate ("https://www.autoitx.com",1,1,1,0)   這是創建一個新的IE瀏覽器窗口
$oIE = _IEAttach("AutoIt中文論壇" , 'embedded' , 1)    這是關聯一個已經啓動的IE瀏覽器窗口

2、編寫js

$script = "$('#id')[0].click()"                      
用jquery習慣了,用原生js寫也當然沒問題。只有你的js在F12控制檯能執行一般就行

3、執行js

$oIE.document.parentWindow.execscript($js)
執行完後,前面的id標籤就被點擊了

以上過程百度同樣有很多例子,我只是拿自己使用的一個作爲舉例
使用時發現一個問題,比如我要拿一個元素的某個屬性,比如 disabled = “disabled” 或者 display = “none”,前面是執行js的最基本語句了,它都沒有返回值,這就讓人比較抓狂了。請繼續看

四、得到返回值

前面說過了,通過autoit執行js,就相當於在F12控制檯執行。在控制檯直接執行
$(“input”)[0].value 會在控制檯打印出這個input的value值,這就是我想到的辦法。上代碼

$ oIE = _IEAttach(“AutoIt中文論壇” , ‘embedded’ , 1)
$ script = “$(’#id’)[0].click()”

① $ ie.document.parentWindow.execscript("document.bb = " & $ js)
② $ tempCon = $oIE.document.bb
③ $ ie.document.parentWindow.execscript(“document.bb = 999”)

第一句的執行會把js的返回值存儲到document對象裏 (bb只是隨意寫的)
第二句就是把結果放在一個臨時變量裏
第三句把document臨時變量復原。這裏還可以執行 delete document.bb (把bb屬性刪除)

意思就是在控制檯執行一個js,把打印的數據寫入到document.bb裏,再取出來

五、完整代碼

#include 'ie.au3'

$oIE = _IEAttach("AutoIt中文論壇" , 'embedded' , 1) 
$script = "$('#id')[0].click()"

;執行js並獲取結果
$result = execJs($oIE,$script)
;處理結果。我是打印出來,因爲我用java調用這個腳本生產的exe程序,通過流的方式讀取這個打印數據
ConsoleWrite( $result )

;執行js的方法
Func execJs( $ie, $js)
   $ie.document.parentWindow.execscript("document.bb = " & $js)
   $tempCon = $oIE.document.bb
   $ie.document.parentWindow.execscript("document.bb = 999")
   Return $tempCon
EndFunc

六、字符特殊處理—引號嵌套

自己寫js的時候,經過會有很多嵌套,因爲有的時候選擇一個特定的元素需要很多篩選,比如

$("#tableId input[name='chkList']").attr('checked',true)    把所有的複選框選中

這麼看確實正常。但是放到autoit裏執行就會出錯,因爲①執行的時候js本身就在雙引號裏
autoit也有類似java轉義符的東西,但不完全一樣,只是針對雙引號吧。請看

$('#tableId input[name=""chkList""]').attr('checked',true)  

這個語句在IE控制檯是無法正確執行的。但是在autoit裏,第一個雙引號就把第二個轉義了。
還有就是,你品,你仔細品。**我把單引號和雙引號換了位置。**是的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章