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浏览器窗口

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

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

  1. cefsharp执行完js代码后获取返回值问题

    CefSharp相关操作 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScr ...

  2. java在远程服务器上执行终端命令并获得返回结果

    最近经常会用到java到指定机器上执行终端命令并且获得返回结果,所以借此机会来记录一下 1.首先通过ip,用户名,密码链接到远程服务器上,然后执行终端命令 userName:主机的用户名,passwo ...

  3. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...

  4. js中递归调用返回值为undefined问题

    js中递归调用返回值为undefined问题 问题重现 下面这个简单的递归函数 理论上弹出的是11 但是............. 问题解决 在函数调用处加return

  5. c 后台代码调用ajax,.NET Selenium WebDriver操作调用浏览器后台执行Js(JavaScript)代码...

    1.Selenium WebDriver安装引用 注意:要用使用的浏览器肯定要装,并且Selenium.Chrome.WebDriver版本要和浏览器版一致. 如果要操作其它浏览器,则安装对应其它浏览 ...

  6. js作为参数,并且返回值;js的回调模式 callback

    有这样一个情景,当我们弹出一个 prompt的时候,要求用户在文本框输入一个文字,然后点击确认,就可以拿到返回值 var temp=prompt("请输入您的名字");     a ...

  7. python return返回值在计算机内的存储形式_Python如何执行存储过程,获取存储过程返回值...

    在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @Station varchar ( 50), @SN va ...

  8. dwr java有返回值但是js获取不到返回值_一探究竟:Java反射效率低的原因到底在哪?...

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低的原因 文章概览 我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运 ...

  9. python利用浏览器执行js_浏览器如何执行JS

    作为JS系列的第一篇,内容当然是浏览器如何执行一段JS啦. 首先通过浏览器篇我们可以得知,JS是在渲染进程里的JS引擎线程执行的.在此之后还要了解几个概念,编译器(Compiler).解释器(Inte ...

最新文章

  1. Radio Button无法对应选择的踩坑实例
  2. iOS中的CADisplayLink定时器
  3. DC-DC电源输出纹波测量的方法
  4. 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
  5. php中使用like查询,php like 查询
  6. Facebook开源 C++11 组件库,真香!
  7. [有限元]虚位移原理和虚力原理的证明的统一逻辑
  8. vue里面rules_vue如何使用rules对表单字段进行校验
  9. 教程 | 一个基于TensorFlow的简单故事生成案例:带你了解LSTM
  10. ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
  11. 01.第一章 初等概率论
  12. 2022软科中国最好学科排名——计算机科学与技术
  13. 供应链金融的三种业务模式
  14. HDFS配置之NN-SNN-DN
  15. FFmpeg 直播黑屏问题分析解决
  16. Amendment Quotation function in CLCL Plugin
  17. oracle修改换行空格回车符号
  18. 15款js编辑器大全 收藏
  19. LOL vs DOTA2,撕了这么多年终于有结论了
  20. 微积分知识补充——兼怀102

热门文章

  1. A Taxonomy of Deep Convolutional Neural Nets for Computer Vision
  2. UVa 11374 - Airport Express
  3. yum 安装oraclejdk_linux服务器上安装jdk的两种方法(yum+下载包)
  4. DSMM是什么?一篇内容让你快速了解
  5. 怎么监控员工上班做了什么(什么软件可以监控到员工在做什么?)
  6. Java八大基本类型详解
  7. FreeRtos源码分析之任务创建和管理(一)
  8. 图的存储——邻接表法
  9. 强壮的ZZW (一维dp 01背包)
  10. C#实现向邮箱发送验证码