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里,第一个双引号就把第二个转义了。
还有就是,你品,你仔细品。**我把单引号和双引号换了位置。**是的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值