autoit在IE瀏覽器上執行js並拿到返回值
一、介紹
autoit通常是用來做windows桌面控件的操作的。除此之外還有一些UDF的庫擴展其功能。
本文介紹的並不是autoit的基礎操作,如果是做桌面控件的操作,請自行百度,教程多如牛毛。
autoit下載鏈接: autoit下載鏈接 百度很容易找到這個鏈接
除此之外,還有一個autoit的中文社區 : AutoIt中文論壇
二、IE擴展
autoit安裝完成後,在安裝路徑下 Include 文件夾下就有擴展的工具。
其可以根據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裏,第一個雙引號就把第二個轉義了。
還有就是,你品,你仔細品。**我把單引號和雙引號換了位置。**是的