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浏览器窗口
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并拿到返回值相关推荐
- cefsharp执行完js代码后获取返回值问题
CefSharp相关操作 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScr ...
- java在远程服务器上执行终端命令并获得返回结果
最近经常会用到java到指定机器上执行终端命令并且获得返回结果,所以借此机会来记录一下 1.首先通过ip,用户名,密码链接到远程服务器上,然后执行终端命令 userName:主机的用户名,passwo ...
- SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...
- js中递归调用返回值为undefined问题
js中递归调用返回值为undefined问题 问题重现 下面这个简单的递归函数 理论上弹出的是11 但是............. 问题解决 在函数调用处加return
- c 后台代码调用ajax,.NET Selenium WebDriver操作调用浏览器后台执行Js(JavaScript)代码...
1.Selenium WebDriver安装引用 注意:要用使用的浏览器肯定要装,并且Selenium.Chrome.WebDriver版本要和浏览器版一致. 如果要操作其它浏览器,则安装对应其它浏览 ...
- js作为参数,并且返回值;js的回调模式 callback
有这样一个情景,当我们弹出一个 prompt的时候,要求用户在文本框输入一个文字,然后点击确认,就可以拿到返回值 var temp=prompt("请输入您的名字"); a ...
- python return返回值在计算机内的存储形式_Python如何执行存储过程,获取存储过程返回值...
在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @Station varchar ( 50), @SN va ...
- dwr java有返回值但是js获取不到返回值_一探究竟:Java反射效率低的原因到底在哪?...
预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低的原因 文章概览 我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运 ...
- python利用浏览器执行js_浏览器如何执行JS
作为JS系列的第一篇,内容当然是浏览器如何执行一段JS啦. 首先通过浏览器篇我们可以得知,JS是在渲染进程里的JS引擎线程执行的.在此之后还要了解几个概念,编译器(Compiler).解释器(Inte ...
最新文章
- Radio Button无法对应选择的踩坑实例
- iOS中的CADisplayLink定时器
- DC-DC电源输出纹波测量的方法
- 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
- php中使用like查询,php like 查询
- Facebook开源 C++11 组件库,真香!
- [有限元]虚位移原理和虚力原理的证明的统一逻辑
- vue里面rules_vue如何使用rules对表单字段进行校验
- 教程 | 一个基于TensorFlow的简单故事生成案例:带你了解LSTM
- ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
- 01.第一章 初等概率论
- 2022软科中国最好学科排名——计算机科学与技术
- 供应链金融的三种业务模式
- HDFS配置之NN-SNN-DN
- FFmpeg 直播黑屏问题分析解决
- Amendment Quotation function in CLCL Plugin
- oracle修改换行空格回车符号
- 15款js编辑器大全 收藏
- LOL vs DOTA2,撕了这么多年终于有结论了
- 微积分知识补充——兼怀102