如何获取dojoxGridCell的值?AutoHotkey实现遇阻求助
解决AutoHotkey获取dojoxGridCell值的问题
我之前也踩过用AHK操作Dojo网格获取单元格值的坑,结合你的场景(AutoHotkey Unicode 64位v1.1.25.01 + IE控制),给你几个实操方向:
1. 先确保Dojo网格完全初始化
你当前的代码只等待了IE的ReadyState=4,但Dojo组件是异步加载渲染的,必须等网格实例就绪才能操作。可以加个循环检查:
#Persistent #SingleInstance, force SetTitleMatchMode, 2 ie := ComObjCreate("InternetExplorer.Application") ie.Visible := 1 ie.Navigate("https://tmpa-fnsb.hs.mdmgr.net:8445") ; 等待IE加载完成 While (ie.Busy || ie.ReadyState != 4) Sleep 100 ; 额外等待Dojo网格初始化(假设网格id为"grid",根据实际修改) While True { try { ; 通过Dojo API获取网格实例 gridInstance := ie.document.parentWindow.Dojo.byId("grid") if (gridInstance) break } catch { ; 初始化前会报错,忽略继续等待 } Sleep 500 }
2. 用Dojo原生API获取单元格值(推荐)
dojox.Grid的数据存在底层store里,直接通过API获取比解析DOM更可靠,不会受渲染格式影响:
; 假设要获取第0行、field为"username"的列的值(替换成你的列field名) store := gridInstance.store targetItem := gridInstance.getItem(0) ; 获取第0行的数据项 cellValue := store.getValue(targetItem, "username") MsgBox, 获取到的单元格值:%cellValue%
如果不知道列的field名,可以先在浏览器控制台执行以下代码查看:
var grid = dojo.byId("grid"); console.log(grid.layout.cells); ; 打印所有列的配置,包含field属性
3. 从DOM结构解析单元格文本(备选方案)
如果实在无法用Dojo API,也可以直接遍历DOM元素获取渲染后的文本:
; 获取所有网格行 gridRows := ie.document.getElementsByClassName("dojoxGridRow") if (gridRows.Length > 0) { ; 获取第一行的所有单元格 rowCells := gridRows[0].getElementsByClassName("dojoxGridCell") if (rowCells.Length > 0) { ; 获取第一列(索引0)的文本,根据需求修改索引 cellText := rowCells[0].innerText MsgBox, 单元格文本:%cellText% } }
注意事项
- 不同版本的Dojo API可能有差异,比如部分版本用
store.get(item, field)代替store.getValue,建议先在浏览器控制台测试代码可行性 - 如果页面包含iframe,需要先定位到对应的iframe文档再操作
- 确保IE的安全设置允许脚本执行,否则AHK无法调用Dojo的API
内容的提问来源于stack exchange,提问作者CodingToWork
相关产品推荐
相关产品推荐

