如何用AutoHotKey获取在线Java格式化工具的textarea文本值?
解决无法获取Ace编辑器文本内容的问题
你遇到的核心问题是:页面里的<textarea class="ace_text-input">是Ace代码编辑器的隐藏辅助输入框,实际的代码内容并不存储在这个元素的value属性里。Ace编辑器会把代码内容渲染到自己的专属DOM结构中,或者通过其JavaScript API来存取内容,直接读取这个隐藏输入框自然拿不到有效内容。
下面提供两种可行的解决方案:
方法1:通过Ace编辑器的JavaScript API获取内容
Ace编辑器提供了官方API来安全存取编辑区内容,这是最可靠的方式。你可以在AutoHotKey中调用浏览器的JavaScript执行功能来实现:
示例AutoHotKey代码(以Chrome为例,使用Chrome.ahk库)
#Include Chrome.ahk ^+b:: ; 复制选中的目标代码 Send ^c Sleep 100 ; 初始化Chrome实例并打开格式化页面 ChromeInst := new Chrome("Profile1") ChromeInst.Navigate("https://www.tutorialspoint.com/online_java_formatter.htm") ChromeInst.WaitForPageLoad() ; 粘贴代码到Ace编辑器(通过JSAPI设置内容) ChromeInst.Evaluate("editor.setValue(clipboardData.getData('text'));") Sleep 500 ; 触发格式化按钮点击 ChromeInst.Evaluate("document.querySelector('button:contains('Format')').click();") Sleep 1000 ; 获取格式化后的代码 formattedCode := ChromeInst.Evaluate("return editor.getValue();").value ; 将结果复制到剪贴板 Clipboard := formattedCode MsgBox 格式化完成,代码已复制到剪贴板! ; 关闭浏览器实例 ChromeInst.Kill() return
方法2:直接从DOM结构中提取文本
如果不想依赖API,也可以直接从Ace编辑器渲染的DOM元素中提取内容——Ace会把每一行代码放在带.ace_line类的元素里:
可在AHK中执行的JavaScript代码片段
// 获取所有代码行元素 const lineElements = document.querySelectorAll('.ace_content .ace_line'); let formattedText = ''; for (const elem of lineElements) { formattedText += elem.innerText + '\n'; } return formattedText.trim();
把这段JS通过AHK的浏览器执行功能调用,就能拿到格式化后的完整代码文本。
补充说明
那个ace_text-input的textarea是Ace编辑器用来处理键盘输入的临时隐藏元素,它的value只会存储极少量的输入快照,不会保存完整的代码文本,这就是你之前无法获取有效内容的根本原因。
内容的提问来源于stack exchange,提问作者neural-network
相关产品推荐
相关产品推荐

