AutoHotkey 能与 Quicker 浏览器扩展直接通信吗?

请问 AutoHotkey 能与 Quicker 浏览器扩展直接通信吗?
我查看了官网,没找到接口相关的信息。

试试websocket?ahk启动一个服务端,让浏览器扩展去连接

我需要AutoHotkey 主动与浏览器通信

Using Selenium with AutoHotkey- Cross browser automation! - AutoHotkey Community

这个似乎是ahk和浏览器通信的,但是我没仔细看,好像有点复杂

autohotkey 可以执行程序,用 python 写个 socket client,把信息编码成字符串,作为 python 脚本的命令行参数发送过去。我之前就是这么做通信的,最简单的方式

ahk 接收消息的话,或许可以考虑通过剪贴板的变化。

这个工具调用的是firefox WebDriverBiDi 接口,这个接口有个问题——必须等到所有网页内容加载完毕才能调用。在某些访问不稳定的网页,明明页面完全显示出来了,只有一个不重要的连接在不断尝试,可能要等几秒钟,或者几十分钟,或者几个小时。。使得这个接口没有使用的价值。

browser严格的安全策略,不是脚本与脚本之间那么简单的
监听剪贴板,延迟大,又不稳定

其实不一定非得直接通信,你不如直接给出具体要干嘛,有时候曲线救国可能很简单

我要获取鼠标下的元素信息,比如文本、链接、图片,重点是要快,至少保持在10毫秒内完成发送请求,获取数据,返回数据。

浏览器不能监听端口,那你让扩展去连本地的一个服务器端口,作为中转。

浏览器扩展 ↔ server ← client ← ahk

剪贴板延迟大吗?没测量过,但我用来截屏后自动触发 OCR 感觉挺好用的

AHK 可以通过外部调用方式触发动作并传递必要的参数,或者使用推送服务(不需要专业版),然后在动作里获取参数以后,根据需求使用浏览器控制模块即可。

获取鼠标位置下信息,可以参考这个动作:

不过10ms内返回,感觉还是有些困难的,外部启动需要通过windows中转,中间通信的步骤比较多。

大佬,quicker插件能不能实现后台对浏览器进行滚动、发送按键等操作呢,边玩游戏时候边副屏看网页、视频用。

后台需要通过指定标签页id,在里面运行js(模块有一些事件的js封装),来发送模拟的事件,类似下面的代码。 但是有的网页模拟的可能不是很有效。

// create a new keyboard event and set the key to "Enter"
const event = new KeyboardEvent('keydown', {
  key: 'Enter',
  code: 'Enter',
  which: 13,
  keyCode: 13,
});

// dispatch the event on some DOM element
document.getElementById('myInput').dispatchEvent(event);

还有一种方式是通过Debugging协议控制浏览器,那个quicker里没有,可以直接编程实现, 参考 https://playwright.dev/

1 个赞

多谢各位。目前的方案是
1,向firefox发送窗口消息,模拟鼠标中键弹起(我不用中键)
2,在tampermonkey创建监听这个事件的脚本
3,js收到事件后抓取所需数据,发送到本地用于接收的端口

未优化的情况下,整个流程耗时在3-10毫秒,比之前用的ACC方案要快一些,但数据的丰富性远超后者。

请问 AutoHotkey 能模拟 Quicker 与扩展的通信吗?Quicker 与扩展是用什么方式通信的?

不行,Quicker是使用浏览器的本机通信协议接口实现的,参考:Chrome Extensions: Native messaging - Chrome for Developers

需要一个中间程序,在浏览器里注册后,浏览器在启动的时候,会启动这个中间程序,它作为一个消息代理,通过命名管道与Quicker通信,通过标准输入输出流和浏览器通信。

Quicker那边有一个服务一直保持这个命名管道连接,根据动作的指令发送消息,然后接收从浏览器返回的数据。

自己开发的话,可能不需要那么复杂,直接在中间消息代理里做个命名管道服务器,通过ahk给它直接发送消息应该也是可以的。