打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
autoit在IE浏览器上执行js并拿到返回值

autoit在IE浏览器上执行js并拿到返回值

一、介绍

二、IE扩展

三、通过autoit在IE浏览器执行js

1、拿到浏览器

2、编写js

3、执行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浏览器窗口

1

2

2、编写js

$script = "$('#id')[0].click()"                      

用jquery习惯了,用原生js写也当然没问题。只有你的js在F12控制台能执行一般就行

1

2

3、执行js

$oIE.document.parentWindow.execscript($js)

执行完后,前面的id标签就被点击了

1

2

以上过程百度同样有很多例子,我只是拿自己使用的一个作为举例

使用时发现一个问题,比如我要拿一个元素的某个属性,比如 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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

六、字符特殊处理—引号嵌套

自己写js的时候,经过会有很多嵌套,因为有的时候选择一个特定的元素需要很多筛选,比如

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

1

这么看确实正常。但是放到autoit里执行就会出错,因为①执行的时候js本身就在双引号里

autoit也有类似java转义符的东西,但不完全一样,只是针对双引号吧。请看

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

1

这个语句在IE控制台是无法正确执行的。但是在autoit里,第一个双引号就把第二个转义了。

还有就是,你品,你仔细品。**我把单引号和双引号换了位置。**是的

————————————————

版权声明:本文为CSDN博主「fanqiuhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/fanqiuhang/article/details/105506273

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
AutoIt3采集网页中JS生成的数据 - JavaScript - web - JavaEye论坛
delphi WebBrowser的使用方法详解(五)
C#中的WebBrowser控件的使用
深入挖掘Windows脚本技术(二)
JS操作iframe
delphi webbrower的滚动条控制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服