按键精灵句柄运行脚本(自动化快速入门:发现浏览器窗口,自动执行 JavaScript)
Posted
篇首语:白米饭好吃,五谷田难种。本文由小常识网(cha138.com)小编为大家整理,主要介绍了按键精灵句柄运行脚本(自动化快速入门:发现浏览器窗口,自动执行 JavaScript)相关的知识,希望对你有一定的参考价值。
按键精灵句柄运行脚本(自动化快速入门:发现浏览器窗口,自动执行 JavaScript)
使用 Windows 自带的 MSAA 发现浏览器窗口,自动执行 JavaScript 很简单!
aardio 代码示例:
import winex;import winex.accObject;import winex.key;//遍历浏览器窗口(兼容 Chrome,Edge 等)for hwnd,title in winex.each("Chrome_WidgetWin_1") //获取 MSAA 接口对象 var accObject = winex.accObject.fromWindow(hwnd); //查找文本框 var edit = accObject.find( role = 0x2A; name = "<Address and search bar>|<地址和搜索栏>"; ) if(edit) //获取浏览器地址栏内容 var url = edit.value(); //修改浏览器地址栏内容 edit.setValue("javascript:alert(document.location.href)") edit.takeFocus(); //后台发送按键消息 winex.key.click(hwnd,"ENTER"); thread.delay(1000);
运行一下看看效果:
所有 Windows 系统都自带 MSAA,接口简单,易于使用,生成的 EXE 程序体积也会很小。aardio 标准库 winex.accObject 则对 MSAA 做了进一步封装,用法就更简单了。
窗口基础知识
1、什么是窗口
「窗口」是应用程序在屏幕上创建的一个显示区域,通常用于接收并处理用户操作,并显示要输出的内容。窗口上的文本框、按钮、菜单这些也都是窗口。
我们一般将顶层独立窗口称为「窗体」,而窗体上的子窗口称为「控件」。
2、什么是窗口句柄
窗口句柄是一个用于唯一标准窗口的整数值。
其实很多系统资源,例如位图、进程、线程都有唯一标准资源的句柄。
在 aardio 中所有句柄都存为指针类型,唯有窗口句柄是普通的数值类型。
3、无句柄窗口
无句柄窗口是指该窗口上的控件没有创建子窗口,典型的例如网页上的按钮、文本框都没有窗口句柄。MSAA 可用于操作无句柄窗口。
使用窗口探测器
请在 aardio 中打开 『工具 > 探测器 > 窗口探测器』:
拖动『窗口探测器』左下角的十字图标到目标窗口上,就会显示窗口信息。
使用窗口探测器我们可以发现 Chrome, Edge 等浏览器的网页窗口类名都是 "Chrome_WidgetWin_1", 所以我们可以用下面的 aadio 代码获取所有打开的浏览器窗口:
import winex;for hwnd,title in winex.each("Chrome_WidgetWin_1")
aardio 中 winex 名字空间的所有库、函数都是用于操作外部程序窗口的。
winex.each() 用于遍历所有符合条件的窗口, winex.each() 的第一个参数可以指定窗口类名,这个类名支持模式匹配语法( 类正则表达式,但更简单,用法请参考语法文档 )。
自窗口句柄获取 MSAA 对象
自窗口句柄获取 MSAA 对象,代码很简单:
import winex;import winex.accObject;//遍历浏览器窗口(兼容 Chrome,Edge 等)for hwnd,title in winex.each("Chrome_WidgetWin_1") //获取 MSAA 接口对象 var accObject = winex.accObject.fromWindow(hwnd);
使用 MSAA 探测工具
请在 aardio 中打开 winex.accObject 的文档或源码,搜索“ACC对象浏览工具” 并下载该工具( inspect.exe )。
运行 inspect.exe ,点选下图的『 Watch Cursor 』图标:
也就是允许探测鼠标指向的窗口。
然后将鼠标移向浏览器的地址栏,Inspect 找到了地址栏所在的 ACC 对象,并显示了一堆信息,我们重点关注这几行:
Name: "Address and search bar"Role: editable text (0x2A)
Name 是 ACC 对象的名称。
Role 是 ACC 对象的角色,其实就是控件类型。
根据上面的信息,我们修改代码获取浏览器地址栏:
import winex;import winex.accObject;import console;//遍历浏览器窗口(兼容 Chrome,Edge 等)for hwnd,title in winex.each("Chrome_WidgetWin_1") //获取 MSAA 接口对象 var accObject = winex.accObject.fromWindow(hwnd); //查找地址栏 var edit = accObject.find( role = 0x2A; name = "<Address and search bar>|<地址和搜索栏>"; ) //显示地址栏的内容 if(edit) console.log( edit.value() )console.pause();
在 aardio 中运行上面的代码,我们干净利索地拿到了浏览器地址栏的网址。
拿到一个 accObject 对象以后,可以调用 accObject.find() 函数继续查找符合条件的子节点。而查找参数就是我们用 Inspect.exe 探测到的参数。
查找参数中,role, state 可以是文本,也可以是数值,一般建议用数值( 速度更快 )。
上面的 name 参数用到了模式匹配:
name = "<Address and search bar>|<地址和搜索栏>";
这个模式表达式中的 | 线是 “或” 的意思,而 < > 括号用于包含子串。如果目标 ACC 对象的 name 包含 "Address and search bar" 或者 "地址和搜索栏" 都符合条件。
后台按键
aardio 标准库 key,mouse 用于对前台窗口模拟按键鼠标。
例如:
key.press("ENTER")
作用就是模拟按下回车键。
如果我们改用 winex.key, winex.mouse 就可以直接向后台窗口发送按键或鼠标消息。这样的好处是不会干扰用户操作。
例如向浏览器窗口发送回车键消息:
import winex;import winex.key;//遍历浏览器窗口(兼容 Chrome,Edge 等)for hwnd,title in winex.each("Chrome_WidgetWin_1") //后台发送按键消息 winex.key.click(hwnd,"ENTER"); thread.delay(1000);
键名
操作按键的函数都需要用到键名。
我们还可以直接运行 aardio 『 工具 > 鼠标按键 > 按键指令生成器』
在『按键指令生成器』窗口内我们任意按键,就可以显示对应的键名了。
听说 UIA 更先进
有时候先进也是一种负担,飞机比自行车先进,这不等于任何时候都要用飞机替代自行车。
当然,在 aardio 中调用 UIA 也是很简单的,示例( 可独立运行 ):
import process;process.executeWaitInput("notepad.exe",io.getSpecial(0x25/*_CSIDL_SYSTEM*/,"drivers\\etc\\HOSTS")); //导入 .Net 类import System.Windows.Automation;TreeScope = ::UIAutomationTypes.import("System.Windows.Automation.TreeScope"); //访问 .Net 类的静态成员Automation = System.Windows.Automation;AutomationElement = Automation.AutomationElement;RootElement = AutomationElement.RootElement;//查找记事本窗口var condNotepadClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,"Notepad")var notepad = RootElement.FindFirst( TreeScope.Children, condNotepadClass) //查找记事本的编辑框var condEditClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,"Edit");var editBox = notepad.FindFirst( TreeScope.Descendants, condEditClass); if(!editBox) //Windows 11 condEditClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,"RichEditD2DPT"); editBox = notepad.FindFirst( TreeScope.Descendants, condEditClass); //获取记事本内的文本var textPattern = editBox.GetCurrentPattern(Automation.TextPattern.Pattern);var text = textPattern.DocumentRange.GetText(50)import win.dlg.message;win.dlg.message().info(text + " ……")
然并卵,WebDriver 不香么?
aardio 调用 WebDriver 就更简单了,示例:
import chrome.driver;var driver = chrome.driver(); //创建会话,打开chrome浏览器,调用参数仅用于演示( 可以省略 )。var browser = driver.startBrowser();//打开网页browser.go("网址你猜")//查找文本输入框,返回的DOM对象也可以使用ququerySelector继续查找子节点var ele = browser.querySelector("body").querySelector("#kw"); //在网页输入框输入内容ele.setValue( "ChromeDriver" )
相关参考
按键精灵如何重复运行(按键精灵定时器介绍和使用,不会的小伙伴速速看看精辟)
-金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键...
按键精灵 lua插件编写(【按键精灵教程】后台脚本单开变多开 So—Easy)
金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本...
金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本...
金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键...
按键精灵重复(三分钟学会按键精灵的多线程功能,90%的人都不会)
金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本...
按键精灵lua插件怎么写(历史最牛的按键精灵插件介绍,学会少走很多弯路)
金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键...
按键精灵如何重复脚本(「按键精灵脚本」写个数独游戏脚本玩玩)
...家好,我是公众号3分钟学堂的郭立员,今天继续我们的按键精灵安卓版学习。前些天下载了一个数独的游戏,简单的难度玩起来还行,稍微难点的解起来就比较费劲了。于是决定写个脚本来替我完成。可能有些朋友没玩过数独...
一、按键小精灵是什么呢按键小精灵是把按键精灵的脚本打包成一个可单独的exe程序,便于传播以及提供给新手使用。按键小精灵可以分为两种类型,分别是:(1)免费小精灵:便于传播分享。(2)商业小精灵:让用户可以把...
按键精灵怎么编后端脚本(按键精灵原来可以这样自定义变量,他们原来这样做的)
一、什么是用户自定义变量所谓的自定义变量是Q语言的一种特殊变量类型。它主要是让用户在不修改脚本,可以自己设置这个变量的值。在主界面或者是编辑器的脚本属性栏上可以看到这些变量,而且可以修改它们。二、用户...
手机app怎么更新版本(用友开发者中心升级这份移动开发入门必备指南请收好)
...onBuilder基于用友BIP强大的中台支撑能力,在元数据驱动和运行框架的统一模型架构下,通过点击拖拽+在线脚本以及多端编译技术,快速生成PC和移动多端业务应用,即时发布并使用。在移动开发方面,YonBuilder提供了专业的低代...